libpq.sgml 101.2 KB
Newer Older
1
<!--
2
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.121 2003/04/28 04:29:11 tgl Exp $
3 4
-->

5
 <chapter id="libpq">
6
  <title><application>libpq</application> - C Library</title>
7

8 9 10 11
  <indexterm zone="libpq">
   <primary>libpq</primary>
  </indexterm>

12
  <para>
13
   <application>libpq</application> is the <acronym>C</acronym>
14
   application programmer's interface to
15
   <productname>PostgreSQL</productname>.  <application>libpq</application> is a set
16
   of library functions that allow client programs to pass queries to the
17 18 19 20
   <productname>PostgreSQL</productname> backend server and to receive the
   results of these queries.  <application>libpq</application> is also the
   underlying engine for several other <productname>PostgreSQL</productname>
   application interfaces, including <application>libpq++</application> (C++),
21 22
   <application>libpgtcl</application> (Tcl), <productname>Perl</productname>, and
   <application>ECPG</application>.  So some aspects of <application>libpq</>'s behavior will be
23 24 25 26
   important to you if you use one of those packages.
  </para>

  <para>
27 28 29 30
   Three short programs are included at the end of this chapter (<xref linkend="libpq-example">) to show how
   to write programs that use <application>libpq</application>.  There are also several
   complete examples of <application>libpq</application> applications in the
   directory <filename>src/test/examples</filename> in the source code distribution.
31 32 33
  </para>

  <para>
34
   Client programs that use <application>libpq</application> must include the
35
   header file <filename>libpq-fe.h</filename> and must link with the
36
   <application>libpq</application> library.
37 38
  </para>

39 40
 <sect1 id="libpq-connect">
  <title>Database Connection Functions</title>
41

42
  <para>
43 44
   The following functions deal with making a connection to a
   <productname>PostgreSQL</productname> backend server.  An
45 46 47
   application program can have several backend connections open at
   one time.  (One reason to do that is to access more than one
   database.)  Each connection is represented by a
48
   <structname>PGconn</> object which is obtained from the function
49 50 51 52 53 54
   <function>PQconnectdb</> or <function>PQsetdbLogin</>.  Note that
   these functions will always return a non-null object pointer,
   unless perhaps there is too little memory even to allocate the
   <structname>PGconn</> object.  The <function>PQstatus</> function
   should be called to check whether a connection was successfully
   made before queries are sent via the connection object.
55

56 57 58
   <variablelist>
    <varlistentry>
     <term><function>PQconnectdb</function></term>
59 60 61
     <listitem>
      <para>
       Makes a new connection to the database server.
62 63 64 65
<synopsis>
PGconn *PQconnectdb(const char *conninfo);
</synopsis>
</para>
66

67 68
<para>
   This function opens a new database connection using the parameters taken
69
   from the string <literal>conninfo</literal>.  Unlike <function>PQsetdbLogin</> below,
70
   the parameter set can be extended without changing the function signature,
71 72
   so use either of this function or the nonblocking analogues <function>PQconnectStart</>
   and <function>PQconnectPoll</function> is preferred for new application programming.
73 74 75
   </para>

   <para>
76 77 78
   The passed string
   can be empty to use all default parameters, or it can contain one or more
   parameter settings separated by whitespace.
79
   Each parameter setting is in the form <literal>keyword = value</literal>.
