mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Add a section about loading libpgtcl; fix errors and omissions in
documentation of pg_select command.
This commit is contained in:
parent
c7caa796d0
commit
f441621eb1
@ -156,6 +156,48 @@ proc getDBs { {host "localhost"} {port "5432"} } {
|
|||||||
</example>
|
</example>
|
||||||
</Sect1>
|
</Sect1>
|
||||||
|
|
||||||
|
<Sect1 id="libpgtcl-loading">
|
||||||
|
<Title>Loading <application>pgtcl</application> into your application</Title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Before using <application>pgtcl</application> commands, you must load
|
||||||
|
<filename>libpgtcl</> into your Tcl application. This is normally
|
||||||
|
done with the Tcl <literal>load</> command. Here is an example:
|
||||||
|
|
||||||
|
<programlisting>
|
||||||
|
load libpgtcl[info sharedlibextension]
|
||||||
|
</programlisting>
|
||||||
|
|
||||||
|
The use of <literal>info sharedlibextension</> is recommended in
|
||||||
|
preference to hard-wiring <literal>.so</> or <literal>.sl</> into
|
||||||
|
the program.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>load</> command will fail unless the system's dynamic loader
|
||||||
|
knows where to look for the <filename>libpgtcl</> shared library file.
|
||||||
|
You may need to work with <literal>ldconfig</>, or set the environment
|
||||||
|
variable <envar>LD_LIBRARY_PATH</>, or use some equivalent facility for
|
||||||
|
your platform to make it work.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<filename>libpgtcl</> in turn depends on <filename>libpq</>, so the
|
||||||
|
dynamic loader must also be able to find the <filename>libpq</> shared
|
||||||
|
library. In practice this is seldom an issue, since both of these
|
||||||
|
shared libraries are normally stored in the same directory, but it
|
||||||
|
can be a stumbling block in some configurations.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If you use a custom executable for your application, you might choose
|
||||||
|
to statically bind <filename>libpgtcl</> into the executable and thereby
|
||||||
|
avoid the <literal>load</> command and the potential problems of dynamic
|
||||||
|
linking. See the source code for <application>pgtclsh</> for an example.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</Sect1>
|
||||||
|
|
||||||
<Sect1 id="libpgtcl-ref">
|
<Sect1 id="libpgtcl-ref">
|
||||||
<Title><application>pgtcl</application> Command Reference Information</Title>
|
<Title><application>pgtcl</application> Command Reference Information</Title>
|
||||||
|
|
||||||
@ -817,8 +859,7 @@ loop over the result of a SELECT statement
|
|||||||
<DATE>1997-12-24</DATE>
|
<DATE>1997-12-24</DATE>
|
||||||
</REFSYNOPSISDIVINFO>
|
</REFSYNOPSISDIVINFO>
|
||||||
<SYNOPSIS>
|
<SYNOPSIS>
|
||||||
pg_select <REPLACEABLE CLASS="PARAMETER">dbHandle</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">queryString</REPLACEABLE>
|
pg_select <REPLACEABLE CLASS="PARAMETER">dbHandle</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">queryString</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">arrayVar</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">queryProcedure</REPLACEABLE>
|
||||||
<REPLACEABLE CLASS="PARAMETER">arrayVar</REPLACEABLE> <REPLACEABLE CLASS="PARAMETER">queryProcedure</REPLACEABLE>
|
|
||||||
</SYNOPSIS>
|
</SYNOPSIS>
|
||||||
|
|
||||||
<REFSECT2 ID="R2-PGTCL-PGSELECT-1">
|
<REFSECT2 ID="R2-PGTCL-PGSELECT-1">
|
||||||
@ -874,18 +915,9 @@ pg_select <REPLACEABLE CLASS="PARAMETER">dbHandle</REPLACEABLE> <REPLACEABLE CLA
|
|||||||
</REFSECT2INFO>
|
</REFSECT2INFO>
|
||||||
<TITLE>Outputs
|
<TITLE>Outputs
|
||||||
</TITLE>
|
</TITLE>
|
||||||
<VARIABLELIST>
|
<Para>
|
||||||
<VARLISTENTRY>
|
None.
|
||||||
<TERM>
|
</Para>
|
||||||
<REPLACEABLE CLASS="PARAMETER">resultHandle</REPLACEABLE>
|
|
||||||
</TERM>
|
|
||||||
<LISTITEM>
|
|
||||||
<PARA>
|
|
||||||
the return result is either an error message or a handle for a query result.
|
|
||||||
</PARA>
|
|
||||||
</LISTITEM>
|
|
||||||
</VARLISTENTRY>
|
|
||||||
</VARIABLELIST>
|
|
||||||
</REFSECT2></REFSYNOPSISDIV>
|
</REFSECT2></REFSYNOPSISDIV>
|
||||||
|
|
||||||
<REFSECT1 ID="R1-PGTCL-PGSELECT-1">
|
<REFSECT1 ID="R1-PGTCL-PGSELECT-1">
|
||||||
@ -908,6 +940,37 @@ given chunk of code for each tuple in the result.
|
|||||||
<REPLACEABLE CLASS="PARAMETER">queryProcedure</REPLACEABLE>
|
<REPLACEABLE CLASS="PARAMETER">queryProcedure</REPLACEABLE>
|
||||||
is executed.
|
is executed.
|
||||||
</PARA>
|
</PARA>
|
||||||
|
|
||||||
|
<PARA>
|
||||||
|
In addition to the field values, the following special entries are
|
||||||
|
made in the array:
|
||||||
|
|
||||||
|
<VARIABLELIST>
|
||||||
|
<VARLISTENTRY>
|
||||||
|
<TERM><literal>.headers</></TERM>
|
||||||
|
<LISTITEM>
|
||||||
|
<PARA>A list of the column names returned by the SELECT.
|
||||||
|
</PARA>
|
||||||
|
</LISTITEM>
|
||||||
|
</VARLISTENTRY>
|
||||||
|
<VARLISTENTRY>
|
||||||
|
<TERM><literal>.numcols</></TERM>
|
||||||
|
<LISTITEM>
|
||||||
|
<PARA>The number of columns returned by the SELECT.
|
||||||
|
</PARA>
|
||||||
|
</LISTITEM>
|
||||||
|
</VARLISTENTRY>
|
||||||
|
<VARLISTENTRY>
|
||||||
|
<TERM><literal>.tupno</></TERM>
|
||||||
|
<LISTITEM>
|
||||||
|
<PARA>The current tuple number, starting at zero and incrementing
|
||||||
|
for each iteration of the loop body.
|
||||||
|
</PARA>
|
||||||
|
</LISTITEM>
|
||||||
|
</VARLISTENTRY>
|
||||||
|
</VARIABLELIST>
|
||||||
|
</PARA>
|
||||||
|
|
||||||
</REFSECT1>
|
</REFSECT1>
|
||||||
|
|
||||||
<REFSECT1 ID="R1-PGTCL-PGSELECT-2">
|
<REFSECT1 ID="R1-PGTCL-PGSELECT-2">
|
||||||
@ -918,7 +981,7 @@ This would work if table <classname>table</> has fields <structfield>control</>
|
|||||||
(and, perhaps, other fields):
|
(and, perhaps, other fields):
|
||||||
<ProgramListing>
|
<ProgramListing>
|
||||||
pg_select $pgconn "SELECT * FROM table" array {
|
pg_select $pgconn "SELECT * FROM table" array {
|
||||||
puts [format "%5d %s" array(control) array(name)]
|
puts [format "%5d %s" $array(control) $array(name)]
|
||||||
}
|
}
|
||||||
</ProgramListing>
|
</ProgramListing>
|
||||||
</PARA>
|
</PARA>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user