80
   (To write an empty value or a value containing
81 82
   spaces, surround it with single quotes, e.g.,
   <literal>keyword = 'a value'</literal>.
83
   Single quotes and backslashes within the value must be escaped with a
84 85 86 87 88 89
   backslash, i.e., <literal>\'</literal> and <literal>\\</literal>.)
   Spaces around the equal sign are optional.
   </para>

   <para>
   The currently recognized parameter key words are:
90

91 92
   <variablelist>
    <varlistentry>
93
     <term><literal>host</literal></term>
94 95
     <listitem>
     <para>
96
      Name of host to connect to. 
97 98 99 100 101
      If this begins with a slash, it specifies Unix-domain communication
      rather than TCP/IP communication; the value is the name of the
      directory in which the socket file is stored.
      The default is to connect to a Unix-domain socket in
      <filename>/tmp</filename>.
102 103 104
     </para>
     </listitem>
    </varlistentry>
105

106
    <varlistentry>
107
     <term><literal>hostaddr</literal></term>
108 109
     <listitem>
     <para>
110 111 112 113 114
      IP address of host to connect to.  This should be in the
      standard IPv4 address format, e.g., <literal>172.28.40.9</>.  If
      your machine supports IPv6, you can also use those addresses. If
      a nonzero-length string is specified, TCP/IP communication is
      used.
115 116
     </para>
     <para>
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
      Using <literal>hostaddr</> instead of <literal>host</> allows the
      application to avoid a host name look-up, which may be important in
      applications with time constraints. However, Kerberos authentication
      requires the host name. The following therefore applies: If
      <literal>host</> is specified without <literal>hostaddr</>, a host name
      lookup is forced. If <literal>hostaddr</> is specified without
      <literal>host</>, the value for <literal>hostaddr</> gives the remote
      address; if Kerberos is used, this causes a reverse name query. If both
      <literal>host</> and <literal>hostaddr</> are specified, the value for
      <literal>hostaddr</> gives the remote address; the value for
      <literal>host</> is ignored, unless Kerberos is used, in which case that
      value is used for Kerberos authentication. (Note that authentication is
      likely to fail if <application>libpq</application> is passed a host name
      that is not the name of the machine at <literal>hostaddr</>.)  Also,
      <literal>host</> rather than <literal>hostaddr</> is used to identify
      the connection in <filename>$HOME/.pgpass</>.
133 134
     </para>
     <para>
135 136
      Without either a host name or host address,
      <application>libpq</application> will connect using a
137
      local Unix domain socket.
138 139 140
     </para>
     </listitem>
    </varlistentry>
141

142
    <varlistentry>
143
     <term><literal>port</literal></term>
144 145
     <listitem>
     <para>
146
      Port number to connect to at the server host,
147
      or socket file name extension for Unix-domain connections.
148 149 150
     </para>
     </listitem>
    </varlistentry>
151

152
    <varlistentry>
153
     <term><literal>dbname</literal></term>
154 155
     <listitem>
     <para>
156
      The database name.
157 158 159
     </para>
     </listitem>
    </varlistentry>
160

161
    <varlistentry>
162
     <term><literal>user</literal></term> 
163 164
     <listitem>
     <para>
165
      User name to connect as.
166 167 168
     </para>
     </listitem>
    </varlistentry>
169

170
    <varlistentry>
171
     <term><literal>password</literal></term>
172 173
     <listitem>
     <para>
174
      Password to be used if the server demands password authentication.
175 176 177
     </para>
     </listitem>
    </varlistentry>
178

179 180 181 182
    <varlistentry>
     <term><literal>connect_timeout</literal></term>
     <listitem>
     <para>
183
      Maximum wait for connection, in seconds (write as a decimal integer
184 185
      string). Zero or not specified means wait indefinitely.  It is not
      recommended to set the timeout to less than 2 seconds.
186 187 188 189
     </para>
     </listitem>
    </varlistentry>

190
    <varlistentry>
191
     <term><literal>options</literal></term>
192 193
     <listitem>
      <para>
194
       Command-line options to be sent to the server.
195 196 197
      </para>
     </listitem>
    </varlistentry>
198

199
    <varlistentry>
200
     <term><literal>tty</literal></term>
201 202
     <listitem>
     <para>
203
      Ignored (formerly, this specified where to send server debug output).
204 205 206
     </para>
     </listitem>
    </varlistentry>
207

208 209 210 211
    <varlistentry>
     <term><literal>requiressl</literal></term>
     <listitem>
     <para>
212 213
      If set to 1, an <acronym>SSL</acronym> connection to the server is required.
      <application>libpq</> will then refuse to connect if the server does not
214
      accept an <acronym>SSL</acronym> connection.
215
      If set to 0 (default), <application>libpq</> will negotiate the connection type with server.
216 217
      This option is only available if
      <productname>PostgreSQL</> is compiled with SSL support.
218 219 220
     </para>
     </listitem>
    </varlistentry>
221 222 223 224 225 226

    <varlistentry>
     <term><literal>service</literal></term>
     <listitem>
     <para>
      Service name to use for additional parameters.  It specifies a service
227
      name in <filename>pg_service.conf</filename> that holds additional connection parameters.
228
      This allows applications to specify only a service name so connection parameters 
229
      can be centrally maintained.  See 
230
      <filename><replaceable>PREFIX</>/share/pg_service.conf.sample</> for
231 232 233 234
      information on how to set up the file.
     </para>
     </listitem>
    </varlistentry>
235
   </variablelist>
236 237

   If  any  parameter is unspecified, then the corresponding
238
   environment variable (see <xref linkend="libpq-envars">)
239 240
   is checked. If the  environment  variable is not set either,
   then hardwired defaults are used.
241 242
   </para>
  </listitem>
243
 </varlistentry>
244

245 246
 <varlistentry>
  <term><function>PQsetdbLogin</function></term>
247 248 249
  <listitem>
   <para>
       Makes a new connection to the database server.
T
Thomas G. Lockhart 已提交
250
<synopsis>
T
Tom Lane 已提交
251
PGconn *PQsetdbLogin(const char *pghost,
252 253 254 255 256
                     const char *pgport,
                     const char *pgoptions,
                     const char *pgtty,
                     const char *dbName,
                     const char *login,
257
                     const char *pwd);
T
Thomas G. Lockhart 已提交
258
</synopsis>
259
</para>
T
Tom Lane 已提交
260

261
<para>
262 263 264
   This is the predecessor of <function>PQconnectdb</function> with a fixed
   number of parameters.  It has the same functionality except that the
   missing parameters cannot be specified in the call.
265 266
   </para>
  </listitem>
267
 </varlistentry>
268

269 270
 <varlistentry>
  <term><function>PQsetdb</function></term>
271 272
  <listitem>
   <para>
273
   Makes a new connection to the database server.
T
Thomas G. Lockhart 已提交
274
<synopsis>
T
Tom Lane 已提交
275 276 277 278
PGconn *PQsetdb(char *pghost,
                char *pgport,
                char *pgoptions,
                char *pgtty,
279
                char *dbName);
T
Thomas G. Lockhart 已提交
280
</synopsis>
281 282 283
</para>

<para>
284
   This is a macro that calls <function>PQsetdbLogin</function> with null pointers
285 286
   for the <parameter>login</> and <parameter>pwd</> parameters.  It is provided
   for backward compatibility with very old programs.
287 288
   </para>
  </listitem>
289
 </varlistentry>
290

291 292 293 294
 <varlistentry>
  <term><function>PQconnectStart</function></term>
  <term><function>PQconnectPoll</function></term>
  <listitem>
295
  <para>
P
Peter Eisentraut 已提交
296 297
   <indexterm><primary>nonblocking connection</primary></indexterm>
   Make a connection to the database server in a nonblocking manner.
298
<synopsis>
299
PGconn *PQconnectStart(const char *conninfo);
300 301
</synopsis>
<synopsis>
302
PostgresPollingStatusType PQconnectPoll(PGconn *conn);
303
</synopsis>
304 305 306
</para>
<para>
   These two functions are used to open a connection to a database server such
307 308
   that your application's thread of execution is not blocked on remote I/O
   whilst doing so.
309 310
  </para>
  <para>
311
   The database connection is made using the parameters taken from the string
312 313
   <literal>conninfo</literal>, passed to <function>PQconnectStart</function>. This string is in
   the same format as described above for <function>PQconnectdb</function>.
314 315
  </para>
  <para>
316
   Neither <function>PQconnectStart</function> nor <function>PQconnectPoll</function> will block, as long as a number of
317
   restrictions are met:
318 319 320
   <itemizedlist>
    <listitem>
     <para>
321
      The <literal>hostaddr</> and <literal>host</> parameters are used appropriately to ensure that
322
      name and reverse name queries are not made. See the documentation of
323
      these parameters under <function>PQconnectdb</function> above for details.
324 325
     </para>
    </listitem>
326

327 328
    <listitem>
     <para>
329
      If you call <function>PQtrace</function>, ensure that the stream object into which you trace
330
      will not block.
331 332
     </para>
    </listitem>
333

334 335
    <listitem>
     <para>
336
      You ensure for yourself that the socket is in the appropriate state
337
      before calling <function>PQconnectPoll</function>, as described below.
338 339 340 341
     </para>
    </listitem>
   </itemizedlist>
  </para>
342

343
  <para>
344 345
   To begin a nonblocking connection request, call <literal>conn = PQconnectStart("<replaceable>connection_info_string</>")</literal>.
   If <varname>conn</varname> is null, then <application>libpq</> has been unable to allocate a new <structname>PGconn</>
346
   structure. Otherwise, a valid <structname>PGconn</> pointer is returned (though not yet
347
   representing a valid connection to the database). On return from
348
   <function>PQconnectStart</function>, call <literal>status = PQstatus(conn)</literal>. If <varname>status</varname> equals
349
   <symbol>CONNECTION_BAD</symbol>, <function>PQconnectStart</function> has failed.
350 351
  </para>
  <para>
352
   If <function>PQconnectStart</> succeeds, the next stage is to poll <application>libpq</> so that it may
353
   proceed with the connection sequence.  Loop thus: If <function>PQconnectPoll(conn)</function> last returned
354
   <symbol>PGRES_POLLING_READING</symbol>, perform a <function>select()</> for reading on the socket determined using <function>PQsocket(conn)</function>. If
P
Peter Eisentraut 已提交
355
   it last returned <symbol>PGRES_POLLING_WRITING</symbol>, perform a <function>select()</> for writing on
356
   that same socket. If you have yet to call <function>PQconnectPoll</function>, i.e., after the call
357
   to <function>PQconnectStart</function>, behave as if it last returned <symbol>PGRES_POLLING_WRITING</symbol>.  If
358
   <function>select()</> shows that the socket is ready, consider it <quote>active</quote>. If it has
359 360 361
   been decided that this connection is <quote>active</quote>, call <function>PQconnectPoll(conn)</function>
   again. If this call returns <symbol>PGRES_POLLING_FAILED</symbol>, the connection procedure
   has failed.  If this call returns <symbol>PGRES_POLLING_OK</symbol>, the connection has been
362
   successfully made.
363
  </para>
364

365
  <para>
366
    Note that the use of <function>select()</function> to ensure that the socket is ready is merely
367
    a (likely) example; those with other facilities available, such as a
368
    <function>poll()</function> call, may of course use that instead.
369
  </para>
370

371
  <para>
372
    At any time during connection, the status of the connection may be
373 374 375 376 377 378 379
    checked, by calling <function>PQstatus</>. If this gives <symbol>CONNECTION_BAD</>, then the
    connection procedure has failed; if it gives <function>CONNECTION_OK</>, then the
    connection is ready.  Both of these states are equally detectable
    from the return value of <function>PQconnectPoll</>, described above. Other states may also occur
    during (and only during) an asynchronous connection procedure. These
    indicate the current stage of the connection procedure and may be useful
    to provide feedback to the user for example. These statuses are:
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403

    <variablelist>
     <varlistentry>
      <term><symbol>CONNECTION_STARTED</symbol></term>
      <listitem>
       <para>
        Waiting for connection to be made.
       </para>
      </listitem>
     </varlistentry> 

     <varlistentry>
      <term><symbol>CONNECTION_MADE</symbol></term>
      <listitem>
       <para>
        Connection OK; waiting to send.
       </para>
      </listitem>
     </varlistentry>  

     <varlistentry>
      <term><symbol>CONNECTION_AWAITING_RESPONSE</symbol></term>
      <listitem>
       <para>
P
Peter Eisentraut 已提交
404
        Waiting for a response from the server.
405 406 407 408 409 410 411 412
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><symbol>CONNECTION_AUTH_OK</symbol></term>
      <listitem>
       <para>
P
Peter Eisentraut 已提交
413
        Received authentication; waiting for connection start-up to continue.
414 415 416 417 418 419 420 421 422
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><symbol>CONNECTION_SETENV</symbol></term>

      <listitem>
       <para>
P
Peter Eisentraut 已提交
423
        Negotiating environment (part of the connection start-up).
424 425 426 427
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
428 429

    Note that, although these constants will remain (in order to maintain
P
Peter Eisentraut 已提交
430
    compatibility), an application should never rely upon these appearing in a
431 432
    particular order, or at all, or on the status always being one of these
    documented values. An application may do something like this:
433
<programlisting>
434 435 436 437 438 439 440 441 442
switch(PQstatus(conn))
{
    case CONNECTION_STARTED:
        feedback = "Connecting...";
        break;

    case CONNECTION_MADE:
        feedback = "Connected to server...";
        break;
443 444 445
.
.
.
446 447 448
    default:
        feedback = "Connecting...";
}
449 450
</programlisting>
  </para>
451

452
  <para>
453
   Note that if <function>PQconnectStart</function> returns a non-null pointer, you must call
454
   <function>PQfinish</function> when you are finished with it, in order to dispose of
455
   the structure and any associated memory blocks. This must be done even if a
456
   call to <function>PQconnectStart</function> or <function>PQconnectPoll</function> failed.
457
  </para>
458

459
  <para>
460
   <function>PQconnectPoll</function> will currently block if
461
   <application>libpq</> is compiled with SSL support. This restriction may be removed in the future.
462
  </para>
463

464
  <para>
465
   Finally, these functions leave the connection in a nonblocking state as if 
466 467
   <function>PQsetnonblocking</function> had been called.
  </para>
468 469
  </listitem>
 </varlistentry>
470

471 472
 <varlistentry>
  <term><function>PQconndefaults</function></term>
473 474
  <listitem>
   <para>
475
   Returns the default connection options.
T
Thomas G. Lockhart 已提交
476
<synopsis>
477
PQconninfoOption *PQconndefaults(void);
T
Thomas G. Lockhart 已提交
478

479
typedef struct
480 481 482 483
{
    char   *keyword;   /* The keyword of the option */
    char   *envvar;    /* Fallback environment variable name */
    char   *compiled;  /* Fallback compiled in default value */
484
    char   *val;       /* Option's current value, or NULL */
485 486 487 488 489
    char   *label;     /* Label for field in connect dialog */
    char   *dispchar;  /* Character to display for this field
                          in a connect dialog. Values are:
                          ""        Display entered value as is
                          "*"       Password field - hide value
490
                          "D"       Debug option - don't show by default */
491
    int     dispsize;  /* Field size in characters for dialog */
492
} PQconninfoOption;
T
Thomas G. Lockhart 已提交
493
</synopsis>
494 495 496
</para>

<para>
497
   Returns a connection options array.  This may
498
   be used to determine all possible <function>PQconnectdb</function> options and their
499
   current default values.  The return value points to an array of
500 501
   <structname>PQconninfoOption</structname> structures, which ends with an entry having a null
   key-word pointer.  Note that the current default values (<structfield>val</structfield> fields)
502 503
   will depend on environment variables and other context.
   Callers must treat the connection options data as read-only.
504
   </para>
505

506
   <para>
507
    After processing the options array, free it by passing it to
508 509
    <function>PQconninfoFree</function>.  If this is not done, a small amount of memory
    is leaked for each call to <function>PQconndefaults</function>.
510
   </para>
511

512
   <para>
513
    In <productname>PostgreSQL</productname> versions before 7.0, <function>PQconndefaults</function> returned a pointer
514
    to a static array, rather than a dynamically allocated array.  That
515
    was not thread-safe, so the behavior has been changed.
516 517
   </para>
  </listitem>
518
 </varlistentry>
519

520 521
 <varlistentry>
  <term><function>PQfinish</function></term>
522 523
  <listitem>
   <para>
524
   Closes  the  connection to the server.  Also frees
525
   memory used by the <structname>PGconn</structname> object.
T
Thomas G. Lockhart 已提交
526
<synopsis>
527
void PQfinish(PGconn *conn);
T
Thomas G. Lockhart 已提交
528
</synopsis>
529 530 531 532
</para>

<para>
   Note that even if the server connection attempt fails (as
533 534 535
   indicated by <function>PQstatus</function>), the application should call <function>PQfinish</function>
   to free the memory used by the <structname>PGconn</structname> object.
   The <structname>PGconn</> pointer should not be used after <function>PQfinish</function> has been called.
536 537
   </para>
  </listitem>
538
 </varlistentry>
539

540 541
 <varlistentry>
  <term><function>PQreset</function></term>
542 543
  <listitem>
   <para>
544
   Resets the communication channel to the server.
T
Thomas G. Lockhart 已提交
545
<synopsis>
546
void PQreset(PGconn *conn);
T
Thomas G. Lockhart 已提交
547
</synopsis>
548 549 550
</para>

<para>
551
   This function will close the connection
552
   to the server and attempt to  reestablish  a  new
P
Peter Eisentraut 已提交
553
   connection to the same server, using all the same
554 555
   parameters previously used.  This may be useful for
   error recovery if a working connection is lost.
556 557
   </para>
  </listitem>
558
 </varlistentry>
T
Thomas G. Lockhart 已提交
559

560 561 562
 <varlistentry>
  <term><function>PQresetStart</function></term>
  <term><function>PQresetPoll</function></term>
563 564
  <listitem>
   <para>
565
   Reset the communication channel to the server, in a nonblocking manner.
566 567 568 569 570 571
<synopsis>
int PQresetStart(PGconn *conn);
</synopsis>
<synopsis>
PostgresPollingStatusType PQresetPoll(PGconn *conn);
</synopsis>
572 573 574 575
</para>

<para>
    These functions will close the connection to the server and attempt to
P
Peter Eisentraut 已提交
576
    reestablish a new connection to the same server, using all the same
577
    parameters previously used. This may be useful for error recovery if a
578
    working connection is lost. They differ from <function>PQreset</function> (above) in that they
P
Peter Eisentraut 已提交
579
    act in a nonblocking manner. These functions suffer from the same
580
    restrictions as <function>PQconnectStart</> and <function>PQconnectPoll</>.
581 582
   </para>
   <para>
583
    To initiate a connection reset, call <function>PQresetStart</function>. If it returns 0, the reset has failed. If it returns 1,
584 585
    poll the reset using <function>PQresetPoll</function> in exactly the same way as you would
    create the connection using <function>PQconnectPoll</function>.
586 587
   </para>
  </listitem>
588
 </varlistentry>
589

590
 </variablelist>
591
</para>
T
Tom Lane 已提交
592

593
<para>
P
Peter Eisentraut 已提交
594 595
<indexterm><primary>libpq-fe.h</></>
<indexterm><primary>libpq-int.h</></>
596 597 598 599
<application>libpq</application> application programmers should be careful to
maintain the <structname>PGconn</structname> abstraction.  Use the accessor functions below to get
at the contents of <structname>PGconn</structname>.  Avoid directly referencing the fields of the
<structname>PGconn</> structure because they are subject to change in the future.
P
Peter Eisentraut 已提交
600
(Beginning in <productname>PostgreSQL</productname> release 6.4, the
601
definition of the <type>struct</type> behind <structname>PGconn</> is not even provided in <filename>libpq-fe.h</filename>.
602
If you have old code that accesses <structname>PGconn</structname> fields directly, you can keep using it
603
by including <filename>libpq-int.h</filename> too, but you are encouraged to fix the code
T
Tom Lane 已提交
604
soon.)
P
Peter Eisentraut 已提交
605

606 607 608
<variablelist>
<varlistentry>
<term><function>PQdb</function></term>
609 610
<listitem>
<para>
611
         Returns the database name of the connection.
T
Thomas G. Lockhart 已提交
612
<synopsis>
613
char *PQdb(const PGconn *conn);
T
Thomas G. Lockhart 已提交
614
</synopsis>
615 616 617
</para>

<para>
618 619
<function>PQdb</> and the next several functions return the values established
at connection.  These values are fixed for the life of the <structname>PGconn</>
T
Tom Lane 已提交
620
object.
621 622
</para>
</listitem>
623
</varlistentry>
624

625 626
<varlistentry>
<term><function>PQuser</function></term>
627 628
<listitem>
<para>
T
Tom Lane 已提交
629
         Returns the user name of the connection.
T
Thomas G. Lockhart 已提交
630
<synopsis>
631
char *PQuser(const PGconn *conn);
T
Thomas G. Lockhart 已提交
632
</synopsis>
633 634
</para>
</listitem>
635
</varlistentry>
636

637 638
<varlistentry>
<term><function>PQpass</function></term>
639 640
<listitem>
<para>
T
Tom Lane 已提交
641
         Returns the password of the connection.
T
Thomas G. Lockhart 已提交
642
<synopsis>
643
char *PQpass(const PGconn *conn);
T
Thomas G. Lockhart 已提交
644
</synopsis>
645 646
</para>
</listitem>
647
</varlistentry>
T
Tom Lane 已提交
648

649 650
<varlistentry>
<term><function>PQhost</function></term>
651 652
<listitem>
<para>
T
Tom Lane 已提交
653
         Returns the server host name of the connection.
T
Thomas G. Lockhart 已提交
654
<synopsis>
655
char *PQhost(const PGconn *conn);
T
Thomas G. Lockhart 已提交
656
</synopsis>
657 658
</para>
</listitem>
659
</varlistentry>
660

661 662
<varlistentry>
<term><function>PQport</function></term>
663 664
<listitem>
<para>
T
Tom Lane 已提交
665
         Returns the port of the connection.
T
Thomas G. Lockhart 已提交
666
<synopsis>
667
char *PQport(const PGconn *conn);
T
Thomas G. Lockhart 已提交
668
</synopsis>
669 670
</para>
</listitem>
671
</varlistentry>
672

673 674
<varlistentry>
<term><function>PQtty</function></term>
675 676
<listitem>
<para>
677
         Returns the debug <acronym>TTY</acronym> of the connection.
678 679 680
	 (This is obsolete, since the server no longer pays attention
	 to the <acronym>TTY</acronym> setting, but the function remains
	 for backwards compatibility.)
T
Thomas G. Lockhart 已提交
681
<synopsis>
682
char *PQtty(const PGconn *conn);
T
Thomas G. Lockhart 已提交
683
</synopsis>
684 685
</para>
</listitem>
686
</varlistentry>
687

688 689
<varlistentry>
<term><function>PQoptions</function></term>
690 691
<listitem>
<para>
692
       Returns the command-line options passed in the connection request.
T
Thomas G. Lockhart 已提交
693
<synopsis>
694
char *PQoptions(const PGconn *conn);
T
Thomas G. Lockhart 已提交
695
</synopsis>
696 697
</para>
</listitem>
698
</varlistentry>
699

700 701
<varlistentry>
<term><function>PQstatus</function></term>
702 703
<listitem>
<para>
T
Tom Lane 已提交
704
         Returns the status of the connection. 
T
Thomas G. Lockhart 已提交
705
<synopsis>
706
ConnStatusType PQstatus(const PGconn *conn);
T
Thomas G. Lockhart 已提交
707
</synopsis>
708 709 710 711 712
</para>

      <para>
       The status can be one of a number of values.
       However, only two of these are
713 714
       seen outside of an asynchronous connection procedure:
       <literal>CONNECTION_OK</literal> and
715
       <literal>CONNECTION_BAD</literal>. A good
P
Peter Eisentraut 已提交
716
       connection to the database has the status <literal>CONNECTION_OK</literal>.
717 718 719 720 721 722 723 724 725 726 727 728
       A failed connection
       attempt is signaled by status
       <literal>CONNECTION_BAD</literal>.
       Ordinarily, an OK status will remain so until
       <function>PQfinish</function>, but a
       communications failure might result in the status changing to
       <literal>CONNECTION_BAD</literal> prematurely.
       In that case the application
       could try to recover by calling <function>PQreset</function>.
      </para>

      <para>
729
       See the entry for <function>PQconnectStart</> and <function>PQconnectPoll</> with regards
730 731 732 733
       to other status codes
       that might be seen.
      </para>
     </listitem>
734
    </varlistentry>
735

736 737
    <varlistentry>
     <term><function>PQerrorMessage</function></term>
738 739
     <listitem>
      <para>
P
Peter Eisentraut 已提交
740
       <indexterm><primary>error message</></>
741 742
       Returns the error message most recently generated by
       an operation on the connection.
743
<synopsis>
744
char *PQerrorMessage(const PGconn* conn);
745
</synopsis>
746 747 748
      </para>

      <para>
749
       Nearly all <application>libpq</> functions will set a message for
750
       <function>PQerrorMessage</function> if they fail.
751 752
       Note that by <application>libpq</application> convention, a nonempty
       <function>PQerrorMessage</function> result will
753 754 755
       include a trailing newline.
      </para>
     </listitem>
756
    </varlistentry>
757

758 759
    <varlistentry>
     <term><function>PQsocket</function></term>
760 761
     <listitem>
      <para>
762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779
       Obtains the file descriptor number of the connection socket to
       the server.  A valid descriptor will be greater than or equal
       to 0; a result of -1 indicates that no server connection is
       currently open.
<synopsis>
int PQsocket(const PGconn *conn);
</synopsis>
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
     <term><function>PQbackendPID</function></term>
     <listitem>
      <para>
       Returns the process <acronym>ID</acronym> of the backend server process
       handling this connection.
<synopsis>
780
int PQbackendPID(const PGconn *conn);
781 782 783 784
</synopsis>
</para>

<para>
785
       The backend <acronym>PID</acronym> is useful for debugging
786 787
       purposes and for comparison to <command>NOTIFY</command>
       messages (which include the <acronym>PID</acronym> of the
788 789 790
       notifying backend process).  Note that the
       <acronym>PID</acronym> belongs to a process executing on the
       database server host, not the local host!
791 792
      </para>
     </listitem>
793
    </varlistentry>
794

795 796
    <varlistentry>
     <term><function>PQgetssl</function></term>
797 798
     <listitem>
      <para>
P
Peter Eisentraut 已提交
799
       <indexterm><primary>SSL</></>
800
       Returns the SSL structure used in the connection, or null
801
       if SSL is not in use. 
802
<synopsis>
803
SSL *PQgetssl(const PGconn *conn);
804 805 806 807
</synopsis>
</para>

<para>
808
       This structure can be used to verify encryption levels, check
809
       server certificates, and more. Refer to the <productname>OpenSSL</> documentation
810 811 812
       for information about this structure.
      </para>
      <para>
813
       You must define <symbol>USE_SSL</symbol> in order to get the
814
       prototype for this function. Doing this will also 
815
       automatically include <filename>ssl.h</filename> from <productname>OpenSSL</productname>.
816 817
      </para>
     </listitem>
818
    </varlistentry>
819

820
    </variablelist>
821 822 823
   </para>
  </sect1>

824
<sect1 id="libpq-exec">
P
Peter Eisentraut 已提交
825
<title>Command Execution Functions</title>
826 827

<para>
T
Tom Lane 已提交
828 829 830
Once a connection to a database server has been successfully
established, the functions described here are used to perform
SQL queries and commands.
P
Peter Eisentraut 已提交
831 832
</para>

833
<sect2 id="libpq-exec-main">
834 835 836 837 838
  <title>Main Functions</title>

<variablelist>
<varlistentry>
<term><function>PQexec</function></term>
839 840
<listitem>
<para>
841 842
          Submits a command to the server
          and waits for the result.
T
Thomas G. Lockhart 已提交
843
<synopsis>
844
PGresult *PQexec(PGconn *conn,
845
                 const char *command);
T
Thomas G. Lockhart 已提交
846
</synopsis>
847 848 849 850 851
</para>

<para>
          Returns a <structname>PGresult</structname> pointer or possibly a null pointer.
          A non-null pointer will generally be returned except in
T
Tom Lane 已提交
852
          out-of-memory conditions or serious errors such as inability
853 854
          to send the command to the server.
          If a null pointer is returned, it
855 856
	  should be treated like a <symbol>PGRES_FATAL_ERROR</symbol> result.  Use
	  <function>PQerrorMessage</function> to get more information about the error.
857 858
</para>
</listitem>
859 860
</varlistentry>
</variablelist>
T
Tom Lane 已提交
861

862
<para>
P
Peter Eisentraut 已提交
863
The <function>PGresult</function> structure encapsulates the result
864 865
returned by the server.
<application>libpq</application> application programmers should be careful to
866 867 868
maintain the <structname>PGresult</structname> abstraction.  Use the accessor functions below to get
at the contents of <structname>PGresult</structname>.  Avoid directly referencing the fields of the
<structname>PGresult</structname> structure because they are subject to change in the future.
869 870
If <quote>autocommit</quote> is on, multiple queries sent in a single
function call are processed in a single transaction.
P
Peter Eisentraut 已提交
871
</para>
872

873 874 875
<variablelist>
<varlistentry>
<term><function>PQresultStatus</function></term>
876 877
<listitem>
<para>
P
Peter Eisentraut 已提交
878
          Returns the result status of the command.
T
Thomas G. Lockhart 已提交
879
<synopsis>
880
ExecStatusType PQresultStatus(const PGresult *res);
T
Thomas G. Lockhart 已提交
881
</synopsis>
882 883 884
</para>

<para>
885 886
<function>PQresultStatus</function> can return one of the following values:

887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943
<variablelist>
 <varlistentry>
  <term><literal>PGRES_EMPTY_QUERY</literal></term>
  <listitem>
   <para>The string sent to the server was empty.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_COMMAND_OK</literal></term>
  <listitem>
   <para>Successful completion of a command returning no data.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_TUPLES_OK</literal></term>
  <listitem>
   <para>The query successfully executed.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_COPY_OUT</literal></term>
  <listitem>
   <para>Copy Out (from server) data transfer started.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_COPY_IN</literal></term>
  <listitem>
   <para>Copy In (to server) data transfer started.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_BAD_RESPONSE</literal></term>
  <listitem>
   <para>The server's response was not understood.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_NONFATAL_ERROR</literal></term>
  <listitem>
   <para>A nonfatal error occurred.</para>
  </listitem>
 </varlistentry>

 <varlistentry>
  <term><literal>PGRES_FATAL_ERROR</literal></term>
  <listitem>
   <para>A fatal error occurred.</para>
  </listitem>
 </varlistentry>
</variablelist>
944

945
If the result status is <literal>PGRES_TUPLES_OK</literal>, then the
946
functions described below can be used to retrieve the rows returned by
947 948 949 950 951
the query.  Note that a <command>SELECT</command> command that happens
to retrieve zero rows still shows <literal>PGRES_TUPLES_OK</literal>.
<literal>PGRES_COMMAND_OK</literal> is for commands that can never
return rows (<command>INSERT</command>, <command>UPDATE</command>,
etc.). A response of <literal>PGRES_EMPTY_QUERY</literal> often
952
exposes a bug in the client software.
953 954
</para>
</listitem>
955
</varlistentry>
T
Tom Lane 已提交
956

957 958
<varlistentry>
<term><function>PQresStatus</function></term>
959 960
<listitem>
<para>
P
Peter Eisentraut 已提交
961
	Converts the enumerated type returned by <function>PQresultStatus</> into
T
Tom Lane 已提交
962 963
	a string constant describing the status code.
<synopsis>
964
char *PQresStatus(ExecStatusType status);
T
Tom Lane 已提交
965
</synopsis>
966 967
</para>
</listitem>
968
</varlistentry>
T
Tom Lane 已提交
969

970 971
<varlistentry>
<term><function>PQresultErrorMessage</function></term>
972 973
<listitem>
<para>
974
Returns the error message associated with the command, or an empty string
T
Tom Lane 已提交
975
if there was no error.
T
Thomas G. Lockhart 已提交
976
<synopsis>
977
char *PQresultErrorMessage(const PGresult *res);
T
Thomas G. Lockhart 已提交
978
</synopsis>
979 980 981
</para>

<para>
982 983 984
Immediately following a <function>PQexec</function> or <function>PQgetResult</function>
call, <function>PQerrorMessage</function> (on the connection) will return the same
string as <function>PQresultErrorMessage</function> (on the result).  However, a
985
<structname>PGresult</structname> will retain its error message
T
Tom Lane 已提交
986
until destroyed, whereas the connection's error message will change when
987
subsequent operations are done.  Use <function>PQresultErrorMessage</function> when you want to
988
know the status associated with a particular <structname>PGresult</structname>; use <function>PQerrorMessage</function>
T
Tom Lane 已提交
989
when you want to know the status from the latest operation on the connection.
990 991
</para>
</listitem>
992
</varlistentry>
993

994 995
<varlistentry>
<term><function>PQclear</function></term>
996 997
<listitem>
<para>
998 999
          Frees  the  storage  associated with a <structname>PGresult</structname>.
          Every command result should be freed via <function>PQclear</function> when
1000 1001 1002 1003
          it  is  no  longer needed.
<synopsis>
void PQclear(PQresult *res);
</synopsis>
1004 1005 1006
</para>

<para>
1007
          You can keep a <structname>PGresult</structname> object around for as long as you
1008
          need it; it does not go away when you issue a new command,
1009 1010
          nor even if you close the connection.  To get rid of it,
          you must call <function>PQclear</function>.  Failure to do this will
1011
          result in memory leaks in your client application.
1012 1013
</para>
</listitem>
1014
</varlistentry>
1015

1016 1017
<varlistentry>
<term><function>PQmakeEmptyPGresult</function></term>
1018 1019
<listitem>
<para>
1020
          Constructs an empty <structname>PGresult</structname> object with the given status.
1021 1022 1023
<synopsis>
PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
</synopsis>
1024 1025 1026 1027
</para>

<para>
This is <application>libpq</>'s internal function to allocate and initialize an empty
1028
<structname>PGresult</structname> object.  It is exported because some applications find it
1029
useful to generate result objects (particularly objects with error
1030 1031
status) themselves.  If <parameter>conn</parameter> is not null and <parameter>status</> indicates an error,
the current error message of the specified connection is copied into the <structname>PGresult</structname>.
1032 1033
Note that <function>PQclear</function> should eventually be called on the object, just
as with a <structname>PGresult</structname> returned by <application>libpq</application> itself.
1034 1035
</para>
</listitem>
1036 1037
</varlistentry>
</variablelist>
1038 1039
</sect2>

1040
<sect2 id="libpq-exec-escape-string">
1041
  <title>Escaping Strings for Inclusion in SQL Commands</title>
P
Peter Eisentraut 已提交
1042 1043 1044

   <indexterm zone="libpq-exec-escape-string"><primary>escaping strings</></>

1045
<para>
1046
<function>PQescapeString</function> escapes a string for use within an SQL commmand.
1047 1048 1049
<synopsis>
size_t PQescapeString (char *to, const char *from, size_t length);
</synopsis>
1050 1051 1052 1053
</para>

<para>
If you want to use strings that have been received
P
Peter Eisentraut 已提交
1054
from a source that is not trustworthy (for example, because a random user
1055 1056 1057 1058
entered them), you should not directly include them in SQL
commands for security reasons.  Instead, you have to escape certain
characters that are otherwise interpreted specially by the SQL parser.
<function>PQescapeString</> performs this operation.
1059 1060
</para>
<para>
1061
The parameter <parameter>from</> points to the first character of the string that
1062
is to be escaped, and the <parameter>length</> parameter counts the
1063 1064
number of characters in this string.  (A terminating zero byte is
neither necessary nor counted.)  <parameter>to</> shall point to a
P
Peter Eisentraut 已提交
1065
buffer that is able to hold at least one more character than twice
1066 1067 1068 1069
the value of <parameter>length</>, otherwise the behavior is
undefined.  A call to <function>PQescapeString</> writes an escaped
version of the <parameter>from</> string to the <parameter>to</>
buffer, replacing special characters so that they cannot cause any
P
Peter Eisentraut 已提交
1070
harm, and adding a terminating zero byte.  The single quotes that
1071
must surround <productname>PostgreSQL</> string literals are not part of the result
1072 1073 1074 1075
string.
</para>
<para>
<function>PQescapeString</> returns the number of characters written
P
Peter Eisentraut 已提交
1076
to <parameter>to</>, not including the terminating zero byte.
1077 1078 1079
Behavior is undefined when the <parameter>to</> and <parameter>from</>
strings overlap.
</para>
P
Peter Eisentraut 已提交
1080
</sect2>
1081

1082 1083

 <sect2 id="libpq-exec-escape-bytea">
1084
  <title>Escaping Binary Strings for Inclusion in SQL Commands</title>
1085 1086 1087
  <indexterm zone="libpq-exec-escape-bytea">
   <primary>escaping binary strings</primary>
  </indexterm>
1088 1089 1090 1091 1092

  <variablelist>
  <varlistentry>
  <term><function>PQescapeBytea</function></term>
  <listitem>
1093
  <para>
1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
   Escapes binary data for use within an SQL command with the type <type>bytea</type>.
<synopsis>
unsigned char *PQescapeBytea(const unsigned char *from,
                             size_t from_length,
                             size_t *to_length);
</synopsis>
</para>

<para>
   Certain byte values <emphasis>must</emphasis> be escaped (but all
   byte values <emphasis>may</emphasis> be escaped) when used as part
   of a <type>bytea</type> literal in an <acronym>SQL</acronym>
   statement. In general, to escape a byte, it is converted into the
   three digit octal number equal to the octet value, and preceded by
   two backslashes. The single quote (<literal>'</>) and backslash
   (<literal>\</>) characters have special alternative escape
1110
   sequences. See <xref linkend="datatype-binary"> for more
1111 1112
   information. <function>PQescapeBytea</function> performs this
   operation, escaping only the minimally required bytes.
1113 1114 1115 1116
  </para>

  <para>
   The <parameter>from</parameter> parameter points to the first
1117
   byte of the string that is to be escaped, and the
1118
   <parameter>from_length</parameter> parameter reflects the number of
1119 1120 1121
   bytes in this binary string.  (A terminating zero byte is
   neither necessary nor counted.)  The <parameter>to_length</parameter>
   parameter points to a variable that will hold the resultant
B
Bruce Momjian 已提交
1122 1123
   escaped string length. The result string length includes the terminating
   zero byte of the result.
1124 1125 1126 1127
  </para>

  <para>
   <function>PQescapeBytea</> returns an escaped version of the
1128 1129 1130
   <parameter>from</parameter> parameter binary string in memory
   allocated with <function>malloc()</>, and must be freed using
   <function>PQfreemem()</>.
1131 1132 1133 1134 1135
   The return string has all special characters replaced
   so that they can be properly processed by the PostgreSQL string literal
   parser, and the <type>bytea</type> input function. A terminating zero
   byte is also added.  The single quotes that must surround
   PostgreSQL string literals are not part of the result string.
1136
  </para>
1137 1138
  </listitem>
  </varlistentry>
1139

1140 1141 1142
  <varlistentry>
  <term><function>PQunescapeBytea</function></term>
  <listitem>
1143 1144
  <para>
   Converts an escaped string representation of binary data into binary
1145 1146 1147 1148 1149
   data --- the reverse of <function>PQescapeBytea</function>.
<synopsis>
unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);
</synopsis>
</para>
1150

1151
<para>
P
Peter Eisentraut 已提交
1152
   The <parameter>from</parameter> parameter points to an escaped string
1153 1154 1155
   such as might be returned by <function>PQgetvalue</function> when applied to a
   <type>bytea</type> column. <function>PQunescapeBytea</function> converts
   this string representation into its binary representation.
1156 1157 1158 1159 1160
   It returns a pointer to a buffer allocated with
   <function>malloc()</function>, or null on error, and puts the size of
   the buffer in <parameter>to_length</parameter>. The memory must be
   freed using <function>PQfreemem()</>.

1161
  </para>
1162 1163
  </listitem>
  </varlistentry>
B
Bruce Momjian 已提交
1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176

  <varlistentry>
  <term><function>PQfreemem</function></term>
  <listitem>
  <para>
   Frees memory allocated by <application>libpq</>
<synopsis>
void PQfreemem(void *ptr);
</synopsis>
</para>

<para>
   Frees memory allocated by <application>libpq</>, particularly
1177 1178 1179
   <function>PQescapeBytea</function>,
   <function>PQunescapeBytea</function>,
   and <function>PQnotifies</function>.
B
Bruce Momjian 已提交
1180 1181 1182 1183 1184
   It is needed by Win32, which can not free memory across
   DLL's, unless multithreaded DLL's (/MD in VC6) are used.
  </para>
  </listitem>
  </varlistentry>
1185
  </variablelist>
1186
   
1187 1188 1189
 </sect2>


1190
<sect2 id="libpq-exec-select-info">
1191
  <title>Retrieving Query Result Information</title>
1192

1193 1194 1195
<variablelist>
<varlistentry>
<term><function>PQntuples</function></term>
1196 1197
<listitem>
<para>
1198
          Returns the number of rows (tuples)
1199
          in the query result.
T
Thomas G. Lockhart 已提交
1200
<synopsis>
1201
int PQntuples(const PGresult *res);
T
Thomas G. Lockhart 已提交
1202
</synopsis>
1203 1204
</para>
</listitem>
1205
</varlistentry>
1206

1207 1208
<varlistentry>
<term><function>PQnfields</function></term>
1209 1210
<listitem>
<para>
1211 1212
          Returns the number of columns (fields)
          in each row of the query result.
T
Thomas G. Lockhart 已提交
1213
<synopsis>
1214
int PQnfields(const PGresult *res);
T
Thomas G. Lockhart 已提交
1215
</synopsis>
1216 1217
</para>
</listitem>
1218
</varlistentry>
1219

1220 1221
<varlistentry>
<term><function>PQfname</function></term>
1222 1223
<listitem>
<para>
1224 1225
 Returns the column name associated with the given column number.
 Column numbers start at 0.
T
Thomas G. Lockhart 已提交
1226
<synopsis>
1227
char *PQfname(const PGresult *res,
1228
              int column_number);
T
Thomas G. Lockhart 已提交
1229
</synopsis>
1230 1231
</para>
</listitem>
1232
</varlistentry>
1233

1234 1235
<varlistentry>
<term><function>PQfnumber</function></term>
1236 1237
<listitem>
<para>
1238 1239
            Returns  the  column number
          associated with the given column name.
T
Thomas G. Lockhart 已提交
1240
<synopsis>
1241
int PQfnumber(const PGresult *res,
1242
              const char *column_name);
T
Thomas G. Lockhart 已提交
1243
</synopsis>
1244
</para>
T
Thomas G. Lockhart 已提交
1245

1246
<para>
1247
        -1 is returned if the given name does not match any column.
1248 1249
</para>
</listitem>
1250
</varlistentry>
1251

1252 1253
<varlistentry>
<term><function>PQftype</function></term>
1254 1255
<listitem>
<para>
1256 1257 1258
            Returns the column data type associated with the
          given  column number.  The  integer  returned is the
          internal OID number of the type.  Column numbers start
1259
          at 0.
T
Thomas G. Lockhart 已提交
1260
<synopsis>
1261
Oid PQftype(const PGresult *res,
1262
            int column_number);
T
Thomas G. Lockhart 已提交
1263
</synopsis>
1264 1265 1266
</para>

<para>
1267
You can query the system table <literal>pg_type</literal> to obtain
1268
the name and properties of the various data types. The <acronym>OID</acronym>s
1269
of the built-in data types are defined in the file <filename>src/include/catalog/pg_type.h</filename>
1270
in the source tree.
1271 1272
</para>
</listitem>
1273
</varlistentry>
1274

1275 1276
<varlistentry>
<term><function>PQfmod</function></term>
1277 1278
<listitem>
<para>
1279 1280 1281
          Returns  the type-specific modification data of the column
          associated with the given column number.
          Column numbers start at 0.
1282 1283
<synopsis>
int PQfmod(const PGresult *res,
1284
           int column_number);
1285 1286 1287
</synopsis>
</para>
</listitem>
1288
</varlistentry>
1289

1290 1291
<varlistentry>
<term><function>PQfsize</function></term>
1292 1293
<listitem>
<para>
1294 1295 1296
          Returns  the  size  in bytes of the column
          associated with the given column number.
          Column numbers start at 0.
T
Thomas G. Lockhart 已提交
1297
<synopsis>
1298
int PQfsize(const PGresult *res,
1299
            int column_number);
T
Thomas G. Lockhart 已提交
1300
</synopsis>
1301
</para>
1302

1303 1304 1305 1306 1307
<para>
	<function>PQfsize</> returns the space allocated for this column in a database
	row, in other words the size of the server's binary representation
	of the data type.  -1 is returned if the column has a variable size.
</para>
1308
</listitem>
1309
</varlistentry>
B
Bruce Momjian 已提交
1310

1311 1312
<varlistentry>
<term><function>PQbinaryTuples</function></term>
1313 1314
<listitem>
<para>
1315 1316
          Returns 1 if the <structname>PGresult</> contains binary row data
	  and 0 if it contains text data.
T
Thomas G. Lockhart 已提交
1317
<synopsis>
1318
int PQbinaryTuples(const PGresult *res);
T
Thomas G. Lockhart 已提交
1319
</synopsis>
1320 1321 1322 1323
</para>

<para>
Currently, binary row data can only be returned by a query that
P
Peter Eisentraut 已提交
1324
extracts data from a binary cursor.
1325 1326
</para>
</listitem>
1327 1328
</varlistentry>
</variablelist>
1329 1330 1331
</sect2>

<sect2 id="libpq-exec-select-values">
1332
  <title>Retrieving Query Result Values</title>
1333

1334 1335 1336
<variablelist>
<varlistentry>
<term><function>PQgetvalue</function></term>
1337 1338
<listitem>
<para>
1339
            Returns a single column value of one row
1340
	    of a <structname>PGresult</structname>.
1341
	    Row and colums indices start at 0.
T
Thomas G. Lockhart 已提交
1342
<synopsis>
1343
char* PQgetvalue(const PGresult *res,
1344 1345
                 int row_number,
                 int column_number);
T
Thomas G. Lockhart 已提交
1346
</synopsis>
1347 1348 1349
</para>

<para>
1350
For most queries, the value returned by <function>PQgetvalue</function>
P
Peter Eisentraut 已提交
1351
is a null-terminated character string  representation
1352
of the column value.  But if <function>PQbinaryTuples</function> returns 1,
1353 1354 1355
the  value  returned  by <function>PQgetvalue</function>  is  the  binary
representation of the
type in the internal format of the backend server
1356
(but not including the size word, if the column is variable-length).
1357
It  is then the programmer's responsibility to cast and
1358 1359 1360 1361 1362
convert the data to the correct C type.
</para>

<para>
The pointer
1363
returned  by  <function>PQgetvalue</function> points to storage that is
1364
part of the <structname>PGresult</structname> structure.  One should not modify the data it points to,
1365
and one must explicitly 
1366
copy the data into other storage if it is to
1367
be used past the lifetime of the  <structname>PGresult</structname>  structure itself.
1368 1369
</para>
</listitem>
1370
</varlistentry>
1371

1372 1373
<varlistentry>
<term><function>PQgetisnull</function></term>
1374 1375
<listitem>
<para>
1376 1377
           Tests a column for a null value.
           Row and column numbers start at 0.
1378 1379
<synopsis>
int PQgetisnull(const PGresult *res,
1380 1381
                int row_number,
                int column_number);
1382
</synopsis>
1383 1384 1385 1386
</para>

<para>
            This function returns  1 if the column is null and 0 if
1387
            it contains a non-null value.  (Note that <function>PQgetvalue</function>
1388 1389
            will return an empty string, not a null pointer, for a null
            column.)
1390 1391
</para>
</listitem>
1392
</varlistentry>
1393

1394 1395
<varlistentry>
<term><function>PQgetlength</function></term>
1396 1397
<listitem>
<para>
1398 1399
          Returns   the   length  of  a  column value in bytes.
          Row and column numbers start at 0.
T
Thomas G. Lockhart 已提交
1400
<synopsis>
1401
int PQgetlength(const PGresult *res,
1402 1403
                int row_number,
                int column_number);
T
Thomas G. Lockhart 已提交
1404
</synopsis>
1405 1406 1407 1408
</para>

<para>
This is the actual data length for the particular data value, that is, the
1409 1410
size of the object pointed to by <function>PQgetvalue</function>.  Note that for character-represented
values, this size has little to do with the binary size reported by <function>PQfsize</function>.
1411 1412
</para>
</listitem>
1413
</varlistentry>
T
Thomas G. Lockhart 已提交
1414

1415 1416
<varlistentry>
<term><function>PQprint</function></term>
1417 1418
<listitem>
<para>
1419 1420 1421
          Prints out all the rows and,  optionally,  the
          column names  to  the specified output stream.
<synopsis>
1422 1423 1424 1425
void PQprint(FILE* fout,      /* output stream */
             const PGresult *res,
             const PQprintOpt *po);

1426
typedef struct {
1427 1428 1429
    pqbool  header;      /* print output field headings and row count */
    pqbool  align;       /* fill align the fields */
    pqbool  standard;    /* old brain dead format */
1430
    pqbool  html3;       /* output HTML tables */
1431 1432 1433
    pqbool  expanded;    /* expand tables */
    pqbool  pager;       /* use pager for output if needed */
    char    *fieldSep;   /* field separator */
1434 1435 1436
    char    *tableOpt;   /* attributes for HTML table element */
    char    *caption;    /* HTML table caption */
    char    **fieldName; /* null-terminated array of replacement field names */
1437
} PQprintOpt;
1438 1439 1440 1441
</synopsis>
</para>

<para>
1442 1443 1444
This function was formerly used by <application>psql</application>
to print query results, but this is no longer the case and this
function is no longer actively supported.
1445 1446
</para>
</listitem>
1447 1448
</varlistentry>
</variablelist>
1449
</sect2>
1450

1451
<sect2 id="libpq-exec-nonselect">
1452
  <title>Retrieving Result Information for Other Commands</title>
1453

1454 1455 1456
<variablelist>
<varlistentry>
<term><function>PQcmdStatus</function></term>
1457 1458
<listitem>
<para>
T
Tom Lane 已提交
1459
          Returns the command status string from the SQL command that
1460
	  generated the <structname>PGresult</structname>.
T
Thomas G. Lockhart 已提交
1461
<synopsis>
1462
char * PQcmdStatus(PGresult *res);
T
Thomas G. Lockhart 已提交
1463
</synopsis>
1464 1465
</para>
</listitem>
1466
</varlistentry>
1467

1468 1469
<varlistentry>
<term><function>PQcmdTuples</function></term>
1470 1471
<listitem>
<para>
T
Tom Lane 已提交
1472
	  Returns the number of rows affected by the SQL command.
T
Thomas G. Lockhart 已提交
1473
<synopsis>
1474
char * PQcmdTuples(PGresult *res);
T
Thomas G. Lockhart 已提交
1475
</synopsis>
1476 1477 1478
</para>

<para>
1479
          If the <acronym>SQL</acronym> command that generated the
1480 1481 1482
	  <structname>PGresult</structname> was <command>INSERT</>, <command>UPDATE</>, or <command>DELETE</command>, this returns a
	  string containing the number of rows affected.  If the
          command was anything else, it returns the empty string.
1483 1484
</para>
</listitem>
1485
</varlistentry>
T
Thomas G. Lockhart 已提交
1486

1487 1488
<varlistentry>
<term><function>PQoidValue</function></term>
1489 1490
<listitem>
<para>
1491 1492 1493 1494
          Returns the OID of the inserted row, if the
	  <acronym>SQL</acronym> command was an <command>INSERT</command>
	  that inserted exactly one row into a table that has OIDs.
          Otherwise, returns <literal>InvalidOid</literal>.
1495 1496 1497
<synopsis>
Oid PQoidValue(const PGresult *res);
</synopsis>
1498 1499 1500
</para>

<para>
1501
          The type <type>Oid</type> and the constant
1502 1503 1504
          <literal>InvalidOid</literal> will be defined if you include
          the <application>libpq</application> header file. They will
          both be some integer type.
1505 1506
</para>
</listitem>
1507
</varlistentry>
1508

1509 1510
<varlistentry>
<term><function>PQoidStatus</function></term>
1511 1512
<listitem>
<para>
1513 1514 1515 1516 1517 1518 1519
          Returns a string with the OID of the inserted row, if the
          <acronym>SQL</acronym> command was an
          <command>INSERT</command>.  (The string will be
          <literal>0</> if the <command>INSERT</command> did not
          insert exactly one row, or if the target table does not have
          OIDs.)  If the command was not an <command>INSERT</command>,
          returns an empty string.
T
Thomas G. Lockhart 已提交
1520
<synopsis>
1521
char * PQoidStatus(const PGresult *res);
T
Thomas G. Lockhart 已提交
1522
</synopsis>
1523 1524 1525
</para>

<para>
1526
This function is deprecated in favor of <function>PQoidValue</function>
P
Peter Eisentraut 已提交
1527
and is not thread-safe.
1528 1529
</para>
</listitem>
1530 1531
</varlistentry>
</variablelist>
T
Tom Lane 已提交
1532

1533
</sect2>
1534
</sect1>
1535

1536
<sect1 id="libpq-async">
1537
<title>Asynchronous Command Processing</title>
B
Bruce Momjian 已提交
1538

P
Peter Eisentraut 已提交
1539 1540
  <indexterm zone="libpq-async"><primary>nonblocking connection</></>

1541
<para>
P
Peter Eisentraut 已提交
1542
The <function>PQexec</function> function is adequate for submitting commands in
1543 1544
normal, synchronous
applications.  It has a couple of deficiencies, however, that can be of importance to some users:
B
Bruce Momjian 已提交
1545

1546 1547 1548
<itemizedlist>
<listitem>
<para>
P
Peter Eisentraut 已提交
1549
<function>PQexec</function> waits for the command to be completed.  The application may have other
B
Bruce Momjian 已提交
1550 1551
work to do (such as maintaining a user interface), in which case it won't
want to block waiting for the response.
1552 1553 1554 1555
</para>
</listitem>
<listitem>
<para>
1556 1557 1558 1559
Since the execution of the client application is suspended while it
waits for the result, it is hard for the application to decide that it
would like to try to cancel the ongoing command.  (It can be done from
a signal handler, but not otherwise.)
1560 1561 1562 1563
</para>
</listitem>
<listitem>
<para>
P
Peter Eisentraut 已提交
1564
<function>PQexec</function> can return only one <structname>PGresult</structname> structure.  If the submitted command
1565
string contains multiple <acronym>SQL</acronym> commands, all but the last <structname>PGresult</structname> are
1566
discarded by <function>PQexec</function>.
1567 1568 1569 1570
</para>
</listitem>
</itemizedlist>
</para>
B
Bruce Momjian 已提交
1571

1572
<para>
B
Bruce Momjian 已提交
1573
Applications that do not like these limitations can instead use the
1574 1575
underlying functions that <function>PQexec</function> is built from:
<function>PQsendQuery</function> and <function>PQgetResult</function>.
1576 1577 1578 1579
</para>
<para>
Older programs that used this functionality as well as 
<function>PQputline</function> and <function>PQputnbytes</function>
1580
could block waiting to send data to the server. To
1581 1582 1583
address that issue, the function <function>PQsetnonblocking</function>
was added.
Old applications can neglect to use <function>PQsetnonblocking</function>
1584
and get the old potentially blocking behavior.  Newer programs can use 
P
Peter Eisentraut 已提交
1585
<function>PQsetnonblocking</function> to achieve a completely nonblocking
1586
connection to the server.
B
Bruce Momjian 已提交
1587

1588 1589 1590
<variablelist>
<varlistentry>
 <term><function>PQsetnonblocking</function></term>
1591 1592
 <listitem>
   <para>
1593
    Sets the nonblocking status of the connection.
1594
<synopsis>
1595
int PQsetnonblocking(PGconn *conn, int arg);
1596
</synopsis>
1597 1598 1599 1600
</para>

<para>
    Sets the state of the connection to nonblocking if <parameter>arg</parameter> is 1 and
1601
    blocking if <parameter>arg</parameter> is 0.  Returns 0 if OK, -1 if error.
1602 1603 1604
   </para>
   <para>
    In the nonblocking state, calls to
1605
    <function>PQputline</function>, <function>PQputnbytes</function>,
1606
    <function>PQsendQuery</function>, and <function>PQendcopy</function>
1607 1608 1609 1610
    will not block but instead return an error if they need to be called
    again.
   </para>
   <para>
P
Peter Eisentraut 已提交
1611
    When a database connection has been set to nonblocking mode and
1612
    <function>PQexec</function> is called, it will temporarily set the state
1613
    of the connection to blocking until the <function>PQexec</function> call
1614 1615 1616
    completes. 
   </para>
   <para>
1617
    More of <application>libpq</application> is expected to be made safe for 
1618
    the nonblocking mode in the future.
1619 1620
  </para>
 </listitem>
1621
</varlistentry>
1622

1623 1624
<varlistentry>
<term><function>PQisnonblocking</function></term>
1625 1626 1627 1628
<listitem>
<para>
       Returns the blocking status of the database connection.
<synopsis>
1629
int PQisnonblocking(const PGconn *conn);
1630
</synopsis>
1631 1632 1633 1634
</para>

<para>
       Returns 1 if the connection is set to nonblocking mode and
1635
       0 if blocking.
1636 1637
</para>
</listitem>
1638
</varlistentry>
1639

1640 1641
<varlistentry>
<term><function>PQsendQuery</function></term>
1642 1643
<listitem>
<para>
1644
          Submits a command to the server without
P
Peter Eisentraut 已提交
1645
	  waiting for the result(s).  1 is returned if the command was
1646
	  successfully dispatched and 0 if not (in which case, use
P
Peter Eisentraut 已提交
1647
	  <function>PQerrorMessage</> to get more information about the failure).
T
Thomas G. Lockhart 已提交
1648
<synopsis>
B
Bruce Momjian 已提交
1649
int PQsendQuery(PGconn *conn,
1650
                const char *command);
T
Thomas G. Lockhart 已提交
1651
</synopsis>
1652 1653 1654
</para>

<para>
1655 1656
	  After successfully calling <function>PQsendQuery</function>, call
          <function>PQgetResult</function> one or more
P
Peter Eisentraut 已提交
1657
	  times to obtain the results.  <function>PQsendQuery</function> may not be called
1658
	  again (on the same connection) until <function>PQgetResult</function> has returned a null pointer,
P
Peter Eisentraut 已提交
1659
	  indicating that the command is done.
1660 1661
</para>
</listitem>
1662
</varlistentry>
B
Bruce Momjian 已提交
1663

1664 1665
<varlistentry>
<term><function>PQgetResult</function></term>
1666 1667
<listitem>
<para>
1668 1669
          Waits for the next result from a prior <function>PQsendQuery</function>,
	  and return it.  A null pointer is returned when the command is complete
B
Bruce Momjian 已提交
1670
	  and there will be no more results.
T
Thomas G. Lockhart 已提交
1671
<synopsis>
B
Bruce Momjian 已提交
1672
PGresult *PQgetResult(PGconn *conn);
T
Thomas G. Lockhart 已提交
1673
</synopsis>
1674 1675 1676 1677
</para>

<para>
	  <function>PQgetResult</function> must be called repeatedly until it returns a null pointer,
P
Peter Eisentraut 已提交
1678
	  indicating that the command is done.  (If called when no command is
1679 1680
	  active, <function>PQgetResult</function> will just return a null pointer at once.)
	  Each non-null result from <function>PQgetResult</function> should be processed using
P
Peter Eisentraut 已提交
1681
	  the same <structname>PGresult</> accessor functions previously described.
1682
	  Don't forget to free each result object with <function>PQclear</function> when done with it.
1683
	  Note that <function>PQgetResult</function> will block only if a command is active and the
1684
	  necessary response data has not yet been read by <function>PQconsumeInput</function>.
1685 1686
</para>
</listitem>
1687 1688
</varlistentry>
</variablelist>
1689
</para>
B
Bruce Momjian 已提交
1690

1691
<para>
1692 1693
Using <function>PQsendQuery</function> and <function>PQgetResult</function>
solves one of <function>PQexec</function>'s problems:
P
Peter Eisentraut 已提交
1694
If a command string contains multiple <acronym>SQL</acronym> commands, the results of those
B
Bruce Momjian 已提交
1695
commands can be obtained individually.  (This allows a simple form of
1696 1697
overlapped processing, by the way: the client can be handling the
results of one command while the server is still working on later
P
Peter Eisentraut 已提交
1698
queries in the same command string.)  However, calling <function>PQgetResult</function> will
1699
still cause the client to block until the server completes the
1700
next <acronym>SQL</acronym> command.  This can be avoided by proper use of three more
B
Bruce Momjian 已提交
1701 1702
functions:

1703 1704 1705
<variablelist>
<varlistentry>
<term><function>PQconsumeInput</function></term>
1706 1707
<listitem>
<para>
1708
	  If input is available from the server, consume it.
T
Thomas G. Lockhart 已提交
1709
<synopsis>
T
Tom Lane 已提交
1710
int PQconsumeInput(PGconn *conn);
T
Thomas G. Lockhart 已提交
1711
</synopsis>
1712 1713 1714
</para>

<para>
1715
<function>PQconsumeInput</function> normally returns 1 indicating <quote>no error</quote>,
1716
but returns 0 if there was some kind of trouble (in which case
1717
<function>PQerrorMessage</function> can be used).  Note that the result does not say
1718 1719 1720 1721
whether any input data was actually collected. After calling
<function>PQconsumeInput</function>, the application may check
<function>PQisBusy</function> and/or <function>PQnotifies</function> to see if
their state has changed.
1722 1723
</para>
<para>
1724 1725
<function>PQconsumeInput</function> may be called even if the application is not
prepared to deal with a result or notification just yet.  The
1726
function will read available data and save it in a buffer, thereby
P
Peter Eisentraut 已提交
1727
causing a <function>select()</function> read-ready indication to go away.  The
1728
application can thus use <function>PQconsumeInput</function> to clear the
P
Peter Eisentraut 已提交
1729
<function>select()</function> condition immediately, and then examine the results at leisure.
1730 1731
</para>
</listitem>
1732
</varlistentry>
B
Bruce Momjian 已提交
1733

1734 1735
<varlistentry>
<term><function>PQisBusy</function></term>
1736 1737
<listitem>
<para>
1738
Returns 1 if a command is busy, that is, <function>PQgetResult</function> would block
1739 1740
waiting for input.  A 0 return indicates that <function>PQgetResult</function> can
be called with assurance of not blocking.
T
Thomas G. Lockhart 已提交
1741
<synopsis>
B
Bruce Momjian 已提交
1742
int PQisBusy(PGconn *conn);
T
Thomas G. Lockhart 已提交
1743
</synopsis>
1744 1745 1746 1747
</para>

<para>
<function>PQisBusy</function> will not itself attempt to read data from the server;
1748 1749
therefore <function>PQconsumeInput</function> must be invoked first, or the busy
state will never end.
1750 1751
</para>
</listitem>
1752
</varlistentry>
B
Bruce Momjian 已提交
1753

1754 1755
<varlistentry>
<term><function>PQflush</function></term>
1756 1757
<listitem>
<para>
1758 1759 1760 1761
Attempts to flush any data queued to the server.
Returns 0 if successful (or if the send queue is empty), -1 if it failed for
some reason, or 1 if it was unable to send all the data in the send queue yet
(this case can only occur if the connection is nonblocking).
1762 1763 1764
<synopsis>
int PQflush(PGconn *conn);
</synopsis>
1765 1766 1767
</para>

<para>
P
Peter Eisentraut 已提交
1768
<function>PQflush</function> needs to be called on a nonblocking connection 
P
Peter Eisentraut 已提交
1769
before calling <function>select()</function> to determine if a response has
1770
arrived.  If 0 is returned it ensures that there is no data queued to the 
1771
server that has not actually been sent.  Only applications that have used
1772 1773 1774
<function>PQsetnonblocking</function> have a need for this.
</para>
</listitem>
1775 1776
</varlistentry>
</variablelist>
1777
</para>
B
Bruce Momjian 已提交
1778

1779
<para>
1780 1781 1782 1783
A typical application using these functions will have a main loop that uses
<function>select()</function> to wait for all the conditions that it must
respond to.  One of the conditions will be input available from the server,
which in terms of <function>select()</function> means readable data on the file
1784 1785 1786 1787 1788
descriptor identified by <function>PQsocket</function>.
When the main loop detects input ready, it should call
<function>PQconsumeInput</function> to read the input.  It can then call
<function>PQisBusy</function>, followed by <function>PQgetResult</function>
if <function>PQisBusy</function> returns false (0).  It can also call
1789
<function>PQnotifies</function> to detect <command>NOTIFY</> messages (see <xref linkend="libpq-notify">).
1790
</para>
B
Bruce Momjian 已提交
1791

1792
<para>
1793 1794 1795 1796
Nonblocking connections (that have used <function>PQsetnonblocking</function>)
should not use <function>select()</function> until <function>PQflush</function>
has returned 0 indicating that there is no buffered data waiting to be sent
to the server.
1797 1798 1799
</para>

<para>
1800 1801 1802 1803 1804 1805
A client that uses <function>PQsendQuery</function>/<function>PQgetResult</function>
can also attempt to cancel a command that is still being processed by the server.

<variablelist>
<varlistentry>
<term><function>PQrequestCancel</function></term>
1806 1807
<listitem>
<para>
1808
	  Requests that the server abandon
P
Peter Eisentraut 已提交
1809
	  processing of the current command.
T
Thomas G. Lockhart 已提交
1810
<synopsis>
B
Bruce Momjian 已提交
1811
int PQrequestCancel(PGconn *conn);
T
Thomas G. Lockhart 已提交
1812
</synopsis>
1813 1814 1815
</para>

<para>
1816
The return value is 1 if the cancel request was successfully
1817
dispatched and 0 if not.  (If not, <function>PQerrorMessage</function> tells why not.)
1818 1819 1820 1821
Successful dispatch is no guarantee that the request will have any
effect, however.  Regardless of the return value of <function>PQrequestCancel</function>,
the application must continue with the normal result-reading
sequence using <function>PQgetResult</function>.  If the cancellation
P
Peter Eisentraut 已提交
1822
is effective, the current command will terminate early and return
1823
an error result.  If the cancellation fails (say, because the
1824
server was already done processing the command), then there will
1825
be no visible result at all.
1826
</para>
B
Bruce Momjian 已提交
1827

1828
<para>
1829
Note that if the current command is part of a transaction block, cancellation
B
Bruce Momjian 已提交
1830
will abort the whole transaction.
1831
</para>
B
Bruce Momjian 已提交
1832

1833
<para>
1834 1835 1836 1837
<function>PQrequestCancel</function> can safely be invoked from a signal handler.
So, it is also possible to use it in conjunction with plain
<function>PQexec</function>, if the decision to cancel can be made in a signal
handler.  For example, <application>psql</application> invokes
1838 1839 1840 1841 1842 1843
<function>PQrequestCancel</function> from a <symbol>SIGINT</> signal handler, thus allowing
interactive cancellation of commands that it issues through <function>PQexec</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
1844
</para>
B
Bruce Momjian 已提交
1845

1846
</sect1>
B
Bruce Momjian 已提交
1847

1848
<sect1 id="libpq-fastpath">
P
Peter Eisentraut 已提交
1849
<title>The Fast-Path Interface</title>
1850

1851
<para>
P
Peter Eisentraut 已提交
1852
<productname>PostgreSQL</productname> provides a fast-path interface to send
1853
function calls to the server.  This is a trapdoor into system internals and
1854
can be a potential security hole.  Most users will not need this feature.
1855
</para>
1856

1857
<para>
1858 1859
The function <function>PQfn</function> requests execution of a server
function via the fast-path interface:
T
Thomas G. Lockhart 已提交
1860
<synopsis>
1861 1862 1863 1864 1865
PGresult* PQfn(PGconn* conn,
               int fnid,
               int *result_buf,
               int *result_len,
               int result_is_int,
1866
               const PQArgBlock *args,
1867
               int nargs);
1868

1869
typedef struct {
1870 1871 1872 1873 1874 1875 1876
    int len;
    int isint;
    union {
        int *ptr;
        int integer;
    } u;
} PQArgBlock;
T
Thomas G. Lockhart 已提交
1877
</synopsis>
1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897
</para>

<para>
     The <parameter>fnid</> argument is the OID of the function to be
     executed.
     <parameter>result_buf</parameter> is the buffer in which
     to place the return value.  The caller must  have  allocated
     sufficient space to store the return value.  (There is no check!)
     The actual result length will be returned in the integer pointed
     to  by  <parameter>result_len</parameter>.   If a 4-byte integer result is expected, set
     <parameter>result_is_int</parameter> to 1, otherwise set it to 0.  (Setting <parameter>result_is_int</parameter> to 1
     tells <application>libpq</> to byte-swap the value if necessary, so that it is
     delivered as a proper <type>int</type> value for the client machine.  When
     <parameter>result_is_int</> is 0, the byte string sent by the server is returned
     unmodified.)
     <parameter>args</> and <parameter>nargs</> specify the arguments to be passed to the function.
</para>

<para>
     <function>PQfn</function> always returns a valid <structname>PGresult</structname> pointer. The result status
1898
     should be checked before the result is used.   The
1899
     caller is responsible for  freeing  the  <structname>PGresult</structname>  with
1900
     <function>PQclear</function> when it is no longer needed.
1901
</para>
1902

1903
</sect1>
1904

1905
<sect1 id="libpq-notify">
1906
<title>Asynchronous Notification</title>
1907

P
Peter Eisentraut 已提交
1908 1909
  <indexterm zone="libpq-notify"><primary>NOTIFY</primary></indexterm>

1910
<para>
1911 1912
<productname>PostgreSQL</productname> offers asynchronous notification via the
<command>LISTEN</command> and <command>NOTIFY</command> commands.  A server-side session registers its interest in a particular
1913
notification condition with the <command>LISTEN</command> command (and can stop listening
1914 1915 1916
with the <command>UNLISTEN</command> command).  All sessions listening on a
particular condition will be notified asynchronously when a <command>NOTIFY</command> command with that
condition name is executed by any session.  No additional information is
B
Bruce Momjian 已提交
1917
passed from the notifier to the listener.  Thus, typically, any actual data
1918 1919 1920
that needs to be communicated is transferred through a database table.
Commonly, the condition name is the same as the associated table, but it is
not necessary for there to be any associated table.
1921
</para>
B
Bruce Momjian 已提交
1922

1923
<para>
1924 1925 1926 1927
<application>libpq</application> applications submit <command>LISTEN</command> and <command>UNLISTEN</command>
commands as ordinary SQL command.  The arrival of <command>NOTIFY</command>
messages can subsequently be detected by calling <function>PQnotifies</function>.
</para>
1928

1929
<para>
1930 1931 1932
The function <function>PQnotifies</function>
          returns  the next notification from a list of unhandled
          notification messages received from the server.  It returns a null pointer if
T
Tom Lane 已提交
1933
          there are no pending notifications.  Once a notification is
P
Peter Eisentraut 已提交
1934
	  returned from <function>PQnotifies</>, it is considered handled and will be
T
Tom Lane 已提交
1935
	  removed from the list of notifications.
T
Thomas G. Lockhart 已提交
1936
<synopsis>
B
Bruce Momjian 已提交
1937
PGnotify* PQnotifies(PGconn *conn);
1938

1939
typedef struct pgNotify {
1940 1941
    char *relname;              /* notification name */
    int  be_pid;                /* process ID of server process */
1942
} PGnotify;
T
Thomas G. Lockhart 已提交
1943
</synopsis>
1944
After processing a <structname>PGnotify</structname> object returned by <function>PQnotifies</function>,
1945
be sure to free it with <function>PQfreemem()</function>.
1946
</para>
1947

1948 1949
<note>
<para>
1950
 In <productname>PostgreSQL</productname> 6.4 and later,
1951 1952
 the <literal>be_pid</literal> is that of the notifying backend process,
 whereas in earlier versions it was always the <acronym>PID</acronym> of your own backend process.
1953 1954
</para>
</note>
1955

1956
<para>
1957
<xref linkend="libpq-example-2"> gives a sample program that illustrates the use
T
Tom Lane 已提交
1958
of asynchronous notification.
1959
</para>
T
Tom Lane 已提交
1960

1961
<para>
1962
<function>PQnotifies()</function> does not actually read data from the server; it just
1963
returns messages previously absorbed by another <application>libpq</application>
1964
function.  In prior releases of <application>libpq</application>, the only way
1965
to ensure timely receipt of <command>NOTIFY</> messages was to constantly submit commands,
1966 1967 1968
even empty ones, and then check <function>PQnotifies()</function> after each
<function>PQexec()</function>.  While this still works, it is
deprecated as a waste of processing power.
1969
</para>
1970

1971
<para>
1972 1973
A better way to check for <command>NOTIFY</>
messages when you have no useful commands to execute is to call
1974 1975
<function>PQconsumeInput()</function>, then check
<function>PQnotifies()</function>.
1976 1977
You can use <function>select()</function> to wait for data to
arrive from the server, thereby using no <acronym>CPU</acronym> power unless there is something
1978
to do.  (See <function>PQsocket()</function> to obtain the file descriptor
P
Peter Eisentraut 已提交
1979
number to use with <function>select()</function>.)
1980
Note that this will work OK whether you submit commands with
1981 1982 1983 1984
<function>PQsendQuery</function>/<function>PQgetResult</function> or simply
use <function>PQexec</function>.  You should, however, remember to
check <function>PQnotifies()</function> after each
<function>PQgetResult</function> or <function>PQexec</function>, to see
1985
if any notifications came in during the processing of the command.
1986
</para>
B
Bruce Momjian 已提交
1987

1988
</sect1>
1989

1990
<sect1 id="libpq-copy">
1991
<title>Functions Associated with the <command>COPY</command> Command</title>
1992

1993 1994 1995 1996 1997
<indexterm zone="libpq-copy">
 <primary>COPY</primary>
 <secondary>with libpq</secondary>
</indexterm>

1998
<para>
1999 2000
 The <command>COPY</command> command in <productname>PostgreSQL</productname> has options to  read  from
 or  write  to  the  network  connection  used by <application>libpq</application>.
2001 2002
 Therefore, functions are necessary to access this  network
 connection directly so applications may take advantage of this capability.
2003
</para>
2004

2005
<para>
2006 2007 2008 2009
 These functions should be executed only after obtaining a result
 status of <literal>PGRES_COPY_OUT</literal> or
 <literal>PGRES_COPY_IN</literal> from <function>PQexec</function> or
 <function>PQgetResult</function>.
2010
</para>
B
Bruce Momjian 已提交
2011

2012 2013 2014
<variablelist>
<varlistentry>
<term><function>PQgetline</function></term>
2015 2016
<listitem>
<para>
2017
          Reads  a  newline-terminated  line  of  characters
2018 2019
          (transmitted  by the server) into a buffer
          string of size <parameter>length</>.
T
Thomas G. Lockhart 已提交
2020
<synopsis>
T
Tom Lane 已提交
2021
int PQgetline(PGconn *conn,
2022 2023
              char *buffer,
              int length);
T
Thomas G. Lockhart 已提交
2024
</synopsis>
2025 2026 2027 2028 2029
</para>

<para>
This function copies up to <parameter>length</>-1 characters
into the buffer and converts
P
Peter Eisentraut 已提交
2030 2031
the terminating newline into a zero byte.
<function>PQgetline</function> returns <symbol>EOF</symbol> at the end of input, 0 if the
2032 2033
entire line has been read, and 1 if the buffer is full but the
terminating newline has not yet been read.
2034 2035
</para>
<para>
2036
Note that the application must check to see if a
2037
new line consists of  the  two characters  <literal>\.</literal>,
2038 2039
which  indicates  that the server has finished sending
the results  of  the <command>COPY</command> command.
T
Tom Lane 已提交
2040
If  the  application might
2041 2042
receive lines that are more than <parameter>length</>-1  characters  long,
care is needed to be sure it recognizes the <literal>\.</literal> line correctly
T
Tom Lane 已提交
2043 2044
(and does not, for example, mistake the end of a long data line
for a terminator line).
2045 2046 2047
The code in the file
<filename>src/bin/psql/copy.c</filename>
contains example functions that correctly handle the <command>COPY</command> protocol.
2048 2049
</para>
</listitem>
2050
</varlistentry>
T
Tom Lane 已提交
2051

2052 2053
<varlistentry>
<term><function>PQgetlineAsync</function></term>
2054 2055
<listitem>
<para>
2056
          Reads a row of COPY data
2057
          (transmitted  by the server) into a buffer
T
Tom Lane 已提交
2058
          without blocking.
T
Thomas G. Lockhart 已提交
2059
<synopsis>
T
Tom Lane 已提交
2060 2061
int PQgetlineAsync(PGconn *conn,
                   char *buffer,
2062
                   int bufsize);
T
Thomas G. Lockhart 已提交
2063
</synopsis>
2064 2065 2066 2067
</para>

<para>
This function is similar to <function>PQgetline</function>, but it can be used
2068
by applications
2069 2070
that must read <command>COPY</command> data asynchronously, that is, without blocking.
Having issued the <command>COPY</command> command and gotten a <literal>PGRES_COPY_OUT</literal>
2071 2072 2073
response, the
application should call <function>PQconsumeInput</function> and
<function>PQgetlineAsync</function> until the
2074 2075 2076 2077
end-of-data signal is detected.
</para>
<para>
Unlike <function>PQgetline</function>, this function takes
T
Tom Lane 已提交
2078
responsibility for detecting end-of-data.
2079 2080 2081 2082 2083
</para>
<para>
On each call, <function>PQgetlineAsync</function> will return data if a
complete data row is available in <application>libpq</>'s input buffer.
Otherwise, no data is returned until the rest of the row arrives.
2084
The function returns -1 if the end-of-copy-data marker has been recognized,
T
Tom Lane 已提交
2085 2086
or 0 if no data is available, or a positive number giving the number of
bytes of data returned.  If -1 is returned, the caller must next call
2087
<function>PQendcopy</function>, and then return to normal processing.
2088 2089
</para>
<para>
2090 2091 2092 2093 2094 2095 2096
The data returned will not extend beyond a data-row boundary.  If possible
a whole row will be returned at one time.  But if the buffer offered by
the caller is too small to hold a row sent by the server, then a partial
data row will be returned.  With textual data this can be detected by testing
whether the last returned byte is <literal>\n</literal> or not.  (In a binary
COPY, actual parsing of the COPY data format will be needed to make the
equivalent determination.)
T
Tom Lane 已提交
2097
The returned string is not null-terminated.  (If you want to add a
2098 2099
terminating null, be sure to pass a <parameter>bufsize</parameter> one smaller
than the room actually available.)
2100 2101
</para>
</listitem>
2102
</varlistentry>
T
Tom Lane 已提交
2103

2104 2105
<varlistentry>
<term><function>PQputline</function></term>
2106 2107
<listitem>
<para>
2108 2109
Sends  a  null-terminated  string  to  the server.
Returns 0 if OK and <symbol>EOF</symbol> if unable to send the string.
T
Thomas G. Lockhart 已提交
2110
<synopsis>
T
Tom Lane 已提交
2111
int PQputline(PGconn *conn,
2112
              const char *string);
T
Thomas G. Lockhart 已提交
2113
</synopsis>
2114 2115 2116
</para>

<para>
2117 2118 2119 2120 2121
The COPY datastream sent by a series of calls to
<function>PQputline</function> has the same format as that returned by
<function>PQgetlineAsync</function>, except that applications are not
obliged to send exactly one data row per <function>PQputline</function>
call; it is okay to send a partial line or multiple lines per call.
2122
</para>
2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134

<note>
<para>
Before <productname>PostgreSQL</productname> 7.4, it was necessary for the
application to explicitly send the two characters <literal>\.</literal> as a
final line to indicate to the server that it had finished sending COPY data.
While this still works, it is deprecated and the special meaning of
<literal>\.</literal> can be expected to be removed in a future release.
It is sufficient to call <function>PQendcopy</function> after having sent the
actual data.
</para>
</note>
2135
</listitem>
2136
</varlistentry>
T
Tom Lane 已提交
2137

2138 2139
<varlistentry>
<term><function>PQputnbytes</function></term>
2140 2141
<listitem>
<para>
2142 2143
Sends  a  non-null-terminated  string  to  the server.
Returns 0 if OK and <symbol>EOF</symbol> if unable to send the string.
T
Thomas G. Lockhart 已提交
2144
<synopsis>
T
Tom Lane 已提交
2145 2146 2147
int PQputnbytes(PGconn *conn,
                const char *buffer,
                int nbytes);
T
Thomas G. Lockhart 已提交
2148
</synopsis>
2149 2150 2151
</para>

<para>
2152 2153 2154
This is exactly like <function>PQputline</function>, except that the data
buffer need not be null-terminated since the number of bytes to send is
specified directly.  Use this procedure when sending binary data.
2155 2156
</para>
</listitem>
2157
</varlistentry>
2158

2159 2160
<varlistentry>
<term><function>PQendcopy</function></term>
2161 2162
<listitem>
<para>
2163 2164 2165 2166 2167 2168
 Synchronizes with the server.
<synopsis>
int PQendcopy(PGconn *conn);
</synopsis>
 This function waits until
 the  server  has  finished  the copying.  It should
2169
 either be issued when the  last  string  has  been
2170 2171 2172
 sent  to  the  server using <function>PQputline</function> or when the
 last string has been  received  from  the  server
 using <function>PGgetline</function>.  It must be issued or the server
2173
 will get <quote>out of sync</quote> with  the client.   Upon
2174
 return from this function, the server is ready to
P
Peter Eisentraut 已提交
2175
 receive the next SQL command.
2176
 The return value is 0  on  successful  completion,
2177 2178
 nonzero otherwise.  (Use <function>PQerrorMessage</function> to retrieve
 details if the return value is nonzero.)
2179
</para>
B
Bruce Momjian 已提交
2180

2181
<para>
2182 2183 2184 2185
When using <function>PQgetResult</function>, the application should respond to
a <literal>PGRES_COPY_OUT</literal> result by executing <function>PQgetline</function>
repeatedly, followed by <function>PQendcopy</function> after the terminator line is seen.
It should then return to the <function>PQgetResult</function> loop until
2186
<function>PQgetResult</function> returns a null pointer. Similarly a <literal>PGRES_COPY_IN</literal>
2187 2188 2189
result is processed by a series of <function>PQputline</function> calls followed by
<function>PQendcopy</function>, then return to the <function>PQgetResult</function> loop.
This arrangement will ensure that
2190
a <command>COPY</command> command embedded in a series of <acronym>SQL</acronym> commands
B
Bruce Momjian 已提交
2191
will be executed correctly.
2192
</para>
2193

2194
<para>
2195
Older applications are likely to submit a <command>COPY</command>
2196 2197
via <function>PQexec</function> and assume that the transaction is done after
<function>PQendcopy</function>.
2198
This will work correctly only if the <command>COPY</command> is the only
P
Peter Eisentraut 已提交
2199
<acronym>SQL</acronym> command in the command string.
2200
</para>
2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216
</listitem>
</varlistentry>
</variablelist>

<para>
An example:

<programlisting>
PQexec(conn, "CREATE TABLE foo (a integer, b varchar(16), d double precision);");
PQexec(conn, "COPY foo FROM STDIN;");
PQputline(conn, "3\thello world\t4.5\n");
PQputline(conn, "4\tgoodbye world\t7.11\n");
...
PQendcopy(conn);
</programlisting>
</para>
B
Bruce Momjian 已提交
2217

2218
</sect1>
2219

2220
<sect1 id="libpq-trace">
2221
<title>Tracing Functions</title>
2222

2223 2224 2225
<variablelist>
<varlistentry>
<term><function>PQtrace</function></term>
2226 2227
<listitem>
<para>
2228
          Enables  tracing of the client/server communication to a debugging file stream.
T
Thomas G. Lockhart 已提交
2229
<synopsis>
2230
void PQtrace(PGconn *conn
2231
             FILE *stream);
T
Thomas G. Lockhart 已提交
2232
</synopsis>
2233 2234
</para>
</listitem>
2235
</varlistentry>
2236

2237 2238
<varlistentry>
<term><function>PQuntrace</function></term>
2239 2240
<listitem>
<para>
2241
          Disables tracing started by <function>PQtrace</function>.
T
Thomas G. Lockhart 已提交
2242
<synopsis>
2243
void PQuntrace(PGconn *conn);
T
Thomas G. Lockhart 已提交
2244
</synopsis>
2245 2246
</para>
</listitem>
2247 2248
</varlistentry>
</variablelist>
2249 2250 2251

</sect1>

2252
<sect1 id="libpq-control">
2253
<title>Notice Processing</title>
2254 2255

<para>
2256
The function <function>PQsetNoticeProcessor</function>
P
Peter Eisentraut 已提交
2257
<indexterm><primary>notice processor</></>
2258
controls the  reporting of notice and warning messages generated by the server.
T
Thomas G. Lockhart 已提交
2259
<synopsis>
2260 2261 2262 2263 2264 2265
typedef void (*PQnoticeProcessor) (void *arg, const char *message);

PQnoticeProcessor
PQsetNoticeProcessor(PGconn *conn,
                     PQnoticeProcessor proc,
                     void *arg);
T
Thomas G. Lockhart 已提交
2266
</synopsis>
2267
</para>
2268

2269
<para>
2270 2271 2272
By default, <application>libpq</application> prints notice messages
from the server, as well as a few error messages that it generates by
itself, on <filename>stderr</filename>.
2273
This behavior can be overridden by supplying a callback function that
2274 2275 2276
does something else with the messages, a so-called notice processor.
The callback function is passed
the text of the message (which includes a trailing newline), plus
2277 2278
a void pointer that is the same one passed to
<function>PQsetNoticeProcessor</function>.
2279 2280
(This pointer can be used to access application-specific state if needed.)
The default notice processor is simply
2281
<programlisting>
2282 2283 2284 2285 2286
static void
defaultNoticeProcessor(void * arg, const char * message)
{
    fprintf(stderr, "%s", message);
}
2287
</programlisting>
2288 2289
To use a special notice processor, call
<function>PQsetNoticeProcessor</function> just after
2290
creation of a new <structname>PGconn</> object.
2291
</para>
2292

2293
<para>
2294
The return value is the pointer to the previous notice processor.
2295
If you supply a null callback function pointer, no action is taken,
2296 2297 2298 2299 2300
but the current pointer is returned.
</para>

<para>
Once you have set a notice processor, you should expect that that function
2301 2302 2303
could be called as long as either the <structname>PGconn</> object or <structname>PGresult</> objects
made from it exist.  At creation of a <structname>PGresult</>, the <structname>PGconn</>'s current
notice processor pointer is copied into the <structname>PGresult</> for possible use by
2304
functions like <function>PQgetvalue</function>.
2305
</para>
2306

2307
</sect1>
2308

2309 2310
<sect1 id="libpq-envars">
<title>Environment Variables</title>
T
Tom Lane 已提交
2311

2312 2313 2314 2315
<indexterm zone="libpq-envars">
 <primary>environment variables</primary>
</indexterm>

2316
<para>
T
Tom Lane 已提交
2317
The following environment variables can be used to select default
2318 2319 2320 2321
connection parameter values, which will be used by
<function>PQconnectdb</>, <function>PQsetdbLogin</> and
<function>PQsetdb</> if no value is directly specified by the calling
code.  These are useful to avoid hard-coding database connection
2322
information into simple client applications, for example.
T
Tom Lane 已提交
2323

2324 2325 2326
<itemizedlist>
<listitem>
<para>
2327 2328 2329
<indexterm>
 <primary><envar>PGHOST</envar></primary>
</indexterm>
2330
<envar>PGHOST</envar> sets the database server name.
2331 2332
If this begins with a slash, it specifies Unix-domain communication
rather than TCP/IP communication; the value is the name of the
2333
directory in which the socket file is stored (default <filename>/tmp</filename>).
2334 2335 2336 2337
</para>
</listitem>
<listitem>
<para>
2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349
<indexterm>
 <primary><envar>PGHOSTADDR</envar></primary>
</indexterm>
<envar>PGHOSTADDR</envar> specifies the numeric IP address of the database
server.  This can be set instead of <envar>PGHOST</envar> to avoid DNS
lookup overhead. See the documentation of
these parameters, under <function>PQconnectdb</function> above, for details
on their interaction.
</para>
</listitem>
<listitem>
<para>
2350 2351 2352
<indexterm>
 <primary><envar>PGPORT</envar></primary>
</indexterm>
2353
<envar>PGPORT</envar> sets the TCP port number or Unix-domain
2354
socket file extension for communicating with the
2355
<productname>PostgreSQL</productname> server.
2356 2357 2358 2359
</para>
</listitem>
<listitem>
<para>
2360 2361 2362
<indexterm>
 <primary><envar>PGDATABASE</envar></primary>
</indexterm>
2363
<envar>PGDATABASE</envar>  sets the 
2364
<productname>PostgreSQL</productname> database name.
2365 2366 2367 2368
</para>
</listitem>
<listitem>
<para>
2369 2370 2371
<indexterm>
 <primary><envar>PGUSER</envar></primary>
</indexterm>
2372
<envar>PGUSER</envar>
2373
sets the user name used to connect to the database.
2374 2375 2376 2377
</para>
</listitem>
<listitem>
<para>
2378 2379 2380
<indexterm>
 <primary><envar>PGPASSWORD</envar></primary>
</indexterm>
2381
<envar>PGPASSWORD</envar>
2382 2383 2384 2385
sets the password used if the server demands password
authentication.  This environment variable is deprecated for security
reasons; consider migrating to use the <filename>$HOME/.pgpass</>
file (see <xref linkend="libpq-pgpass">).
2386 2387 2388 2389
</para>
</listitem>
<listitem>
<para>
2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402
<indexterm>
 <primary><envar>PGSERVICE</envar></primary>
</indexterm>
<envar>PGSERVICE</envar>
sets the service name to be looked up in <filename>pg_service.conf</filename>.
This offers a shorthand way of setting all the parameters.
</para>
</listitem>
<listitem>
<para>
<indexterm>
 <primary><envar>PGREALM</envar></primary>
</indexterm>
2403
<envar>PGREALM</envar> sets the Kerberos realm to  use  with  
2404
<productname>PostgreSQL</productname>, if  it is different from the local realm.
2405
If <envar>PGREALM</envar> is set, <application>libpq</application>
2406 2407 2408
applications  will  attempt authentication  with  servers for this realm and use
separate ticket files to avoid conflicts with  local
ticket  files.   This  environment  variable is only
2409
used if Kerberos authentication is selected by the server.
2410 2411 2412 2413
</para>
</listitem>
<listitem>
<para>
2414 2415 2416
<indexterm>
 <primary><envar>PGOPTIONS</envar></primary>
</indexterm>
2417
<envar>PGOPTIONS</envar> sets additional run-time  options  for  
2418
the <productname>PostgreSQL</productname> server.
2419 2420 2421 2422
</para>
</listitem>
<listitem>
<para>
2423 2424 2425
<indexterm>
 <primary><envar>PGREQUIRESSL</envar></primary>
</indexterm>
2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436
<envar>PGREQUIRESSL</envar> sets whether or not the connection must be
made over <acronym>SSL</acronym>. If set to
<quote>1</quote>, <application>libpq</>
will refuse to connect if the server does not accept
an <acronym>SSL</acronym> connection.
This option is only available if
<productname>PostgreSQL</> is compiled with SSL support.
</para>
</listitem>
<listitem>
<para>
2437 2438 2439
<indexterm>
 <primary><envar>PGCONNECT_TIMEOUT</envar></primary>
</indexterm>
2440 2441
<envar>PGCONNECT_TIMEOUT</envar> sets the maximum number of seconds
that <application>libpq</application> will wait when attempting to
2442 2443 2444
connect to the <productname>PostgreSQL</productname> server.  If unset
or set to zero, <application>libpq</application> will wait indefinitely.
It is not recommended to set the timeout to less than 2 seconds.
2445 2446
</para>
</listitem>
2447 2448
</itemizedlist>
</para>
T
Tom Lane 已提交
2449

2450
<para>
2451 2452
The following environment variables can be used to specify default
behavior for every <productname>PostgreSQL</productname> session.
T
Tom Lane 已提交
2453

2454 2455 2456
<itemizedlist>
<listitem>
<para>
2457 2458 2459
<indexterm>
 <primary><envar>PGDATESTYLE</envar></primary>
</indexterm>
2460
<envar>PGDATESTYLE</envar>
T
Tom Lane 已提交
2461
sets the default style of date/time representation.
2462
(Equivalent to <literal>SET datestyle TO ...</literal>.)
2463 2464 2465 2466
</para>
</listitem>
<listitem>
<para>
2467 2468 2469
<indexterm>
 <primary><envar>PGTZ</envar></primary>
</indexterm>
2470
<envar>PGTZ</envar>
T
Tom Lane 已提交
2471
sets the default time zone.
2472
(Equivalent to <literal>SET timezone TO ...</literal>.)
2473 2474
</para>
</listitem>
2475 2476
<listitem>
<para>
2477 2478 2479
<indexterm>
 <primary><envar>PGCLIENTENCODING</envar></primary>
</indexterm>
2480
<envar>PGCLIENTENCODING</envar>
2481 2482
sets the default client character set encoding.
(Equivalent to <literal>SET client_encoding TO ...</literal>.)
2483 2484
</para>
</listitem>
2485 2486
<listitem>
<para>
2487 2488 2489
<indexterm>
 <primary><envar>PGGEQO</envar></primary>
</indexterm>
2490
<envar>PGGEQO</envar>
2491 2492
sets the default mode for the genetic query optimizer.
(Equivalent to <literal>SET geqo TO ...</literal>.)
2493 2494 2495
</para>
</listitem>
</itemizedlist>
T
Tom Lane 已提交
2496

2497
Refer to the <acronym>SQL</acronym> command <command>SET</command>
T
Tom Lane 已提交
2498
for information on correct values for these environment variables.
2499
</para>
T
Tom Lane 已提交
2500

2501
</sect1>
T
Tom Lane 已提交
2502

2503

2504 2505
<sect1 id="libpq-pgpass">
<title>The Password File</title>
2506

2507 2508
<indexterm zone="libpq-pgpass">
 <primary>password file</primary>
2509
</indexterm>
2510 2511
<indexterm zone="libpq-pgpass">
 <primary>.pgpass</primary>
2512
</indexterm>
2513 2514 2515 2516 2517 2518

<para>
The file <filename>.pgpass</filename> in a user's home directory is a file
that can contain passwords to be used if the connection requires a
password (and no password has been specified otherwise).
This file should have lines of the following format:
2519
<synopsis>
2520
<replaceable>hostname</replaceable>:<replaceable>port</replaceable>:<replaceable>database</replaceable>:<replaceable>username</replaceable>:<replaceable>password</replaceable>
2521
</synopsis>
2522
Each of these fields may be a literal name or <literal>*</literal>, which
2523
matches anything.  The first matching entry will be used, so put more-specific
2524
entries first.  When an entry contain <literal>:</literal> or
2525
<literal>\</literal>, it must be escaped with <literal>\</literal>.
2526
</para>
2527
<para>
2528
The permissions on <filename>.pgpass</filename> must disallow any
2529
access to world or group; achieve this by the command
2530
<command>chmod 0600 ~/.pgpass</command>.
2531
If the permissions are less strict than this, the file will be ignored.
2532
</para>
2533 2534
</sect1>

2535 2536 2537
<sect1 id="libpq-threading">
<title>Threading Behavior</title>

2538 2539 2540 2541 2542
<indexterm zone="libpq-threading">
 <primary>threads</primary>
 <secondary>with libpq</secondary>
</indexterm>

2543
<para>
2544
<application>libpq</application> is thread-safe as of
2545
<productname>PostgreSQL</productname> 7.0, so long as no two threads
2546
attempt to manipulate the same <structname>PGconn</> object at the same
2547
time. In particular, you cannot issue concurrent commands from different
2548
threads through the same connection object. (If you need to run
2549
concurrent commands, start up multiple connections.)
2550
</para>
2551 2552

<para>
2553
<structname>PGresult</> objects are read-only after creation, and so can be passed around
2554 2555 2556 2557 2558 2559
freely between threads.
</para>

<para>
The deprecated functions <function>PQoidStatus</function> and
<function>fe_setauthsvc</function> are not thread-safe and should not be
2560
used in multithread programs.  <function>PQoidStatus</function> can be
2561 2562 2563 2564
replaced by <function>PQoidValue</function>.  There is no good reason to
call <function>fe_setauthsvc</function> at all.
</para>

2565
<para>
2566 2567 2568 2569
<application>libpq</application> applications that use the <literal>crypt</literal>
authentication method rely on the <literal>crypt()</literal> operating
system function, which is often not thread-safe. It is better to use the
<literal>md5</literal> method, which is thread-safe on all
2570 2571
platforms.
</para>
2572 2573
</sect1>

2574

2575
 <sect1 id="libpq-build">
2576
  <title>Building <application>libpq</application> Programs</title>
2577 2578

  <para>
2579
   To build (i.e., compile and link) your <application>libpq</application> programs you need to
P
Peter Eisentraut 已提交
2580
   do all of the following things:
2581 2582 2583 2584 2585 2586

   <itemizedlist>
    <listitem>
     <para>
      Include the <filename>libpq-fe.h</filename> header file:
<programlisting>
P
Peter Eisentraut 已提交
2587
#include &lt;libpq-fe.h&gt;
2588 2589
</programlisting>
      If you failed to do that then you will normally get error
P
Peter Eisentraut 已提交
2590
      messages from your compiler similar to
2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603
<screen>
foo.c: In function `main':
foo.c:34: `PGconn' undeclared (first use in this function)
foo.c:35: `PGresult' undeclared (first use in this function)
foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)
</screen>
     </para>
    </listitem>

    <listitem>
     <para>
2604
      Point your compiler to the directory where the <productname>PostgreSQL</> header
2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621
      files were installed, by supplying the
      <literal>-I<replaceable>directory</replaceable></literal> option
      to your compiler.  (In some cases the compiler will look into
      the directory in question by default, so you can omit this
      option.)  For instance, your compile command line could look
      like:
<programlisting>
cc -c -I/usr/local/pgsql/include testprog.c
</programlisting>
      If you are using makefiles then add the option to the
      <varname>CPPFLAGS</varname> variable:
<programlisting>
CPPFLAGS += -I/usr/local/pgsql/include
</programlisting>
     </para>

     <para>
P
Peter Eisentraut 已提交
2622
      <indexterm><primary>pg_config</></>
2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645
      If there is any chance that your program might be compiled by
      other users then you should not hardcode the directory location
      like that.  Instead, you can run the utility
      <command>pg_config</command> to find out where the header files
      are on the local system:
<screen>
<prompt>$</prompt> pg_config --includedir
<computeroutput>/usr/local/include</computeroutput>
</screen>
     </para>

     <para>
      Failure to specify the correct option to the compiler will
      result in an error message such as
<screen>
testlibpq.c:8:22: libpq-fe.h: No such file or directory
</screen>
     </para>
    </listitem>

    <listitem>
     <para>
      When linking the final program, specify the option
2646
      <literal>-lpq</literal> so that the <application>libpq</application> library gets pulled
2647 2648
      in, as well as the option
      <literal>-L<replaceable>directory</replaceable></literal> to
2649
      point the compiler to the directory where the <application>libpq</application> library resides.  (Again, the
2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679
      compiler will search some directories by default.)  For maximum
      portability, put the <option>-L</option> option before the
      <option>-lpq</option> option.  For example:
<programlisting>
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
</programlisting>
     </para>

     <para>
      You can find out the library directory using
      <command>pg_config</command> as well:
<screen>
<prompt>$</prompt> pg_config --libdir
<computeroutput>/usr/local/pgsql/lib</computeroutput>
</screen>
     </para>

     <para>
      Error messages that point to problems in this area could look
      like the following.
<screen>
testlibpq.o: In function `main':
testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
testlibpq.o(.text+0x71): undefined reference to `PQstatus'
testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'
</screen>
      This means you forgot <option>-lpq</option>.
<screen>
/usr/bin/ld: cannot find -lpq
</screen>
2680 2681
      This means you forgot the <option>-L</option> option or did not specify
      the right directory.
2682 2683 2684 2685 2686 2687
     </para>
    </listitem>
   </itemizedlist>
  </para>

  <para>
P
Peter Eisentraut 已提交
2688
   <indexterm><primary>libpq-int.h</></>
2689 2690
   If your codes references the header file
   <filename>libpq-int.h</filename> and you refuse to fix your code to
2691
   not use it, starting in <productname>PostgreSQL</> 7.2, this file will be found in
2692 2693 2694 2695 2696 2697 2698 2699
   <filename><replaceable>includedir</replaceable>/postgresql/internal/libpq-int.h</filename>,
   so you need to add the appropriate <option>-I</option> option to
   your compiler command line.
  </para>

 </sect1>


2700 2701 2702 2703
 <sect1 id="libpq-example">
  <title>Example Programs</title>

  <example id="libpq-example-1">
2704
   <title><application>libpq</application> Example Program 1</title>
2705

2706
<programlisting>
T
Thomas G. Lockhart 已提交
2707
/*
2708
 * testlibpq.c
2709
 *
2710
 * Test the C version of libpq, the <productname>PostgreSQL</> frontend
2711
 * library.
2712
 */
T
Thomas G. Lockhart 已提交
2713
#include &lt;stdio.h&gt;
2714
#include &lt;libpq-fe.h&gt;
T
Thomas G. Lockhart 已提交
2715 2716

void
2717
exit_nicely(PGconn *conn)
T
Thomas G. Lockhart 已提交
2718
{
2719 2720
    PQfinish(conn);
    exit(1);
T
Thomas G. Lockhart 已提交
2721 2722 2723 2724
}

main()
{
2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748
    char       *pghost,
               *pgport,
               *pgoptions,
               *pgtty;
    char       *dbName;
    int         nFields;
    int         i,
                j;

    /* FILE *debug; */

    PGconn     *conn;
    PGresult   *res;

    /*
     * begin, by setting the parameters for a backend connection if the
     * parameters are null, then the system will try to use reasonable
     * defaults by looking up environment variables or, failing that,
     * using hardwired constants
     */
    pghost = NULL;              /* host name of the backend server */
    pgport = NULL;              /* port of the backend server */
    pgoptions = NULL;           /* special options to start up the backend
                                 * server */
2749
    pgtty = NULL;               /* unused */
2750 2751 2752 2753 2754 2755 2756 2757 2758 2759
    dbName = "template1";

    /* make a connection to the database */
    conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);

    /*
     * check to see that the backend connection was successfully made
     */
    if (PQstatus(conn) == CONNECTION_BAD)
    {
2760 2761
        fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
        fprintf(stderr, "%s", PQerrorMessage(conn));
2762 2763 2764 2765 2766 2767 2768 2769
        exit_nicely(conn);
    }

    /* debug = fopen("/tmp/trace.out","w"); */
    /* PQtrace(conn, debug);  */

    /* start a transaction block */
    res = PQexec(conn, "BEGIN");
2770
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
2771 2772 2773 2774 2775 2776 2777 2778 2779 2780
    {
        fprintf(stderr, "BEGIN command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }

    /*
     * should PQclear PGresult whenever it is no longer needed to avoid
     * memory leaks
     */
T
Thomas G. Lockhart 已提交
2781 2782
    PQclear(res);

2783
    /*
2784
     * fetch rows from the pg_database, the system catalog of
2785 2786
     * databases
     */
2787
    res = PQexec(conn, "DECLARE mycursor CURSOR FOR SELECT * FROM pg_database");
2788
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
2789 2790 2791 2792 2793
    {
        fprintf(stderr, "DECLARE CURSOR command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }
T
Thomas G. Lockhart 已提交
2794
    PQclear(res);
2795
    res = PQexec(conn, "FETCH ALL in mycursor");
2796
    if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
2797 2798 2799 2800
    {
        fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
        PQclear(res);
        exit_nicely(conn);
T
Thomas G. Lockhart 已提交
2801 2802
    }

2803 2804 2805
    /* first, print out the attribute names */
    nFields = PQnfields(res);
    for (i = 0; i &lt; nFields; i++)
2806
        printf("%-15s", PQfname(res, i));
2807 2808
    printf("\n\n");

2809
    /* next, print out the rows */
2810 2811 2812
    for (i = 0; i &lt; PQntuples(res); i++)
    {
        for (j = 0; j &lt; nFields; j++)
2813
            printf("%-15s", PQgetvalue(res, i, j));
2814 2815 2816
        printf("\n");
    }
    PQclear(res);
T
Thomas G. Lockhart 已提交
2817

2818 2819 2820 2821 2822 2823 2824
    /* close the cursor */
    res = PQexec(conn, "CLOSE mycursor");
    PQclear(res);

    /* commit the transaction */
    res = PQexec(conn, "COMMIT");
    PQclear(res);
T
Thomas G. Lockhart 已提交
2825

2826 2827
    /* close the connection to the database and cleanup */
    PQfinish(conn);
T
Thomas G. Lockhart 已提交
2828

2829
    /* fclose(debug); */
B
Bruce Momjian 已提交
2830 2831
    return 0;

T
Thomas G. Lockhart 已提交
2832
}
2833
</programlisting>
2834
  </example>
2835

2836
  <example id="libpq-example-2">
2837
   <title><application>libpq</application> Example Program 2</title>
2838

2839
<programlisting>
T
Thomas G. Lockhart 已提交
2840
/*
T
Tom Lane 已提交
2841 2842
 * testlibpq2.c
 *  Test of the asynchronous notification interface
2843
 *
T
Tom Lane 已提交
2844 2845
 * Start this program, then from psql in another window do
 *   NOTIFY TBL2;
2846
 *
T
Tom Lane 已提交
2847 2848
 * Or, if you want to get fancy, try this:
 * Populate a database with the following:
2849
 *
T
Tom Lane 已提交
2850
 *   CREATE TABLE TBL1 (i int4);
2851
 *
T
Tom Lane 已提交
2852
 *   CREATE TABLE TBL2 (i int4);
2853
 *
T
Tom Lane 已提交
2854 2855
 *   CREATE RULE r1 AS ON INSERT TO TBL1 DO
 *     (INSERT INTO TBL2 values (new.i); NOTIFY TBL2);
2856
 *
T
Tom Lane 已提交
2857
 * and do
2858
 *
T
Tom Lane 已提交
2859
 *   INSERT INTO TBL1 values (10);
2860 2861
 *
 */
T
Thomas G. Lockhart 已提交
2862 2863 2864
#include &lt;stdio.h&gt;
#include "libpq-fe.h"

2865 2866
void
exit_nicely(PGconn *conn)
T
Thomas G. Lockhart 已提交
2867
{
2868 2869
    PQfinish(conn);
    exit(1);
T
Thomas G. Lockhart 已提交
2870 2871 2872 2873
}

main()
{
2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896
    char       *pghost,
               *pgport,
               *pgoptions,
               *pgtty;
    char       *dbName;
    int         nFields;
    int         i,
                j;

    PGconn     *conn;
    PGresult   *res;
    PGnotify   *notify;

    /*
     * begin, by setting the parameters for a backend connection if the
     * parameters are null, then the system will try to use reasonable
     * defaults by looking up environment variables or, failing that,
     * using hardwired constants
     */
    pghost = NULL;              /* host name of the backend server */
    pgport = NULL;              /* port of the backend server */
    pgoptions = NULL;           /* special options to start up the backend
                                 * server */
2897
    pgtty = NULL;               /* unused */
2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908
    dbName = getenv("USER");    /* change this to the name of your test
                                 * database */

    /* make a connection to the database */
    conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);

    /*
     * check to see that the backend connection was successfully made
     */
    if (PQstatus(conn) == CONNECTION_BAD)
    {
2909 2910
        fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
        fprintf(stderr, "%s", PQerrorMessage(conn));
2911 2912 2913 2914
        exit_nicely(conn);
    }

    res = PQexec(conn, "LISTEN TBL2");
2915
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
2916 2917 2918 2919 2920 2921 2922 2923 2924
    {
        fprintf(stderr, "LISTEN command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }

    /*
     * should PQclear PGresult whenever it is no longer needed to avoid
     * memory leaks
T
Thomas G. Lockhart 已提交
2925
     */
2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941
    PQclear(res);

    while (1)
    {

        /*
         * wait a little bit between checks; waiting with select()
         * would be more efficient.
         */
        sleep(1);
        /* collect any asynchronous backend messages */
        PQconsumeInput(conn);
        /* check for asynchronous notify messages */
        while ((notify = PQnotifies(conn)) != NULL)
        {
            fprintf(stderr,
2942
                 "ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
2943
                    notify-&gt;relname, notify-&gt;be_pid);
2944
            PQfreemem(notify);
2945
        }
T
Thomas G. Lockhart 已提交
2946 2947
    }

2948 2949
    /* close the connection to the database and cleanup */
    PQfinish(conn);
T
Thomas G. Lockhart 已提交
2950

B
Bruce Momjian 已提交
2951
    return 0;
T
Thomas G. Lockhart 已提交
2952
}
2953
</programlisting>
2954
  </example>
2955

2956
  <example id="libpq-example-3">
2957
   <title><application>libpq</application> Example Program 3</>
2958

2959
<programlisting>
T
Thomas G. Lockhart 已提交
2960
/*
2961
 * testlibpq3.c Test the C version of Libpq, the <productname>PostgreSQL</> frontend
2962
 * library. tests the binary cursor interface
T
Thomas G. Lockhart 已提交
2963 2964 2965
 *
 *
 *
2966 2967
 * populate a database by doing the following:
 *
2968
 * CREATE TABLE test1 (i int4, d real, p polygon);
2969
 *
2970
 * INSERT INTO test1 values (1, 3.567, polygon '(3.0, 4.0, 1.0, 2.0)');
2971
 *
2972
 * INSERT INTO test1 values (2, 89.05, polygon '(4.0, 3.0, 2.0, 1.0)');
2973 2974 2975 2976 2977 2978 2979 2980 2981
 *
 * the expected output is:
 *
 * tuple 0: got i = (4 bytes) 1, d = (4 bytes) 3.567000, p = (4
 * bytes) 2 points   boundbox = (hi=3.000000/4.000000, lo =
 * 1.000000,2.000000) tuple 1: got i = (4 bytes) 2, d = (4 bytes)
 * 89.050003, p = (4 bytes) 2 points   boundbox =
 * (hi=4.000000/3.000000, lo = 2.000000,1.000000)
 *
T
Thomas G. Lockhart 已提交
2982 2983 2984 2985
 *
 */
#include &lt;stdio.h&gt;
#include "libpq-fe.h"
2986
#include "utils/geo_decls.h"    /* for the POLYGON type */
T
Thomas G. Lockhart 已提交
2987

2988 2989
void
exit_nicely(PGconn *conn)
T
Thomas G. Lockhart 已提交
2990
{
2991 2992
    PQfinish(conn);
    exit(1);
T
Thomas G. Lockhart 已提交
2993 2994 2995 2996
}

main()
{
2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020
    char       *pghost,
               *pgport,
               *pgoptions,
               *pgtty;
    char       *dbName;
    int         nFields;
    int         i,
                j;
    int         i_fnum,
                d_fnum,
                p_fnum;
    PGconn     *conn;
    PGresult   *res;

    /*
     * begin, by setting the parameters for a backend connection if the
     * parameters are null, then the system will try to use reasonable
     * defaults by looking up environment variables or, failing that,
     * using hardwired constants
     */
    pghost = NULL;              /* host name of the backend server */
    pgport = NULL;              /* port of the backend server */
    pgoptions = NULL;           /* special options to start up the backend
                                 * server */
3021
    pgtty = NULL;               /* unused */
3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033

    dbName = getenv("USER");    /* change this to the name of your test
                                 * database */

    /* make a connection to the database */
    conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);

    /*
     * check to see that the backend connection was successfully made
     */
    if (PQstatus(conn) == CONNECTION_BAD)
    {
3034 3035
        fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
        fprintf(stderr, "%s", PQerrorMessage(conn));
3036 3037 3038 3039 3040
        exit_nicely(conn);
    }

    /* start a transaction block */
    res = PQexec(conn, "BEGIN");
3041
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054
    {
        fprintf(stderr, "BEGIN command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }

    /*
     * should PQclear PGresult whenever it is no longer needed to avoid
     * memory leaks
     */
    PQclear(res);

    /*
3055
     * fetch rows from the pg_database, the system catalog of
3056 3057
     * databases
     */
3058
    res = PQexec(conn, "DECLARE mycursor BINARY CURSOR FOR SELECT * FROM test1");
3059
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
3060 3061 3062 3063 3064 3065 3066 3067
    {
        fprintf(stderr, "DECLARE CURSOR command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }
    PQclear(res);

    res = PQexec(conn, "FETCH ALL in mycursor");
3068
    if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080
    {
        fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
        PQclear(res);
        exit_nicely(conn);
    }

    i_fnum = PQfnumber(res, "i");
    d_fnum = PQfnumber(res, "d");
    p_fnum = PQfnumber(res, "p");

    for (i = 0; i &lt; 3; i++)
    {
3081
        printf("type[%d] = %d, size[%d] = %d\n",
3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102
               i, PQftype(res, i),
               i, PQfsize(res, i));
    }
    for (i = 0; i &lt; PQntuples(res); i++)
    {
        int        *ival;
        float      *dval;
        int         plen;
        POLYGON    *pval;

        /* we hard-wire this to the 3 fields we know about */
        ival = (int *) PQgetvalue(res, i, i_fnum);
        dval = (float *) PQgetvalue(res, i, d_fnum);
        plen = PQgetlength(res, i, p_fnum);

        /*
         * plen doesn't include the length field so need to
         * increment by VARHDSZ
         */
        pval = (POLYGON *) malloc(plen + VARHDRSZ);
        pval-&gt;size = plen;
3103 3104 3105
        memmove((char *) &amp;pval-&gt;npts, PQgetvalue(res, i, p_fnum), plen);
        printf("tuple %d: got\n", i);
        printf(" i = (%d bytes) %d,\n",
3106
               PQgetlength(res, i, i_fnum), *ival);
3107
        printf(" d = (%d bytes) %f,\n",
3108
               PQgetlength(res, i, d_fnum), *dval);
3109
        printf(" p = (%d bytes) %d points \tboundbox = (hi=%f/%f, lo = %f,%f)\n",
3110 3111 3112 3113 3114 3115 3116
               PQgetlength(res, i, d_fnum),
               pval-&gt;npts,
               pval-&gt;boundbox.xh,
               pval-&gt;boundbox.yh,
               pval-&gt;boundbox.xl,
               pval-&gt;boundbox.yl);
    }
T
Thomas G. Lockhart 已提交
3117
    PQclear(res);
3118 3119 3120

    /* close the cursor */
    res = PQexec(conn, "CLOSE mycursor");
T
Thomas G. Lockhart 已提交
3121 3122
    PQclear(res);

3123 3124
    /* commit the transaction */
    res = PQexec(conn, "COMMIT");
T
Thomas G. Lockhart 已提交
3125
    PQclear(res);
3126 3127 3128

    /* close the connection to the database and cleanup */
    PQfinish(conn);
T
Thomas G. Lockhart 已提交
3129

B
Bruce Momjian 已提交
3130
    return 0;
T
Thomas G. Lockhart 已提交
3131
}
3132
</programlisting>
3133
  </example>
3134

3135
 </sect1>
3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149
</chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
3150
sgml-local-catalogs:("/usr/lib/sgml/catalog")
3151 3152 3153
sgml-local-ecat-files:nil
End:
-->