1 <!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.276 2009/02/06 18:18:54 momjian Exp $ -->
4 <title><application>libpq</application> - C Library</title>
6 <indexterm zone="libpq">
7 <primary>libpq</primary>
10 <indexterm zone="libpq">
15 <application>libpq</application> is the <acronym>C</acronym>
16 application programmer's interface to <productname>PostgreSQL</>.
17 <application>libpq</> is a set of library functions that allow
18 client programs to pass queries to the <productname>PostgreSQL</>
19 backend server and to receive the results of these queries.
23 <application>libpq</> is also the underlying engine for several
24 other <productname>PostgreSQL</> application interfaces, including
25 those written for C++, Perl, Python, Tcl and <application>ECPG</>.
26 So some aspects of <application>libpq</>'s behavior will be
27 important to you if you use one of those packages. In particular,
28 <xref linkend="libpq-envars">,
29 <xref linkend="libpq-pgpass"> and
30 <xref linkend="libpq-ssl">
31 describe behavior that is visible to the user of any application
32 that uses <application>libpq</>.
36 Some short programs are included at the end of this chapter (<xref linkend="libpq-example">) to show how
37 to write programs that use <application>libpq</application>. There are also several
38 complete examples of <application>libpq</application> applications in the
39 directory <filename>src/test/examples</filename> in the source code distribution.
43 Client programs that use <application>libpq</application> must
44 include the header file
45 <filename>libpq-fe.h</filename><indexterm><primary>libpq-fe.h</></>
46 and must link with the <application>libpq</application> library.
49 <sect1 id="libpq-connect">
50 <title>Database Connection Control Functions</title>
53 The following functions deal with making a connection to a
54 <productname>PostgreSQL</productname> backend server. An
55 application program can have several backend connections open at
56 one time. (One reason to do that is to access more than one
57 database.) Each connection is represented by a
58 <structname>PGconn</><indexterm><primary>PGconn</></> object, which
59 is obtained from the function <function>PQconnectdb</> or
60 <function>PQsetdbLogin</>. Note that these functions will always
61 return a non-null object pointer, unless perhaps there is too
62 little memory even to allocate the <structname>PGconn</> object.
63 The <function>PQstatus</> function should be called to check
64 whether a connection was successfully made before queries are sent
65 via the connection object.
69 On Windows, there is a way to improve performance if a single
70 database connection is repeated started and shutdown. Internally,
71 libpq calls WSAStartup() and WSACleanup() for connection startup
72 and shutdown, respectively. WSAStartup() increments an internal
73 Windows library reference count which is decremented by WSACleanup().
74 When the reference count is just one, calling WSACleanup() frees
75 all resources and all DLLs are unloaded. This is an expensive
76 operation. To avoid this, an application can manually call
77 WSAStartup() so resources will not be freed when the last database
84 <term><function>PQconnectdb</function><indexterm><primary>PQconnectdb</></></term>
87 Makes a new connection to the database server.
90 PGconn *PQconnectdb(const char *conninfo);
95 This function opens a new database connection using the parameters taken
96 from the string <literal>conninfo</literal>. Unlike <function>PQsetdbLogin</> below,
97 the parameter set can be extended without changing the function signature,
98 so use of this function (or its nonblocking analogues <function>PQconnectStart</>
99 and <function>PQconnectPoll</function>) is preferred for new application programming.
104 can be empty to use all default parameters, or it can contain one or more
105 parameter settings separated by whitespace.
106 Each parameter setting is in the form <literal>keyword = value</literal>.
107 Spaces around the equal sign are optional.
108 To write an empty value or a value containing
109 spaces, surround it with single quotes, e.g.,
110 <literal>keyword = 'a value'</literal>.
111 Single quotes and backslashes within the value must be escaped with a
112 backslash, i.e., <literal>\'</literal> and <literal>\\</literal>.
116 The currently recognized parameter key words are:
119 <varlistentry id="libpq-connect-host" xreflabel="host">
120 <term><literal>host</literal></term>
123 Name of host to connect to.<indexterm><primary>host name</></>
124 If this begins with a slash, it specifies Unix-domain
125 communication rather than TCP/IP communication; the value is the
126 name of the directory in which the socket file is stored. The
127 default behavior when <literal>host</literal> is not specified
128 is to connect to a Unix-domain
129 socket<indexterm><primary>Unix domain socket</></> in
130 <filename>/tmp</filename> (or whatever socket directory was specified
131 when <productname>PostgreSQL</> was built). On machines without
132 Unix-domain sockets, the default is to connect to <literal>localhost</>.
137 <varlistentry id="libpq-connect-hostaddr" xreflabel="hostaddr">
138 <term><literal>hostaddr</literal></term>
141 Numeric IP address of host to connect to. This should be in the
142 standard IPv4 address format, e.g., <literal>172.28.40.9</>. If
143 your machine supports IPv6, you can also use those addresses.
144 TCP/IP communication is
145 always used when a nonempty string is specified for this parameter.
149 Using <literal>hostaddr</> instead of <literal>host</> allows the
150 application to avoid a host name look-up, which might be important in
151 applications with time constraints. However, Kerberos and GSSAPI authentication
152 requires the host name. The following therefore applies: If
153 <literal>host</> is specified without <literal>hostaddr</>, a host name
154 lookup occurs. If <literal>hostaddr</> is specified without
155 <literal>host</>, the value for <literal>hostaddr</> gives the remote
156 address. When Kerberos is used, a reverse name query occurs to obtain
157 the host name for Kerberos. If both
158 <literal>host</> and <literal>hostaddr</> are specified, the value for
159 <literal>hostaddr</> gives the remote address; the value for
160 <literal>host</> is ignored, unless Kerberos is used, in which case that
161 value is used for Kerberos authentication. (Note that authentication is
162 likely to fail if <application>libpq</application> is passed a host name
163 that is not the name of the machine at <literal>hostaddr</>.) Also,
164 <literal>host</> rather than <literal>hostaddr</> is used to identify
165 the connection in <filename>~/.pgpass</> (see
166 <xref linkend="libpq-pgpass">).
170 Without either a host name or host address,
171 <application>libpq</application> will connect using a
172 local Unix-domain socket; or on machines without Unix-domain
173 sockets, it will attempt to connect to <literal>localhost</>.
178 <varlistentry id="libpq-connect-port" xreflabel="port">
179 <term><literal>port</literal></term>
182 Port number to connect to at the server host, or socket file
183 name extension for Unix-domain
184 connections.<indexterm><primary>port</></>
189 <varlistentry id="libpq-connect-dbname" xreflabel="dbname">
190 <term><literal>dbname</literal></term>
193 The database name. Defaults to be the same as the user name.
198 <varlistentry id="libpq-connect-user" xreflabel="user">
199 <term><literal>user</literal></term>
202 <productname>PostgreSQL</productname> user name to connect as.
203 Defaults to be the same as the operating system name of the user
204 running the application.
209 <varlistentry id="libpq-connect-password" xreflabel="password">
210 <term><literal>password</literal></term>
213 Password to be used if the server demands password authentication.
218 <varlistentry id="libpq-connect-connect-timeout" xreflabel="connect_timeout">
219 <term><literal>connect_timeout</literal></term>
222 Maximum wait for connection, in seconds (write as a decimal integer
223 string). Zero or not specified means wait indefinitely. It is not
224 recommended to use a timeout of less than 2 seconds.
229 <varlistentry id="libpq-connect-options" xreflabel="options">
230 <term><literal>options</literal></term>
233 Adds command-line options to send to the server at run-time.
234 For example, setting this to <literal>-c geqo=off</> sets the
235 session's value of the <varname>geqo</> parameter to
236 <literal>off</>. For a detailed discussion of the available
237 options, consult <xref linkend="runtime-config">.
242 <varlistentry id="libpq-connect-tty" xreflabel="tty">
243 <term><literal>tty</literal></term>
246 Ignored (formerly, this specified where to send server debug output).
251 <varlistentry id="libpq-connect-sslmode" xreflabel="sslmode">
252 <term><literal>sslmode</literal></term>
255 This option determines whether or with what priority a
256 <acronym>SSL</> TCP/IP connection will be negotiated with the
257 server. There are four modes: <literal>disable</> will attempt
258 only an unencrypted <acronym>SSL</> connection;
259 <literal>allow</> will negotiate, trying first a
260 non-<acronym>SSL</> connection, then if that fails, trying an
261 <acronym>SSL</> connection; <literal>prefer</> (the default)
262 will negotiate, trying first an <acronym>SSL</> connection,
263 then if that fails, trying a regular non-<acronym>SSL</>
264 connection; <literal>require</> will try only an
265 <acronym>SSL</> connection. <literal>sslmode</> is ignored
266 for Unix domain socket communication.
270 If <productname>PostgreSQL</> is compiled without SSL support,
271 using option <literal>require</> will cause an error, while
272 options <literal>allow</> and <literal>prefer</> will be
273 accepted but <application>libpq</> will not in fact attempt
275 connection.<indexterm><primary>SSL</><secondary
276 sortas="libpq">with libpq</></indexterm>
281 <varlistentry id="libpq-connect-sslverify" xreflabel="sslverify">
282 <term><literal>sslverify</literal></term>
285 This option controls how libpq verifies the certificate on the
286 server when performing an <acronym>SSL</> connection. There are
287 three options: <literal>none</> disables verification completely
288 (not recommended!); <literal>cert</> enables verification that
289 the certificate chains to a known CA only; <literal>cn</> will
290 both verify that the certificate chains to a known CA and that
291 the <literal>cn</> attribute of the certificate matches the
292 hostname the connection is being made to (default).
296 It is always recommended to use the <literal>cn</> value for
297 this parameter, since this is the only option that prevents
298 man-in-the-middle attacks. Note that this requires the server
299 name on the certificate to match exactly with the host name
300 used for the connection, and therefore does not support connections
301 to aliased names. It can be used with pure IP address connections
302 only if the certificate also has just the IP address in the
303 <literal>cn</> field.
307 If the <literal>cn</> attribute in the certificate sent by the
308 server starts with an asterisk (<literal>*</>), it will be treated
309 as a wildcard. This wildcard can only be present at the start of
310 the value, and will match all characters <emphasis>except</> a
311 dot (<literal>.</>). This means the certificate will not match
317 <varlistentry id="libpq-connect-requiressl" xreflabel="requiressl">
318 <term><literal>requiressl</literal></term>
321 This option is deprecated in favor of the <literal>sslmode</>
326 If set to 1, an <acronym>SSL</acronym> connection to the server
327 is required (this is equivalent to <literal>sslmode</>
328 <literal>require</>). <application>libpq</> will then refuse
329 to connect if the server does not accept an
330 <acronym>SSL</acronym> connection. If set to 0 (default),
331 <application>libpq</> will negotiate the connection type with
332 the server (equivalent to <literal>sslmode</>
333 <literal>prefer</>). This option is only available if
334 <productname>PostgreSQL</> is compiled with SSL support.
339 <varlistentry id="libpq-connect-sslcert" xreflabel="sslcert">
340 <term><literal>sslcert</literal></term>
343 This parameter specifies the file name of the client SSL
349 <varlistentry id="libpq-connect-sslkey" xreflabel="sslkey">
350 <term><literal>sslkey</literal></term>
353 This parameter specifies the location for the secret key
354 used for the client certificate. It can either specify a filename
355 that will be used instead of the default
356 <filename>~/.postgresql/postgresql.key</>, or can specify an external
357 engine (engines are <productname>OpenSSL</> loadable modules). The
358 external engine specification should consist of a colon-separated
359 engine name and an engine-specific key identifier.
364 <varlistentry id="libpq-connect-sslrootcert" xreflabel="sslrootcert">
365 <term><literal>sslrootcert</literal></term>
368 This parameter specifies the file name of the root SSL certificate.
373 <varlistentry id="libpq-connect-sslcrl" xreflabel="sslcrl">
374 <term><literal>sslcrl</literal></term>
377 This parameter specifies the file name of the SSL certificate
378 revocation list (CRL).
383 <varlistentry id="libpq-connect-krbsrvname" xreflabel="krbsrvname">
384 <term><literal>krbsrvname</literal></term>
387 Kerberos service name to use when authenticating with Kerberos 5
389 This must match the service name specified in the server
390 configuration for Kerberos authentication to succeed. (See also
391 <xref linkend="kerberos-auth"> and <xref linkend="gssapi-auth">.)
396 <varlistentry id="libpq-connect-gsslib" xreflabel="gsslib">
397 <term><literal>gsslib</literal></term>
400 GSS library to use for GSSAPI authentication. Only used on Windows.
401 Set to <literal>gssapi</literal> to force libpq to use the GSSAPI
402 library for authentication instead of the default SSPI.
407 <varlistentry id="libpq-connect-service" xreflabel="service">
408 <term><literal>service</literal></term>
411 Service name to use for additional parameters. It specifies a service
412 name in <filename>pg_service.conf</filename> that holds additional connection parameters.
413 This allows applications to specify only a service name so connection parameters
414 can be centrally maintained. See <xref linkend="libpq-pgservice">.
420 If any parameter is unspecified, then the corresponding
421 environment variable (see <xref linkend="libpq-envars">)
422 is checked. If the environment variable is not set either,
423 then the indicated built-in defaults are used.
429 <term><function>PQsetdbLogin</function><indexterm><primary>PQsetdbLogin</></></term>
432 Makes a new connection to the database server.
434 PGconn *PQsetdbLogin(const char *pghost,
436 const char *pgoptions,
445 This is the predecessor of <function>PQconnectdb</function> with a fixed
446 set of parameters. It has the same functionality except that the
447 missing parameters will always take on default values. Write <symbol>NULL</symbol> or an
448 empty string for any one of the fixed parameters that is to be defaulted.
452 If the <parameter>dbName</parameter> contains an <symbol>=</symbol> sign, it
453 is taken as a <parameter>conninfo</parameter> string in exactly the same way as
454 if it had been passed to <function>PQconnectdb</function>, and the remaining
455 parameters are then applied as above.
461 <term><function>PQsetdb</function><indexterm><primary>PQsetdb</></></term>
464 Makes a new connection to the database server.
466 PGconn *PQsetdb(char *pghost,
475 This is a macro that calls <function>PQsetdbLogin</function> with null pointers
476 for the <parameter>login</> and <parameter>pwd</> parameters. It is provided
477 for backward compatibility with very old programs.
483 <term><function>PQconnectStart</function><indexterm><primary>PQconnectStart</></></term>
484 <term><function>PQconnectPoll</function><indexterm><primary>PQconnectPoll</></></term>
487 <indexterm><primary>nonblocking connection</primary></indexterm>
488 Make a connection to the database server in a nonblocking manner.
491 PGconn *PQconnectStart(const char *conninfo);
495 PostgresPollingStatusType PQconnectPoll(PGconn *conn);
500 These two functions are used to open a connection to a database server such
501 that your application's thread of execution is not blocked on remote I/O
503 The point of this approach is that the waits for I/O to complete can occur
504 in the application's main loop, rather than down inside
505 <function>PQconnectdb</>, and so the application can manage this
506 operation in parallel with other activities.
510 The database connection is made using the parameters taken from the string
511 <literal>conninfo</literal>, passed to <function>PQconnectStart</function>. This string is in
512 the same format as described above for <function>PQconnectdb</function>.
515 Neither <function>PQconnectStart</function> nor <function>PQconnectPoll</function> will block, so long as a number of
516 restrictions are met:
520 The <literal>hostaddr</> and <literal>host</> parameters are used appropriately to ensure that
521 name and reverse name queries are not made. See the documentation of
522 these parameters under <function>PQconnectdb</function> above for details.
528 If you call <function>PQtrace</function>, ensure that the stream object
529 into which you trace will not block.
535 You ensure that the socket is in the appropriate state
536 before calling <function>PQconnectPoll</function>, as described below.
543 To begin a nonblocking connection request, call <literal>conn = PQconnectStart("<replaceable>connection_info_string</>")</literal>.
544 If <varname>conn</varname> is null, then <application>libpq</> has been unable to allocate a new <structname>PGconn</>
545 structure. Otherwise, a valid <structname>PGconn</> pointer is returned (though not yet
546 representing a valid connection to the database). On return from
547 <function>PQconnectStart</function>, call <literal>status = PQstatus(conn)</literal>. If <varname>status</varname> equals
548 <symbol>CONNECTION_BAD</symbol>, <function>PQconnectStart</function> has failed.
552 If <function>PQconnectStart</> succeeds, the next stage is to poll
553 <application>libpq</> so that it can proceed with the connection sequence.
554 Use <function>PQsocket(conn)</function> to obtain the descriptor of the
555 socket underlying the database connection.
556 Loop thus: If <function>PQconnectPoll(conn)</function> last returned
557 <symbol>PGRES_POLLING_READING</symbol>, wait until the socket is ready to
558 read (as indicated by <function>select()</>, <function>poll()</>, or
559 similar system function).
560 Then call <function>PQconnectPoll(conn)</function> again.
561 Conversely, if <function>PQconnectPoll(conn)</function> last returned
562 <symbol>PGRES_POLLING_WRITING</symbol>, wait until the socket is ready
563 to write, then call <function>PQconnectPoll(conn)</function> again.
564 If you have yet to call
565 <function>PQconnectPoll</function>, i.e., just after the call to
566 <function>PQconnectStart</function>, behave as if it last returned
567 <symbol>PGRES_POLLING_WRITING</symbol>. Continue this loop until
568 <function>PQconnectPoll(conn)</function> returns
569 <symbol>PGRES_POLLING_FAILED</symbol>, indicating the connection procedure
570 has failed, or <symbol>PGRES_POLLING_OK</symbol>, indicating the connection
571 has been successfully made.
575 At any time during connection, the status of the connection can be
576 checked by calling <function>PQstatus</>. If this gives <symbol>CONNECTION_BAD</>, then the
577 connection procedure has failed; if it gives <function>CONNECTION_OK</>, then the
578 connection is ready. Both of these states are equally detectable
579 from the return value of <function>PQconnectPoll</>, described above. Other states might also occur
580 during (and only during) an asynchronous connection procedure. These
581 indicate the current stage of the connection procedure and might be useful
582 to provide feedback to the user for example. These statuses are:
586 <term><symbol>CONNECTION_STARTED</symbol></term>
589 Waiting for connection to be made.
595 <term><symbol>CONNECTION_MADE</symbol></term>
598 Connection OK; waiting to send.
604 <term><symbol>CONNECTION_AWAITING_RESPONSE</symbol></term>
607 Waiting for a response from the server.
613 <term><symbol>CONNECTION_AUTH_OK</symbol></term>
616 Received authentication; waiting for backend start-up to finish.
622 <term><symbol>CONNECTION_SSL_STARTUP</symbol></term>
625 Negotiating SSL encryption.
631 <term><symbol>CONNECTION_SETENV</symbol></term>
634 Negotiating environment-driven parameter settings.
640 Note that, although these constants will remain (in order to maintain
641 compatibility), an application should never rely upon these occurring in a
642 particular order, or at all, or on the status always being one of these
643 documented values. An application might do something like this:
645 switch(PQstatus(conn))
647 case CONNECTION_STARTED:
648 feedback = "Connecting...";
651 case CONNECTION_MADE:
652 feedback = "Connected to server...";
658 feedback = "Connecting...";
664 The <literal>connect_timeout</literal> connection parameter is ignored
665 when using <function>PQconnectPoll</function>; it is the application's
666 responsibility to decide whether an excessive amount of time has elapsed.
667 Otherwise, <function>PQconnectStart</function> followed by a
668 <function>PQconnectPoll</function> loop is equivalent to
669 <function>PQconnectdb</function>.
673 Note that if <function>PQconnectStart</function> returns a non-null pointer, you must call
674 <function>PQfinish</function> when you are finished with it, in order to dispose of
675 the structure and any associated memory blocks. This must be done even if
676 the connection attempt fails or is abandoned.
682 <term><function>PQconndefaults</function><indexterm><primary>PQconndefaults</></></term>
685 Returns the default connection options.
687 PQconninfoOption *PQconndefaults(void);
691 char *keyword; /* The keyword of the option */
692 char *envvar; /* Fallback environment variable name */
693 char *compiled; /* Fallback compiled in default value */
694 char *val; /* Option's current value, or NULL */
695 char *label; /* Label for field in connect dialog */
696 char *dispchar; /* Indicates how to display this field
697 in a connect dialog. Values are:
698 "" Display entered value as is
699 "*" Password field - hide value
700 "D" Debug option - don't show by default */
701 int dispsize; /* Field size in characters for dialog */
707 Returns a connection options array. This can be used to determine
708 all possible <function>PQconnectdb</function> options and their
709 current default values. The return value points to an array of
710 <structname>PQconninfoOption</structname> structures, which ends
711 with an entry having a null <structfield>keyword</> pointer. The
712 null pointer is returned if memory could not be allocated. Note that
713 the current default values (<structfield>val</structfield> fields)
714 will depend on environment variables and other context. Callers
715 must treat the connection options data as read-only.
719 After processing the options array, free it by passing it to
720 <function>PQconninfoFree</function>. If this is not done, a small amount of memory
721 is leaked for each call to <function>PQconndefaults</function>.
728 <term><function>PQconninfoParse</function><indexterm><primary>PQconninfoParse</></></term>
731 Returns parsed connection options from the provided connection string.
734 PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);
739 Parses a connection string and returns the resulting options as an
740 array; or returns NULL if there is a problem with the connection
741 string. This can be used to determine
742 the <function>PQconnectdb</function> options in the provided
743 connection string. The return value points to an array of
744 <structname>PQconninfoOption</structname> structures, which ends
745 with an entry having a null <structfield>keyword</> pointer.
749 Note that only options explicitly specified in the string will have
750 values set in the result array; no defaults are inserted.
754 If <literal>errmsg</> is not NULL, then <literal>*errmsg</> is set
755 to NULL on success, else to a malloc'd error string explaining
756 the problem. (It is also possible for <literal>*errmsg</> to be
757 set to NULL even when NULL is returned; this indicates an out-of-memory
762 After processing the options array, free it by passing it to
763 <function>PQconninfoFree</function>. If this is not done, some memory
764 is leaked for each call to <function>PQconninfoParse</function>.
765 Conversely, if an error occurs and <literal>errmsg</> is not NULL,
766 be sure to free the error string using <function>PQfreemem</>.
773 <term><function>PQfinish</function><indexterm><primary>PQfinish</></></term>
776 Closes the connection to the server. Also frees
777 memory used by the <structname>PGconn</structname> object.
779 void PQfinish(PGconn *conn);
784 Note that even if the server connection attempt fails (as
785 indicated by <function>PQstatus</function>), the application should call <function>PQfinish</function>
786 to free the memory used by the <structname>PGconn</structname> object.
787 The <structname>PGconn</> pointer must not be used again after
788 <function>PQfinish</function> has been called.
794 <term><function>PQreset</function><indexterm><primary>PQreset</></></term>
797 Resets the communication channel to the server.
799 void PQreset(PGconn *conn);
804 This function will close the connection
805 to the server and attempt to reestablish a new
806 connection to the same server, using all the same
807 parameters previously used. This might be useful for
808 error recovery if a working connection is lost.
814 <term><function>PQresetStart</function><indexterm><primary>PQresetStart</></></term>
815 <term><function>PQresetPoll</function><indexterm><primary>PQresetPoll</></></term>
818 Reset the communication channel to the server, in a nonblocking manner.
821 int PQresetStart(PGconn *conn);
824 PostgresPollingStatusType PQresetPoll(PGconn *conn);
829 These functions will close the connection to the server and attempt to
830 reestablish a new connection to the same server, using all the same
831 parameters previously used. This can be useful for error recovery if a
832 working connection is lost. They differ from <function>PQreset</function> (above) in that they
833 act in a nonblocking manner. These functions suffer from the same
834 restrictions as <function>PQconnectStart</> and <function>PQconnectPoll</>.
838 To initiate a connection reset, call
839 <function>PQresetStart</function>. If it returns 0, the reset has
840 failed. If it returns 1, poll the reset using
841 <function>PQresetPoll</function> in exactly the same way as you
842 would create the connection using <function>PQconnectPoll</function>.
851 <sect1 id="libpq-status">
852 <title>Connection Status Functions</title>
855 These functions can be used to interrogate the status
856 of an existing database connection object.
861 <indexterm><primary>libpq-fe.h</></>
862 <indexterm><primary>libpq-int.h</></>
863 <application>libpq</application> application programmers should be careful to
864 maintain the <structname>PGconn</structname> abstraction. Use the accessor
865 functions described below to get at the contents of <structname>PGconn</structname>.
866 Reference to internal <structname>PGconn</structname> fields using
867 <filename>libpq-int.h</> is not recommended because they are subject to change
873 The following functions return parameter values established at connection.
874 These values are fixed for the life of the <structname>PGconn</> object.
879 <function>PQdb</function>
881 <primary>PQdb</primary>
887 Returns the database name of the connection.
889 char *PQdb(const PGconn *conn);
897 <function>PQuser</function>
899 <primary>PQuser</primary>
905 Returns the user name of the connection.
907 char *PQuser(const PGconn *conn);
915 <function>PQpass</function>
917 <primary>PQpass</primary>
923 Returns the password of the connection.
925 char *PQpass(const PGconn *conn);
933 <function>PQhost</function>
935 <primary>PQhost</primary>
941 Returns the server host name of the connection.
943 char *PQhost(const PGconn *conn);
951 <function>PQport</function>
953 <primary>PQport</primary>
959 Returns the port of the connection.
962 char *PQport(const PGconn *conn);
970 <function>PQtty</function>
972 <primary>PQtty</primary>
978 Returns the debug <acronym>TTY</acronym> of the connection.
979 (This is obsolete, since the server no longer pays attention
980 to the <acronym>TTY</acronym> setting, but the function remains
981 for backwards compatibility.)
984 char *PQtty(const PGconn *conn);
992 <function>PQoptions</function>
994 <primary>PQoptions</primary>
1000 Returns the command-line options passed in the connection request.
1002 char *PQoptions(const PGconn *conn);
1011 The following functions return status data that can change as operations
1012 are executed on the <structname>PGconn</> object.
1017 <function>PQstatus</function>
1019 <primary>PQstatus</primary>
1025 Returns the status of the connection.
1027 ConnStatusType PQstatus(const PGconn *conn);
1032 The status can be one of a number of values. However, only two of
1033 these are seen outside of an asynchronous connection procedure:
1034 <literal>CONNECTION_OK</literal> and
1035 <literal>CONNECTION_BAD</literal>. A good connection to the database
1036 has the status <literal>CONNECTION_OK</literal>. A failed
1037 connection attempt is signaled by status
1038 <literal>CONNECTION_BAD</literal>. Ordinarily, an OK status will
1039 remain so until <function>PQfinish</function>, but a communications
1040 failure might result in the status changing to
1041 <literal>CONNECTION_BAD</literal> prematurely. In that case the
1042 application could try to recover by calling
1043 <function>PQreset</function>.
1047 See the entry for <function>PQconnectStart</> and <function>PQconnectPoll</> with regards
1048 to other status codes
1056 <function>PQtransactionStatus</function>
1058 <primary>PQtransactionStatus</primary>
1064 Returns the current in-transaction status of the server.
1067 PGTransactionStatusType PQtransactionStatus(const PGconn *conn);
1070 The status can be <literal>PQTRANS_IDLE</literal> (currently idle),
1071 <literal>PQTRANS_ACTIVE</literal> (a command is in progress),
1072 <literal>PQTRANS_INTRANS</literal> (idle, in a valid transaction block),
1073 or <literal>PQTRANS_INERROR</literal> (idle, in a failed transaction block).
1074 <literal>PQTRANS_UNKNOWN</literal> is reported if the connection is bad.
1075 <literal>PQTRANS_ACTIVE</literal> is reported only when a query
1076 has been sent to the server and not yet completed.
1081 <function>PQtransactionStatus</> will give incorrect results when using
1082 a <productname>PostgreSQL</> 7.3 server that has the parameter <literal>autocommit</>
1083 set to off. The server-side autocommit feature has been
1084 deprecated and does not exist in later server versions.
1092 <function>PQparameterStatus</function>
1094 <primary>PQparameterStatus</primary>
1100 Looks up a current parameter setting of the server.
1103 const char *PQparameterStatus(const PGconn *conn, const char *paramName);
1106 Certain parameter values are reported by the server automatically at
1107 connection startup or whenever their values change.
1108 <function>PQparameterStatus</> can be used to interrogate these settings.
1109 It returns the current value of a parameter if known, or <symbol>NULL</symbol>
1110 if the parameter is not known.
1114 Parameters reported as of the current release include
1115 <literal>server_version</>,
1116 <literal>server_encoding</>,
1117 <literal>client_encoding</>,
1118 <literal>is_superuser</>,
1119 <literal>session_authorization</>,
1120 <literal>DateStyle</>,
1121 <literal>IntervalStyle</>,
1122 <literal>TimeZone</>,
1123 <literal>integer_datetimes</>, and
1124 <literal>standard_conforming_strings</>.
1125 (<literal>server_encoding</>, <literal>TimeZone</>, and
1126 <literal>integer_datetimes</> were not reported by releases before 8.0;
1127 <literal>standard_conforming_strings</> was not reported by releases
1128 before 8.1; <literal>IntervalStyle</> was not reported by releases
1131 <literal>server_version</>,
1132 <literal>server_encoding</> and
1133 <literal>integer_datetimes</>
1134 cannot change after startup.
1138 Pre-3.0-protocol servers do not report parameter settings, but
1139 <application>libpq</> includes logic to obtain values for
1140 <literal>server_version</> and <literal>client_encoding</> anyway.
1141 Applications are encouraged to use <function>PQparameterStatus</>
1142 rather than <foreignphrase>ad hoc</> code to determine these values.
1143 (Beware however that on a pre-3.0 connection, changing
1144 <literal>client_encoding</> via <command>SET</> after connection
1145 startup will not be reflected by <function>PQparameterStatus</>.)
1146 For <literal>server_version</>, see also
1147 <function>PQserverVersion</>, which returns the information in a
1148 numeric form that is much easier to compare against.
1152 If no value for <literal>standard_conforming_strings</> is reported,
1153 applications can assume it is <literal>off</>, that is, backslashes
1154 are treated as escapes in string literals. Also, the presence of
1155 this parameter can be taken as an indication that the escape string
1156 syntax (<literal>E'...'</>) is accepted.
1160 Although the returned pointer is declared <literal>const</>, it in fact
1161 points to mutable storage associated with the <literal>PGconn</> structure.
1162 It is unwise to assume the pointer will remain valid across queries.
1169 <function>PQprotocolVersion</function>
1171 <primary>PQprotocolVersion</primary>
1177 Interrogates the frontend/backend protocol being used.
1179 int PQprotocolVersion(const PGconn *conn);
1181 Applications might wish to use this to determine whether certain
1182 features are supported. Currently, the possible values are 2 (2.0
1183 protocol), 3 (3.0 protocol), or zero (connection bad). This will
1184 not change after connection startup is complete, but it could
1185 theoretically change during a connection reset. The 3.0 protocol
1186 will normally be used when communicating with
1187 <productname>PostgreSQL</> 7.4 or later servers; pre-7.4 servers
1188 support only protocol 2.0. (Protocol 1.0 is obsolete and not
1189 supported by <application>libpq</application>.)
1196 <function>PQserverVersion</function>
1198 <primary>PQserverVersion</primary>
1204 Returns an integer representing the backend version.
1206 int PQserverVersion(const PGconn *conn);
1208 Applications might use this to determine the version of the database
1209 server they are connected to. The number is formed by converting
1210 the major, minor, and revision numbers into two-decimal-digit
1211 numbers and appending them together. For example, version 8.1.5
1212 will be returned as 80105, and version 8.2 will be returned as
1213 80200 (leading zeroes are not shown). Zero is returned if the
1221 <function>PQerrorMessage</function>
1223 <primary>PQerrorMessage</primary>
1229 <indexterm><primary>error message</></> Returns the error message
1230 most recently generated by an operation on the connection.
1233 char *PQerrorMessage(const PGconn *conn);
1239 Nearly all <application>libpq</> functions will set a message for
1240 <function>PQerrorMessage</function> if they fail. Note that by
1241 <application>libpq</application> convention, a nonempty
1242 <function>PQerrorMessage</function> result can be multiple lines,
1243 and will include a trailing newline. The caller should not free
1244 the result directly. It will be freed when the associated
1245 <structname>PGconn</> handle is passed to
1246 <function>PQfinish</function>. The result string should not be
1247 expected to remain the same across operations on the
1248 <literal>PGconn</> structure.
1254 <term><function>PQsocket</function><indexterm><primary>PQsocket</></></term>
1257 Obtains the file descriptor number of the connection socket to
1258 the server. A valid descriptor will be greater than or equal
1259 to 0; a result of -1 indicates that no server connection is
1260 currently open. (This will not change during normal operation,
1261 but could change during connection setup or reset.)
1264 int PQsocket(const PGconn *conn);
1272 <term><function>PQbackendPID</function><indexterm><primary>PQbackendPID</></></term>
1275 Returns the process <acronym>ID</acronym>
1276 (PID)<indexterm><primary>PID</><secondary>determining PID of
1277 server process</><tertiary>in libpq</></> of the backend server
1278 process handling this connection.
1281 int PQbackendPID(const PGconn *conn);
1286 The backend <acronym>PID</acronym> is useful for debugging
1287 purposes and for comparison to <command>NOTIFY</command>
1288 messages (which include the <acronym>PID</acronym> of the
1289 notifying backend process). Note that the
1290 <acronym>PID</acronym> belongs to a process executing on the
1291 database server host, not the local host!
1297 <term><function>PQconnectionNeedsPassword</function><indexterm><primary>PQconnectionNeedsPassword</></></term>
1300 Returns true (1) if the connection authentication method
1301 required a password, but none was available.
1302 Returns false (0) if not.
1305 int PQconnectionNeedsPassword(const PGconn *conn);
1310 This function can be applied after a failed connection attempt
1311 to decide whether to prompt the user for a password.
1317 <term><function>PQconnectionUsedPassword</function><indexterm><primary>PQconnectionUsedPassword</></></term>
1320 Returns true (1) if the connection authentication method
1321 used a password. Returns false (0) if not.
1324 int PQconnectionUsedPassword(const PGconn *conn);
1329 This function can be applied after either a failed or successful
1330 connection attempt to detect whether the server demanded a password.
1336 <term><function>PQgetssl</function><indexterm><primary>PQgetssl</></></term>
1339 <indexterm><primary>SSL</><secondary sortas="libpq">in libpq</secondary></indexterm>
1340 Returns the SSL structure used in the connection, or null
1341 if SSL is not in use.
1344 SSL *PQgetssl(const PGconn *conn);
1349 This structure can be used to verify encryption levels, check server
1350 certificates, and more. Refer to the <productname>OpenSSL</>
1351 documentation for information about this structure.
1355 You must define <symbol>USE_SSL</symbol> in order to get the
1356 correct prototype for this function. Doing this will also
1357 automatically include <filename>ssl.h</filename> from <productname>OpenSSL</productname>.
1367 <sect1 id="libpq-exec">
1368 <title>Command Execution Functions</title>
1371 Once a connection to a database server has been successfully
1372 established, the functions described here are used to perform
1373 SQL queries and commands.
1376 <sect2 id="libpq-exec-main">
1377 <title>Main Functions</title>
1383 <function>PQexec</function>
1385 <primary>PQexec</primary>
1391 Submits a command to the server and waits for the result.
1394 PGresult *PQexec(PGconn *conn, const char *command);
1399 Returns a <structname>PGresult</structname> pointer or possibly a null
1400 pointer. A non-null pointer will generally be returned except in
1401 out-of-memory conditions or serious errors such as inability to send
1402 the command to the server. If a null pointer is returned, it should
1403 be treated like a <symbol>PGRES_FATAL_ERROR</symbol> result. Use
1404 <function>PQerrorMessage</function> to get more information about such
1411 It is allowed to include multiple SQL commands (separated by semicolons)
1412 in the command string. Multiple queries sent in a single
1413 <function>PQexec</> call are processed in a single transaction, unless
1414 there are explicit <command>BEGIN</command>/<command>COMMIT</command>
1415 commands included in the query string to divide it into multiple
1416 transactions. Note however that the returned
1417 <structname>PGresult</structname> structure describes only the result
1418 of the last command executed from the string. Should one of the
1419 commands fail, processing of the string stops with it and the returned
1420 <structname>PGresult</structname> describes the error condition.
1427 <function>PQexecParams</function>
1429 <primary>PQexecParams</primary>
1435 Submits a command to the server and waits for the result,
1436 with the ability to pass parameters separately from the SQL
1440 PGresult *PQexecParams(PGconn *conn,
1441 const char *command,
1443 const Oid *paramTypes,
1444 const char * const *paramValues,
1445 const int *paramLengths,
1446 const int *paramFormats,
1452 <function>PQexecParams</> is like <function>PQexec</>, but offers additional
1453 functionality: parameter values can be specified separately from the command
1454 string proper, and query results can be requested in either text or binary
1455 format. <function>PQexecParams</> is supported only in protocol 3.0 and later
1456 connections; it will fail when using protocol 2.0.
1460 The function arguments are:
1464 <term><parameter>conn</parameter></term>
1468 The connection object to send the command through.
1474 <term><parameter>command</parameter></term>
1477 The SQL command string to be executed. If parameters are used,
1478 they are referred to in the command string as <literal>$1</>,
1479 <literal>$2</>, etc.
1485 <term><parameter>nParams</parameter></term>
1488 The number of parameters supplied; it is the length of the arrays
1489 <parameter>paramTypes[]</>, <parameter>paramValues[]</>,
1490 <parameter>paramLengths[]</>, and <parameter>paramFormats[]</>. (The
1491 array pointers can be <symbol>NULL</symbol> when <parameter>nParams</>
1498 <term><parameter>paramTypes[]</parameter></term>
1501 Specifies, by OID, the data types to be assigned to the
1502 parameter symbols. If <parameter>paramTypes</> is
1503 <symbol>NULL</symbol>, or any particular element in the array
1504 is zero, the server infers a data type for the parameter symbol
1505 in the same way it would do for an untyped literal string.
1511 <term><parameter>paramValues[]</parameter></term>
1514 Specifies the actual values of the parameters. A null pointer
1515 in this array means the corresponding parameter is null;
1516 otherwise the pointer points to a zero-terminated text string
1517 (for text format) or binary data in the format expected by the
1518 server (for binary format).
1524 <term><parameter>paramLengths[]</parameter></term>
1527 Specifies the actual data lengths of binary-format parameters.
1528 It is ignored for null parameters and text-format parameters.
1529 The array pointer can be null when there are no binary parameters.
1535 <term><parameter>paramFormats[]</parameter></term>
1538 Specifies whether parameters are text (put a zero in the
1539 array entry for the corresponding parameter) or binary (put
1540 a one in the array entry for the corresponding parameter).
1541 If the array pointer is null then all parameters are presumed
1545 Values passed in binary format require knowlege of
1546 the internal representation expected by the backend.
1547 For example, integers must be passed in network byte
1548 order. Passing <type>numeric</> values requires
1549 knowledge of the server storage format, as implemented
1551 <filename>src/backend/utils/adt/numeric.c::numeric_send()</> and
1552 <filename>src/backend/utils/adt/numeric.c::numeric_recv()</>.
1558 <term><parameter>resultFormat</parameter></term>
1561 Specify zero to obtain results in text format, or one to obtain
1562 results in binary format. (There is not currently a provision
1563 to obtain different result columns in different formats,
1564 although that is possible in the underlying protocol.)
1576 The primary advantage of <function>PQexecParams</> over
1577 <function>PQexec</> is that parameter values can be separated from the
1578 command string, thus avoiding the need for tedious and error-prone
1579 quoting and escaping.
1583 Unlike <function>PQexec</>, <function>PQexecParams</> allows at most
1584 one SQL command in the given string. (There can be semicolons in it,
1585 but not more than one nonempty command.) This is a limitation of the
1586 underlying protocol, but has some usefulness as an extra defense against
1587 SQL-injection attacks.
1592 Specifying parameter types via OIDs is tedious, particularly if you prefer
1593 not to hard-wire particular OID values into your program. However, you can
1594 avoid doing so even in cases where the server by itself cannot determine the
1595 type of the parameter, or chooses a different type than you want. In the
1596 SQL command text, attach an explicit cast to the parameter symbol to show what
1597 data type you will send. For example:
1599 SELECT * FROM mytable WHERE x = $1::bigint;
1601 This forces parameter <literal>$1</> to be treated as <type>bigint</>, whereas
1602 by default it would be assigned the same type as <literal>x</>. Forcing the
1603 parameter type decision, either this way or by specifying a numeric type OID,
1604 is strongly recommended when sending parameter values in binary format, because
1605 binary format has less redundancy than text format and so there is less chance
1606 that the server will detect a type mismatch mistake for you.
1613 <term><function>PQprepare</function>
1615 <primary>PQprepare</primary>
1621 Submits a request to create a prepared statement with the
1622 given parameters, and waits for completion.
1624 PGresult *PQprepare(PGconn *conn,
1625 const char *stmtName,
1628 const Oid *paramTypes);
1633 <function>PQprepare</> creates a prepared statement for later
1634 execution with <function>PQexecPrepared</>. This feature allows
1635 commands that will be used repeatedly to be parsed and planned just
1636 once, rather than each time they are executed.
1637 <function>PQprepare</> is supported only in protocol 3.0 and later
1638 connections; it will fail when using protocol 2.0.
1642 The function creates a prepared statement named
1643 <parameter>stmtName</> from the <parameter>query</> string, which
1644 must contain a single SQL command. <parameter>stmtName</> can be
1645 <literal>""</> to create an unnamed statement, in which case any
1646 pre-existing unnamed statement is automatically replaced; otherwise
1647 it is an error if the statement name is already defined in the
1648 current session. If any parameters are used, they are referred
1649 to in the query as <literal>$1</>, <literal>$2</>, etc.
1650 <parameter>nParams</> is the number of parameters for which types
1651 are pre-specified in the array <parameter>paramTypes[]</>. (The
1652 array pointer can be <symbol>NULL</symbol> when
1653 <parameter>nParams</> is zero.) <parameter>paramTypes[]</>
1654 specifies, by OID, the data types to be assigned to the parameter
1655 symbols. If <parameter>paramTypes</> is <symbol>NULL</symbol>,
1656 or any particular element in the array is zero, the server assigns
1657 a data type to the parameter symbol in the same way it would do
1658 for an untyped literal string. Also, the query can use parameter
1659 symbols with numbers higher than <parameter>nParams</>; data types
1660 will be inferred for these symbols as well. (See
1661 <function>PQdescribePrepared</function> for a means to find out
1662 what data types were inferred.)
1666 As with <function>PQexec</>, the result is normally a
1667 <structname>PGresult</structname> object whose contents indicate
1668 server-side success or failure. A null result indicates
1669 out-of-memory or inability to send the command at all. Use
1670 <function>PQerrorMessage</function> to get more information about
1677 Prepared statements for use with <function>PQexecPrepared</> can also
1678 be created by executing SQL <xref linkend="sql-prepare"
1679 endterm="sql-prepare-title"> statements. (But <function>PQprepare</>
1680 is more flexible since it does not require parameter types to be
1681 pre-specified.) Also, although there is no <application>libpq</>
1682 function for deleting a prepared statement, the SQL <xref
1683 linkend="sql-deallocate" endterm="sql-deallocate-title"> statement
1684 can be used for that purpose.
1691 <function>PQexecPrepared</function>
1693 <primary>PQexecPrepared</primary>
1699 Sends a request to execute a prepared statement with given
1700 parameters, and waits for the result.
1702 PGresult *PQexecPrepared(PGconn *conn,
1703 const char *stmtName,
1705 const char * const *paramValues,
1706 const int *paramLengths,
1707 const int *paramFormats,
1713 <function>PQexecPrepared</> is like <function>PQexecParams</>,
1714 but the command to be executed is specified by naming a
1715 previously-prepared statement, instead of giving a query string.
1716 This feature allows commands that will be used repeatedly to be
1717 parsed and planned just once, rather than each time they are
1718 executed. The statement must have been prepared previously in
1719 the current session. <function>PQexecPrepared</> is supported
1720 only in protocol 3.0 and later connections; it will fail when
1725 The parameters are identical to <function>PQexecParams</>, except that the
1726 name of a prepared statement is given instead of a query string, and the
1727 <parameter>paramTypes[]</> parameter is not present (it is not needed since
1728 the prepared statement's parameter types were determined when it was created).
1735 <function>PQdescribePrepared</function>
1737 <primary>PQdescribePrepared</primary>
1743 Submits a request to obtain information about the specified
1744 prepared statement, and waits for completion.
1746 PGresult *PQdescribePrepared(PGconn *conn, const char *stmtName);
1751 <function>PQdescribePrepared</> allows an application to obtain
1752 information about a previously prepared statement.
1753 <function>PQdescribePrepared</> is supported only in protocol 3.0
1754 and later connections; it will fail when using protocol 2.0.
1758 <parameter>stmtName</> can be <literal>""</> or NULL to reference
1759 the unnamed statement, otherwise it must be the name of an existing
1760 prepared statement. On success, a <structname>PGresult</> with
1761 status <literal>PGRES_COMMAND_OK</literal> is returned. The
1762 functions <function>PQnparams</function> and
1763 <function>PQparamtype</function> can be applied to this
1764 <structname>PGresult</> to obtain information about the parameters
1765 of the prepared statement, and the functions
1766 <function>PQnfields</function>, <function>PQfname</function>,
1767 <function>PQftype</function>, etc provide information about the
1768 result columns (if any) of the statement.
1775 <function>PQdescribePortal</function>
1777 <primary>PQdescribePortal</primary>
1783 Submits a request to obtain information about the specified
1784 portal, and waits for completion.
1786 PGresult *PQdescribePortal(PGconn *conn, const char *portalName);
1791 <function>PQdescribePortal</> allows an application to obtain
1792 information about a previously created portal.
1793 (<application>libpq</> does not provide any direct access to
1794 portals, but you can use this function to inspect the properties
1795 of a cursor created with a <command>DECLARE CURSOR</> SQL command.)
1796 <function>PQdescribePortal</> is supported only in protocol 3.0
1797 and later connections; it will fail when using protocol 2.0.
1801 <parameter>portalName</> can be <literal>""</> or NULL to reference
1802 the unnamed portal, otherwise it must be the name of an existing
1803 portal. On success, a <structname>PGresult</> with status
1804 <literal>PGRES_COMMAND_OK</literal> is returned. The functions
1805 <function>PQnfields</function>, <function>PQfname</function>,
1806 <function>PQftype</function>, etc can be applied to the
1807 <structname>PGresult</> to obtain information about the result
1808 columns (if any) of the portal.
1816 The <structname>PGresult</structname><indexterm><primary>PGresult</></>
1817 structure encapsulates the result returned by the server.
1818 <application>libpq</application> application programmers should be
1819 careful to maintain the <structname>PGresult</structname> abstraction.
1820 Use the accessor functions below to get at the contents of
1821 <structname>PGresult</structname>. Avoid directly referencing the
1822 fields of the <structname>PGresult</structname> structure because they
1823 are subject to change in the future.
1828 <function>PQresultStatus</function>
1830 <primary>PQresultStatus</primary>
1836 Returns the result status of the command.
1838 ExecStatusType PQresultStatus(const PGresult *res);
1843 <function>PQresultStatus</function> can return one of the following values:
1847 <term><literal>PGRES_EMPTY_QUERY</literal></term>
1850 The string sent to the server was empty.
1856 <term><literal>PGRES_COMMAND_OK</literal></term>
1859 Successful completion of a command returning no data.
1865 <term><literal>PGRES_TUPLES_OK</literal></term>
1868 Successful completion of a command returning data (such as
1869 a <command>SELECT</> or <command>SHOW</>).
1875 <term><literal>PGRES_COPY_OUT</literal></term>
1878 Copy Out (from server) data transfer started.
1884 <term><literal>PGRES_COPY_IN</literal></term>
1887 Copy In (to server) data transfer started.
1893 <term><literal>PGRES_BAD_RESPONSE</literal></term>
1896 The server's response was not understood.
1902 <term><literal>PGRES_NONFATAL_ERROR</literal></term>
1905 A nonfatal error (a notice or warning) occurred.
1911 <term><literal>PGRES_FATAL_ERROR</literal></term>
1914 A fatal error occurred.
1920 If the result status is <literal>PGRES_TUPLES_OK</literal>, then
1921 the functions described below can be used to retrieve the rows
1922 returned by the query. Note that a <command>SELECT</command>
1923 command that happens to retrieve zero rows still shows
1924 <literal>PGRES_TUPLES_OK</literal>.
1925 <literal>PGRES_COMMAND_OK</literal> is for commands that can never
1926 return rows (<command>INSERT</command>, <command>UPDATE</command>,
1927 etc.). A response of <literal>PGRES_EMPTY_QUERY</literal> might
1928 indicate a bug in the client software.
1932 A result of status <symbol>PGRES_NONFATAL_ERROR</symbol> will
1933 never be returned directly by <function>PQexec</function> or other
1934 query execution functions; results of this kind are instead passed
1935 to the notice processor (see <xref
1936 linkend="libpq-notice-processing">).
1943 <function>PQresStatus</function>
1945 <primary>PQresStatus</primary>
1951 Converts the enumerated type returned by
1952 <function>PQresultStatus</> into a string constant describing the
1953 status code. The caller should not free the result.
1956 char *PQresStatus(ExecStatusType status);
1964 <function>PQresultErrorMessage</function>
1966 <primary>PQresultErrorMessage</primary>
1972 Returns the error message associated with the command, or an empty string
1973 if there was no error.
1975 char *PQresultErrorMessage(const PGresult *res);
1977 If there was an error, the returned string will include a trailing
1978 newline. The caller should not free the result directly. It will
1979 be freed when the associated <structname>PGresult</> handle is
1980 passed to <function>PQclear</function>.
1984 Immediately following a <function>PQexec</function> or
1985 <function>PQgetResult</function> call,
1986 <function>PQerrorMessage</function> (on the connection) will return
1987 the same string as <function>PQresultErrorMessage</function> (on
1988 the result). However, a <structname>PGresult</structname> will
1989 retain its error message until destroyed, whereas the connection's
1990 error message will change when subsequent operations are done.
1991 Use <function>PQresultErrorMessage</function> when you want to
1992 know the status associated with a particular
1993 <structname>PGresult</structname>; use
1994 <function>PQerrorMessage</function> when you want to know the
1995 status from the latest operation on the connection.
2001 <term><function>PQresultErrorField</function><indexterm><primary>PQresultErrorField</></></term>
2004 Returns an individual field of an error report.
2006 char *PQresultErrorField(const PGresult *res, int fieldcode);
2008 <parameter>fieldcode</> is an error field identifier; see the symbols
2009 listed below. <symbol>NULL</symbol> is returned if the
2010 <structname>PGresult</structname> is not an error or warning result,
2011 or does not include the specified field. Field values will normally
2012 not include a trailing newline. The caller should not free the
2013 result directly. It will be freed when the
2014 associated <structname>PGresult</> handle is passed to
2015 <function>PQclear</function>.
2019 The following field codes are available:
2022 <term><symbol>PG_DIAG_SEVERITY</></term>
2025 The severity; the field contents are <literal>ERROR</>,
2026 <literal>FATAL</>, or <literal>PANIC</> (in an error message),
2027 or <literal>WARNING</>, <literal>NOTICE</>, <literal>DEBUG</>,
2028 <literal>INFO</>, or <literal>LOG</> (in a notice message), or
2029 a localized translation of one of these. Always present.
2036 <primary>error codes</primary>
2037 <secondary>libpq</secondary>
2039 <term><symbol>PG_DIAG_SQLSTATE</></term>
2042 The SQLSTATE code for the error. The SQLSTATE code identifies
2043 the type of error that has occurred; it can be used by
2044 front-end applications to perform specific operations (such
2045 as error handling) in response to a particular database error.
2046 For a list of the possible SQLSTATE codes, see <xref
2047 linkend="errcodes-appendix">. This field is not localizable,
2048 and is always present.
2054 <term><symbol>PG_DIAG_MESSAGE_PRIMARY</></term>
2057 The primary human-readable error message (typically one line).
2064 <term><symbol>PG_DIAG_MESSAGE_DETAIL</></term>
2067 Detail: an optional secondary error message carrying more
2068 detail about the problem. Might run to multiple lines.
2074 <term><symbol>PG_DIAG_MESSAGE_HINT</></term>
2077 Hint: an optional suggestion what to do about the problem.
2078 This is intended to differ from detail in that it offers advice
2079 (potentially inappropriate) rather than hard facts. Might
2080 run to multiple lines.
2086 <term><symbol>PG_DIAG_STATEMENT_POSITION</></term>
2089 A string containing a decimal integer indicating an error cursor
2090 position as an index into the original statement string. The
2091 first character has index 1, and positions are measured in
2092 characters not bytes.
2098 <term><symbol>PG_DIAG_INTERNAL_POSITION</></term>
2101 This is defined the same as the
2102 <symbol>PG_DIAG_STATEMENT_POSITION</> field, but it is used
2103 when the cursor position refers to an internally generated
2104 command rather than the one submitted by the client. The
2105 <symbol>PG_DIAG_INTERNAL_QUERY</> field will always appear when
2112 <term><symbol>PG_DIAG_INTERNAL_QUERY</></term>
2115 The text of a failed internally-generated command. This could
2116 be, for example, a SQL query issued by a PL/pgSQL function.
2122 <term><symbol>PG_DIAG_CONTEXT</></term>
2125 An indication of the context in which the error occurred.
2126 Presently this includes a call stack traceback of active
2127 procedural language functions and internally-generated queries.
2128 The trace is one entry per line, most recent first.
2134 <term><symbol>PG_DIAG_SOURCE_FILE</></term>
2137 The file name of the source-code location where the error was
2144 <term><symbol>PG_DIAG_SOURCE_LINE</></term>
2147 The line number of the source-code location where the error
2154 <term><symbol>PG_DIAG_SOURCE_FUNCTION</></term>
2157 The name of the source-code function reporting the error.
2165 The client is responsible for formatting displayed information to meet
2166 its needs; in particular it should break long lines as needed.
2167 Newline characters appearing in the error message fields should be
2168 treated as paragraph breaks, not line breaks.
2172 Errors generated internally by <application>libpq</application> will
2173 have severity and primary message, but typically no other fields.
2174 Errors returned by a pre-3.0-protocol server will include severity and
2175 primary message, and sometimes a detail message, but no other fields.
2179 Note that error fields are only available from
2180 <structname>PGresult</structname> objects, not
2181 <structname>PGconn</structname> objects; there is no
2182 <function>PQerrorField</function> function.
2188 <term><function>PQclear</function><indexterm><primary>PQclear</></></term>
2191 Frees the storage associated with a
2192 <structname>PGresult</structname>. Every command result should be
2193 freed via <function>PQclear</function> when it is no longer
2197 void PQclear(PGresult *res);
2202 You can keep a <structname>PGresult</structname> object around for
2203 as long as you need it; it does not go away when you issue a new
2204 command, nor even if you close the connection. To get rid of it,
2205 you must call <function>PQclear</function>. Failure to do this
2206 will result in memory leaks in your application.
2214 <sect2 id="libpq-exec-select-info">
2215 <title>Retrieving Query Result Information</title>
2218 These functions are used to extract information from a
2219 <structname>PGresult</structname> object that represents a successful
2220 query result (that is, one that has status
2221 <literal>PGRES_TUPLES_OK</literal>). They can also be used to extract
2222 information from a successful Describe operation: a Describe's result
2223 has all the same column information that actual execution of the query
2224 would provide, but it has zero rows. For objects with other status values,
2225 these functions will act as though the result has zero rows and zero columns.
2231 <function>PQntuples</function>
2233 <primary>PQntuples</primary>
2239 Returns the number of rows (tuples) in the query result. Because
2240 it returns an integer result, large result sets might overflow the
2241 return value on 32-bit operating systems.
2244 int PQntuples(const PGresult *res);
2253 <function>PQnfields</function>
2255 <primary>PQnfields</primary>
2261 Returns the number of columns (fields) in each row of the query
2265 int PQnfields(const PGresult *res);
2273 <function>PQfname</function>
2275 <primary>PQfname</primary>
2281 Returns the column name associated with the given column number.
2282 Column numbers start at 0. The caller should not free the result
2283 directly. It will be freed when the associated
2284 <structname>PGresult</> handle is passed to
2285 <function>PQclear</function>.
2287 char *PQfname(const PGresult *res,
2293 <symbol>NULL</symbol> is returned if the column number is out of range.
2300 <function>PQfnumber</function>
2302 <primary>PQfnumber</primary>
2308 Returns the column number associated with the given column name.
2310 int PQfnumber(const PGresult *res,
2311 const char *column_name);
2316 -1 is returned if the given name does not match any column.
2320 The given name is treated like an identifier in an SQL command,
2321 that is, it is downcased unless double-quoted. For example, given
2322 a query result generated from the SQL command:
2324 SELECT 1 AS FOO, 2 AS "BAR";
2326 we would have the results:
2328 PQfname(res, 0) <lineannotation>foo</lineannotation>
2329 PQfname(res, 1) <lineannotation>BAR</lineannotation>
2330 PQfnumber(res, "FOO") <lineannotation>0</lineannotation>
2331 PQfnumber(res, "foo") <lineannotation>0</lineannotation>
2332 PQfnumber(res, "BAR") <lineannotation>-1</lineannotation>
2333 PQfnumber(res, "\"BAR\"") <lineannotation>1</lineannotation>
2341 <function>PQftable</function>
2343 <primary>PQftable</primary>
2349 Returns the OID of the table from which the given column was
2350 fetched. Column numbers start at 0.
2352 Oid PQftable(const PGresult *res,
2358 <literal>InvalidOid</> is returned if the column number is out of range,
2359 or if the specified column is not a simple reference to a table column,
2360 or when using pre-3.0 protocol.
2361 You can query the system table <literal>pg_class</literal> to determine
2362 exactly which table is referenced.
2366 The type <type>Oid</type> and the constant
2367 <literal>InvalidOid</literal> will be defined when you include
2368 the <application>libpq</application> header file. They will both
2369 be some integer type.
2376 <function>PQftablecol</function>
2378 <primary>PQftablecol</primary>
2384 Returns the column number (within its table) of the column making
2385 up the specified query result column. Query-result column numbers
2386 start at 0, but table columns have nonzero numbers.
2388 int PQftablecol(const PGresult *res,
2394 Zero is returned if the column number is out of range, or if the
2395 specified column is not a simple reference to a table column, or
2396 when using pre-3.0 protocol.
2403 <function>PQfformat</function>
2405 <primary>PQfformat</primary>
2411 Returns the format code indicating the format of the given
2412 column. Column numbers start at 0.
2414 int PQfformat(const PGresult *res,
2420 Format code zero indicates textual data representation, while format
2421 code one indicates binary representation. (Other codes are reserved
2422 for future definition.)
2429 <function>PQftype</function>
2431 <primary>PQftype</primary>
2437 Returns the data type associated with the given column number.
2438 The integer returned is the internal OID number of the type.
2439 Column numbers start at 0.
2441 Oid PQftype(const PGresult *res,
2447 You can query the system table <literal>pg_type</literal> to
2448 obtain the names and properties of the various data types. The
2449 <acronym>OID</acronym>s of the built-in data types are defined
2450 in the file <filename>src/include/catalog/pg_type.h</filename>
2458 <function>PQfmod</function>
2460 <primary>PQfmod</primary>
2466 Returns the type modifier of the column associated with the
2467 given column number. Column numbers start at 0.
2469 int PQfmod(const PGresult *res,
2475 The interpretation of modifier values is type-specific; they
2476 typically indicate precision or size limits. The value -1 is
2477 used to indicate <quote>no information available</>. Most data
2478 types do not use modifiers, in which case the value is always
2486 <function>PQfsize</function>
2488 <primary>PQfsize</primary>
2494 Returns the size in bytes of the column associated with the
2495 given column number. Column numbers start at 0.
2497 int PQfsize(const PGresult *res,
2503 <function>PQfsize</> returns the space allocated for this column
2504 in a database row, in other words the size of the server's
2505 internal representation of the data type. (Accordingly, it is
2506 not really very useful to clients.) A negative value indicates
2507 the data type is variable-length.
2514 <function>PQbinaryTuples</function>
2516 <primary>PQbinaryTuples</primary>
2522 Returns 1 if the <structname>PGresult</> contains binary data
2523 and 0 if it contains text data.
2525 int PQbinaryTuples(const PGresult *res);
2530 This function is deprecated (except for its use in connection with
2531 <command>COPY</>), because it is possible for a single
2532 <structname>PGresult</> to contain text data in some columns and
2533 binary data in others. <function>PQfformat</> is preferred.
2534 <function>PQbinaryTuples</> returns 1 only if all columns of the
2535 result are binary (format 1).
2542 <function>PQgetvalue</function>
2544 <primary>PQgetvalue</primary>
2550 Returns a single field value of one row of a
2551 <structname>PGresult</structname>. Row and column numbers start
2552 at 0. The caller should not free the result directly. It will
2553 be freed when the associated <structname>PGresult</> handle is
2554 passed to <function>PQclear</function>.
2556 char *PQgetvalue(const PGresult *res,
2563 For data in text format, the value returned by
2564 <function>PQgetvalue</function> is a null-terminated character
2565 string representation of the field value. For data in binary
2566 format, the value is in the binary representation determined by
2567 the data type's <function>typsend</> and <function>typreceive</>
2568 functions. (The value is actually followed by a zero byte in
2569 this case too, but that is not ordinarily useful, since the
2570 value is likely to contain embedded nulls.)
2574 An empty string is returned if the field value is null. See
2575 <function>PQgetisnull</> to distinguish null values from
2576 empty-string values.
2580 The pointer returned by <function>PQgetvalue</function> points
2581 to storage that is part of the <structname>PGresult</structname>
2582 structure. One should not modify the data it points to, and one
2583 must explicitly copy the data into other storage if it is to be
2584 used past the lifetime of the <structname>PGresult</structname>
2592 <function>PQgetisnull</function>
2594 <primary>PQgetisnull</primary>
2597 <primary>null value</primary>
2598 <secondary sortas="libpq">in libpq</secondary>
2604 Tests a field for a null value. Row and column numbers start
2607 int PQgetisnull(const PGresult *res,
2614 This function returns 1 if the field is null and 0 if it
2615 contains a non-null value. (Note that
2616 <function>PQgetvalue</function> will return an empty string,
2617 not a null pointer, for a null field.)
2624 <function>PQgetlength</function>
2626 <primary>PQgetlength</primary>
2631 Returns the actual length of a field value in bytes. Row and
2632 column numbers start at 0.
2634 int PQgetlength(const PGresult *res,
2641 This is the actual data length for the particular data value,
2642 that is, the size of the object pointed to by
2643 <function>PQgetvalue</function>. For text data format this is
2644 the same as <function>strlen()</>. For binary format this is
2645 essential information. Note that one should <emphasis>not</>
2646 rely on <function>PQfsize</function> to obtain the actual data
2654 <function>PQnparams</function>
2656 <primary>PQnparams</primary>
2662 Returns the number of parameters of a prepared statement.
2664 int PQnparams(const PGresult *res);
2669 This function is only useful when inspecting the result of
2670 <function>PQdescribePrepared</>. For other types of queries it
2678 <function>PQparamtype</function>
2680 <primary>PQparamtype</primary>
2686 Returns the data type of the indicated statement parameter.
2687 Parameter numbers start at 0.
2689 Oid PQparamtype(const PGresult *res, int param_number);
2694 This function is only useful when inspecting the result of
2695 <function>PQdescribePrepared</>. For other types of queries it
2703 <function>PQprint</function>
2705 <primary>PQprint</primary>
2711 Prints out all the rows and, optionally, the column names to
2712 the specified output stream.
2714 void PQprint(FILE *fout, /* output stream */
2715 const PGresult *res,
2716 const PQprintOpt *po);
2718 pqbool header; /* print output field headings and row count */
2719 pqbool align; /* fill align the fields */
2720 pqbool standard; /* old brain dead format */
2721 pqbool html3; /* output HTML tables */
2722 pqbool expanded; /* expand tables */
2723 pqbool pager; /* use pager for output if needed */
2724 char *fieldSep; /* field separator */
2725 char *tableOpt; /* attributes for HTML table element */
2726 char *caption; /* HTML table caption */
2727 char **fieldName; /* null-terminated array of replacement field names */
2733 This function was formerly used by <application>psql</application>
2734 to print query results, but this is no longer the case. Note
2735 that it assumes all the data is in text format.
2742 <sect2 id="libpq-exec-nonselect">
2743 <title>Retrieving Result Information for Other Commands</title>
2746 These functions are used to extract information from
2747 <structname>PGresult</structname> objects that are not
2748 <command>SELECT</> results.
2754 <function>PQcmdStatus</function>
2756 <primary>PQcmdStatus</primary>
2762 Returns the command status tag from the SQL command that generated
2763 the <structname>PGresult</structname>.
2765 char *PQcmdStatus(PGresult *res);
2770 Commonly this is just the name of the command, but it might include
2771 additional data such as the number of rows processed. The caller
2772 should not free the result directly. It will be freed when the
2773 associated <structname>PGresult</> handle is passed to
2774 <function>PQclear</function>.
2781 <function>PQcmdTuples</function>
2783 <primary>PQcmdTuples</primary>
2789 Returns the number of rows affected by the SQL command.
2791 char *PQcmdTuples(PGresult *res);
2796 This function returns a string containing the number of rows
2797 affected by the <acronym>SQL</> statement that generated the
2798 <structname>PGresult</>. This function can only be used following
2799 the execution of an <command>INSERT</>, <command>UPDATE</>,
2800 <command>DELETE</>, <command>MOVE</>, <command>FETCH</>, or
2801 <command>COPY</> statement, or an <command>EXECUTE</> of a
2802 prepared query that contains an <command>INSERT</>,
2803 <command>UPDATE</>, or <command>DELETE</> statement. If the
2804 command that generated the <structname>PGresult</> was anything
2805 else, <function>PQcmdTuples</> returns an empty string. The caller
2806 should not free the return value directly. It will be freed when
2807 the associated <structname>PGresult</> handle is passed to
2808 <function>PQclear</function>.
2815 <function>PQoidValue</function>
2817 <primary>PQoidValue</primary>
2823 Returns the OID<indexterm><primary>OID</><secondary>in libpq</></>
2824 of the inserted row, if the <acronym>SQL</> command was an
2825 <command>INSERT</> that inserted exactly one row into a table that
2826 has OIDs, or a <command>EXECUTE</> of a prepared query containing
2827 a suitable <command>INSERT</> statement. Otherwise, this function
2828 returns <literal>InvalidOid</literal>. This function will also
2829 return <literal>InvalidOid</literal> if the table affected by the
2830 <command>INSERT</> statement does not contain OIDs.
2832 Oid PQoidValue(const PGresult *res);
2840 <function>PQoidStatus</function>
2842 <primary>PQoidStatus</primary>
2848 Returns a string with the OID of the inserted row, if the
2849 <acronym>SQL</acronym> command was an <command>INSERT</command>
2850 that inserted exactly one row, or a <command>EXECUTE</command> of
2851 a prepared statement consisting of a suitable
2852 <command>INSERT</command>. (The string will be <literal>0</> if
2853 the <command>INSERT</command> did not insert exactly one row, or
2854 if the target table does not have OIDs.) If the command was not
2855 an <command>INSERT</command>, returns an empty string.
2857 char *PQoidStatus(const PGresult *res);
2862 This function is deprecated in favor of
2863 <function>PQoidValue</function>. It is not thread-safe.
2871 <sect2 id="libpq-exec-escape-string">
2872 <title>Escaping Strings for Inclusion in SQL Commands</title>
2874 <indexterm zone="libpq-exec-escape-string">
2875 <primary>PQescapeStringConn</primary>
2877 <indexterm zone="libpq-exec-escape-string">
2878 <primary>PQescapeString</primary>
2880 <indexterm zone="libpq-exec-escape-string">
2881 <primary>escaping strings</primary>
2882 <secondary>in libpq</secondary>
2886 <function>PQescapeStringConn</function> escapes a string for use within an SQL
2887 command. This is useful when inserting data values as literal constants
2888 in SQL commands. Certain characters (such as quotes and backslashes) must
2889 be escaped to prevent them from being interpreted specially by the SQL parser.
2890 <function>PQescapeStringConn</> performs this operation.
2895 It is especially important to do proper escaping when handling strings that
2896 were received from an untrustworthy source. Otherwise there is a security
2897 risk: you are vulnerable to <quote>SQL injection</> attacks wherein unwanted
2898 SQL commands are fed to your database.
2903 Note that it is not necessary nor correct to do escaping when a data
2904 value is passed as a separate parameter in <function>PQexecParams</> or
2905 its sibling routines.
2908 size_t PQescapeStringConn (PGconn *conn,
2909 char *to, const char *from, size_t length,
2915 <function>PQescapeStringConn</> writes an escaped version of the
2916 <parameter>from</> string to the <parameter>to</> buffer, escaping
2917 special characters so that they cannot cause any harm, and adding a
2918 terminating zero byte. The single quotes that must surround
2919 <productname>PostgreSQL</> string literals are not included in the
2920 result string; they should be provided in the SQL command that the
2921 result is inserted into. The parameter <parameter>from</> points to
2922 the first character of the string that is to be escaped, and the
2923 <parameter>length</> parameter gives the number of bytes in this
2924 string. A terminating zero byte is not required, and should not be
2925 counted in <parameter>length</>. (If a terminating zero byte is found
2926 before <parameter>length</> bytes are processed,
2927 <function>PQescapeStringConn</> stops at the zero; the behavior is
2928 thus rather like <function>strncpy</>.) <parameter>to</> shall point
2929 to a buffer that is able to hold at least one more byte than twice
2930 the value of <parameter>length</>, otherwise the behavior is undefined.
2931 Behavior is likewise undefined if the <parameter>to</> and
2932 <parameter>from</> strings overlap.
2936 If the <parameter>error</> parameter is not NULL, then
2937 <literal>*error</> is set to zero on success, nonzero on error.
2938 Presently the only possible error conditions involve invalid multibyte
2939 encoding in the source string. The output string is still generated
2940 on error, but it can be expected that the server will reject it as
2941 malformed. On error, a suitable message is stored in the
2942 <parameter>conn</> object, whether or not <parameter>error</> is NULL.
2946 <function>PQescapeStringConn</> returns the number of bytes written
2947 to <parameter>to</>, not including the terminating zero byte.
2952 size_t PQescapeString (char *to, const char *from, size_t length);
2957 <function>PQescapeString</> is an older, deprecated version of
2958 <function>PQescapeStringConn</>; the difference is that it does
2959 not take <parameter>conn</> or <parameter>error</> parameters.
2960 Because of this, it cannot adjust its behavior depending on the
2961 connection properties (such as character encoding) and therefore
2962 <emphasis>it might give the wrong results</>. Also, it has no way
2963 to report error conditions.
2967 <function>PQescapeString</> can be used safely in single-threaded
2968 client programs that work with only one <productname>PostgreSQL</>
2969 connection at a time (in this case it can find out what it needs to
2970 know <quote>behind the scenes</>). In other contexts it is a security
2971 hazard and should be avoided in favor of
2972 <function>PQescapeStringConn</>.
2977 <sect2 id="libpq-exec-escape-bytea">
2978 <title>Escaping Binary Strings for Inclusion in SQL Commands</title>
2980 <indexterm zone="libpq-exec-escape-bytea">
2981 <primary>bytea</primary>
2982 <secondary sortas="libpq">in libpq</secondary>
2988 <function>PQescapeByteaConn</function>
2990 <primary>PQescapeByteaConn</primary>
2996 Escapes binary data for use within an SQL command with the type
2997 <type>bytea</type>. As with <function>PQescapeStringConn</function>,
2998 this is only used when inserting data directly into an SQL command string.
3000 unsigned char *PQescapeByteaConn(PGconn *conn,
3001 const unsigned char *from,
3008 Certain byte values <emphasis>must</emphasis> be escaped (but all
3009 byte values <emphasis>can</emphasis> be escaped) when used as part
3010 of a <type>bytea</type> literal in an <acronym>SQL</acronym>
3011 statement. In general, to escape a byte, it is converted into the
3012 three digit octal number equal to the octet value, and preceded by
3013 usually two backslashes. The single quote (<literal>'</>) and backslash
3014 (<literal>\</>) characters have special alternative escape
3015 sequences. See <xref linkend="datatype-binary"> for more
3016 information. <function>PQescapeByteaConn</function> performs this
3017 operation, escaping only the minimally required bytes.
3021 The <parameter>from</parameter> parameter points to the first
3022 byte of the string that is to be escaped, and the
3023 <parameter>from_length</parameter> parameter gives the number of
3024 bytes in this binary string. (A terminating zero byte is
3025 neither necessary nor counted.) The <parameter>to_length</parameter>
3026 parameter points to a variable that will hold the resultant
3027 escaped string length. This result string length includes the terminating
3028 zero byte of the result.
3032 <function>PQescapeByteaConn</> returns an escaped version of the
3033 <parameter>from</parameter> parameter binary string in memory
3034 allocated with <function>malloc()</>. This memory must be freed using
3035 <function>PQfreemem()</> when the result is no longer needed. The
3036 return string has all special characters replaced so that they can
3037 be properly processed by the <productname>PostgreSQL</productname>
3038 string literal parser, and the <type>bytea</type> input function. A
3039 terminating zero byte is also added. The single quotes that must
3040 surround <productname>PostgreSQL</productname> string literals are
3041 not part of the result string.
3045 On error, a NULL pointer is returned, and a suitable error message
3046 is stored in the <parameter>conn</> object. Currently, the only
3047 possible error is insufficient memory for the result string.
3054 <function>PQescapeBytea</function>
3056 <primary>PQescapeBytea</primary>
3062 <function>PQescapeBytea</> is an older, deprecated version of
3063 <function>PQescapeByteaConn</>.
3065 unsigned char *PQescapeBytea(const unsigned char *from,
3072 The only difference from <function>PQescapeByteaConn</> is that
3073 <function>PQescapeBytea</> does not take a <structname>PGconn</>
3074 parameter. Because of this, it cannot adjust its behavior
3075 depending on the connection properties (in particular, whether
3076 standard-conforming strings are enabled) and therefore
3077 <emphasis>it might give the wrong results</>. Also, it has no
3078 way to return an error message on failure.
3082 <function>PQescapeBytea</> can be used safely in single-threaded
3083 client programs that work with only one <productname>PostgreSQL</>
3084 connection at a time (in this case it can find out what it needs
3085 to know <quote>behind the scenes</>). In other contexts it is
3086 a security hazard and should be avoided in favor of
3087 <function>PQescapeByteaConn</>.
3094 <function>PQunescapeBytea</function>
3096 <primary>PQunescapeBytea</primary>
3102 Converts a string representation of binary data into binary data
3103 — the reverse of <function>PQescapeBytea</function>. This
3104 is needed when retrieving <type>bytea</type> data in text format,
3105 but not when retrieving it in binary format.
3108 unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);
3113 The <parameter>from</parameter> parameter points to a string
3114 such as might be returned by <function>PQgetvalue</function> when applied
3115 to a <type>bytea</type> column. <function>PQunescapeBytea</function>
3116 converts this string representation into its binary representation.
3117 It returns a pointer to a buffer allocated with
3118 <function>malloc()</function>, or null on error, and puts the size of
3119 the buffer in <parameter>to_length</parameter>. The result must be
3120 freed using <function>PQfreemem</> when it is no longer needed.
3124 This conversion is not exactly the inverse of
3125 <function>PQescapeBytea</function>, because the string is not expected
3126 to be <quote>escaped</> when received from <function>PQgetvalue</function>.
3127 In particular this means there is no need for string quoting considerations,
3128 and so no need for a <structname>PGconn</> parameter.
3138 <sect1 id="libpq-async">
3139 <title>Asynchronous Command Processing</title>
3141 <indexterm zone="libpq-async">
3142 <primary>nonblocking connection</primary>
3146 The <function>PQexec</function> function is adequate for submitting
3147 commands in normal, synchronous applications. It has a couple of
3148 deficiencies, however, that can be of importance to some users:
3153 <function>PQexec</function> waits for the command to be completed.
3154 The application might have other work to do (such as maintaining a
3155 user interface), in which case it won't want to block waiting for
3162 Since the execution of the client application is suspended while it
3163 waits for the result, it is hard for the application to decide that
3164 it would like to try to cancel the ongoing command. (It can be done
3165 from a signal handler, but not otherwise.)
3171 <function>PQexec</function> can return only one
3172 <structname>PGresult</structname> structure. If the submitted command
3173 string contains multiple <acronym>SQL</acronym> commands, all but
3174 the last <structname>PGresult</structname> are discarded by
3175 <function>PQexec</function>.
3182 Applications that do not like these limitations can instead use the
3183 underlying functions that <function>PQexec</function> is built from:
3184 <function>PQsendQuery</function> and <function>PQgetResult</function>.
3186 <function>PQsendQueryParams</function>,
3187 <function>PQsendPrepare</function>,
3188 <function>PQsendQueryPrepared</function>,
3189 <function>PQsendDescribePrepared</function>, and
3190 <function>PQsendDescribePortal</function>,
3191 which can be used with <function>PQgetResult</function> to duplicate
3192 the functionality of
3193 <function>PQexecParams</function>,
3194 <function>PQprepare</function>,
3195 <function>PQexecPrepared</function>,
3196 <function>PQdescribePrepared</function>, and
3197 <function>PQdescribePortal</function>
3203 <function>PQsendQuery</function>
3205 <primary>PQsendQuery</primary>
3211 Submits a command to the server without waiting for the result(s).
3212 1 is returned if the command was successfully dispatched and 0 if
3213 not (in which case, use <function>PQerrorMessage</> to get more
3214 information about the failure).
3216 int PQsendQuery(PGconn *conn, const char *command);
3219 After successfully calling <function>PQsendQuery</function>, call
3220 <function>PQgetResult</function> one or more times to obtain the
3221 results. <function>PQsendQuery</function> cannot be called again
3222 (on the same connection) until <function>PQgetResult</function>
3223 has returned a null pointer, indicating that the command is done.
3230 <function>PQsendQueryParams</function>
3232 <primary>PQsendQueryParams</primary>
3238 Submits a command and separate parameters to the server without
3239 waiting for the result(s).
3241 int PQsendQueryParams(PGconn *conn,
3242 const char *command,
3244 const Oid *paramTypes,
3245 const char * const *paramValues,
3246 const int *paramLengths,
3247 const int *paramFormats,
3251 This is equivalent to <function>PQsendQuery</function> except that
3252 query parameters can be specified separately from the query string.
3253 The function's parameters are handled identically to
3254 <function>PQexecParams</function>. Like
3255 <function>PQexecParams</function>, it will not work on 2.0-protocol
3256 connections, and it allows only one command in the query string.
3263 <function>PQsendPrepare</>
3265 <primary>PQsendPrepare</primary>
3271 Sends a request to create a prepared statement with the given
3272 parameters, without waiting for completion.
3274 int PQsendPrepare(PGconn *conn,
3275 const char *stmtName,
3278 const Oid *paramTypes);
3281 This is an asynchronous version of <function>PQprepare</>: it
3282 returns 1 if it was able to dispatch the request, and 0 if not.
3283 After a successful call, call <function>PQgetResult</function> to
3284 determine whether the server successfully created the prepared
3285 statement. The function's parameters are handled identically to
3286 <function>PQprepare</function>. Like
3287 <function>PQprepare</function>, it will not work on 2.0-protocol
3295 <function>PQsendQueryPrepared</function>
3297 <primary>PQsendQueryPrepared</primary>
3303 Sends a request to execute a prepared statement with given
3304 parameters, without waiting for the result(s).
3306 int PQsendQueryPrepared(PGconn *conn,
3307 const char *stmtName,
3309 const char * const *paramValues,
3310 const int *paramLengths,
3311 const int *paramFormats,
3315 This is similar to <function>PQsendQueryParams</function>, but
3316 the command to be executed is specified by naming a
3317 previously-prepared statement, instead of giving a query string.
3318 The function's parameters are handled identically to
3319 <function>PQexecPrepared</function>. Like
3320 <function>PQexecPrepared</function>, it will not work on
3321 2.0-protocol connections.
3328 <function>PQsendDescribePrepared</>
3330 <primary>PQsendDescribePrepared</primary>
3336 Submits a request to obtain information about the specified
3337 prepared statement, without waiting for completion.
3339 int PQsendDescribePrepared(PGconn *conn, const char *stmtName);
3342 This is an asynchronous version of <function>PQdescribePrepared</>:
3343 it returns 1 if it was able to dispatch the request, and 0 if not.
3344 After a successful call, call <function>PQgetResult</function> to
3345 obtain the results. The function's parameters are handled
3346 identically to <function>PQdescribePrepared</function>. Like
3347 <function>PQdescribePrepared</function>, it will not work on
3348 2.0-protocol connections.
3355 <function>PQsendDescribePortal</>
3357 <primary>PQsendDescribePortal</primary>
3363 Submits a request to obtain information about the specified
3364 portal, without waiting for completion.
3366 int PQsendDescribePortal(PGconn *conn, const char *portalName);
3369 This is an asynchronous version of <function>PQdescribePortal</>:
3370 it returns 1 if it was able to dispatch the request, and 0 if not.
3371 After a successful call, call <function>PQgetResult</function> to
3372 obtain the results. The function's parameters are handled
3373 identically to <function>PQdescribePortal</function>. Like
3374 <function>PQdescribePortal</function>, it will not work on
3375 2.0-protocol connections.
3382 <function>PQgetResult</function>
3384 <primary>PQgetResult</primary>
3390 Waits for the next result from a prior
3391 <function>PQsendQuery</function>,
3392 <function>PQsendQueryParams</function>,
3393 <function>PQsendPrepare</function>, or
3394 <function>PQsendQueryPrepared</function> call, and returns it.
3395 A null pointer is returned when the command is complete and there
3396 will be no more results.
3398 PGresult *PQgetResult(PGconn *conn);
3403 <function>PQgetResult</function> must be called repeatedly until
3404 it returns a null pointer, indicating that the command is done.
3405 (If called when no command is active,
3406 <function>PQgetResult</function> will just return a null pointer
3407 at once.) Each non-null result from
3408 <function>PQgetResult</function> should be processed using the
3409 same <structname>PGresult</> accessor functions previously
3410 described. Don't forget to free each result object with
3411 <function>PQclear</function> when done with it. Note that
3412 <function>PQgetResult</function> will block only if a command is
3413 active and the necessary response data has not yet been read by
3414 <function>PQconsumeInput</function>.
3422 Using <function>PQsendQuery</function> and
3423 <function>PQgetResult</function> solves one of
3424 <function>PQexec</function>'s problems: If a command string contains
3425 multiple <acronym>SQL</acronym> commands, the results of those commands
3426 can be obtained individually. (This allows a simple form of overlapped
3427 processing, by the way: the client can be handling the results of one
3428 command while the server is still working on later queries in the same
3429 command string.) However, calling <function>PQgetResult</function>
3430 will still cause the client to block until the server completes the
3431 next <acronym>SQL</acronym> command. This can be avoided by proper
3432 use of two more functions:
3437 <function>PQconsumeInput</function>
3439 <primary>PQconsumeInput</primary>
3445 If input is available from the server, consume it.
3447 int PQconsumeInput(PGconn *conn);
3452 <function>PQconsumeInput</function> normally returns 1 indicating
3453 <quote>no error</quote>, but returns 0 if there was some kind of
3454 trouble (in which case <function>PQerrorMessage</function> can be
3455 consulted). Note that the result does not say whether any input
3456 data was actually collected. After calling
3457 <function>PQconsumeInput</function>, the application can check
3458 <function>PQisBusy</function> and/or
3459 <function>PQnotifies</function> to see if their state has changed.
3463 <function>PQconsumeInput</function> can be called even if the
3464 application is not prepared to deal with a result or notification
3465 just yet. The function will read available data and save it in
3466 a buffer, thereby causing a <function>select()</function>
3467 read-ready indication to go away. The application can thus use
3468 <function>PQconsumeInput</function> to clear the
3469 <function>select()</function> condition immediately, and then
3470 examine the results at leisure.
3477 <function>PQisBusy</function>
3479 <primary>PQisBusy</primary>
3485 Returns 1 if a command is busy, that is,
3486 <function>PQgetResult</function> would block waiting for input.
3487 A 0 return indicates that <function>PQgetResult</function> can be
3488 called with assurance of not blocking.
3490 int PQisBusy(PGconn *conn);
3495 <function>PQisBusy</function> will not itself attempt to read data
3496 from the server; therefore <function>PQconsumeInput</function>
3497 must be invoked first, or the busy state will never end.
3505 A typical application using these functions will have a main loop that
3506 uses <function>select()</function> or <function>poll()</> to wait for
3507 all the conditions that it must respond to. One of the conditions
3508 will be input available from the server, which in terms of
3509 <function>select()</function> means readable data on the file
3510 descriptor identified by <function>PQsocket</function>. When the main
3511 loop detects input ready, it should call
3512 <function>PQconsumeInput</function> to read the input. It can then
3513 call <function>PQisBusy</function>, followed by
3514 <function>PQgetResult</function> if <function>PQisBusy</function>
3515 returns false (0). It can also call <function>PQnotifies</function>
3516 to detect <command>NOTIFY</> messages (see <xref
3517 linkend="libpq-notify">).
3522 <function>PQsendQuery</function>/<function>PQgetResult</function>
3523 can also attempt to cancel a command that is still being processed
3524 by the server; see <xref linkend="libpq-cancel">. But regardless of
3525 the return value of <function>PQcancel</function>, the application
3526 must continue with the normal result-reading sequence using
3527 <function>PQgetResult</function>. A successful cancellation will
3528 simply cause the command to terminate sooner than it would have
3533 By using the functions described above, it is possible to avoid
3534 blocking while waiting for input from the database server. However,
3535 it is still possible that the application will block waiting to send
3536 output to the server. This is relatively uncommon but can happen if
3537 very long SQL commands or data values are sent. (It is much more
3538 probable if the application sends data via <command>COPY IN</command>,
3539 however.) To prevent this possibility and achieve completely
3540 nonblocking database operation, the following additional functions
3546 <function>PQsetnonblocking</function>
3548 <primary>PQsetnonblocking</primary>
3554 Sets the nonblocking status of the connection.
3556 int PQsetnonblocking(PGconn *conn, int arg);
3561 Sets the state of the connection to nonblocking if
3562 <parameter>arg</parameter> is 1, or blocking if
3563 <parameter>arg</parameter> is 0. Returns 0 if OK, -1 if error.
3567 In the nonblocking state, calls to
3568 <function>PQsendQuery</function>, <function>PQputline</function>,
3569 <function>PQputnbytes</function>, and
3570 <function>PQendcopy</function> will not block but instead return
3571 an error if they need to be called again.
3575 Note that <function>PQexec</function> does not honor nonblocking
3576 mode; if it is called, it will act in blocking fashion anyway.
3583 <function>PQisnonblocking</function>
3585 <primary>PQisnonblocking</primary>
3591 Returns the blocking status of the database connection.
3593 int PQisnonblocking(const PGconn *conn);
3598 Returns 1 if the connection is set to nonblocking mode and 0 if
3606 <function>PQflush</function>
3608 <primary>PQflush</primary>
3614 Attempts to flush any queued output data to the server. Returns
3615 0 if successful (or if the send queue is empty), -1 if it failed
3616 for some reason, or 1 if it was unable to send all the data in
3617 the send queue yet (this case can only occur if the connection
3620 int PQflush(PGconn *conn);
3629 After sending any command or data on a nonblocking connection, call
3630 <function>PQflush</function>. If it returns 1, wait for the socket
3631 to be write-ready and call it again; repeat until it returns 0. Once
3632 <function>PQflush</function> returns 0, wait for the socket to be
3633 read-ready and then read the response as described above.
3638 <sect1 id="libpq-cancel">
3639 <title>Cancelling Queries in Progress</title>
3641 <indexterm zone="libpq-cancel">
3642 <primary>canceling</primary>
3643 <secondary>SQL command</secondary>
3647 A client application can request cancellation of a command that is
3648 still being processed by the server, using the functions described in
3654 <function>PQgetCancel</function>
3656 <primary>PQgetCancel</primary>
3662 Creates a data structure containing the information needed to cancel
3663 a command issued through a particular database connection.
3665 PGcancel *PQgetCancel(PGconn *conn);
3670 <function>PQgetCancel</function> creates a
3671 <structname>PGcancel</><indexterm><primary>PGcancel</></> object
3672 given a <structname>PGconn</> connection object. It will return
3673 NULL if the given <parameter>conn</> is NULL or an invalid
3674 connection. The <structname>PGcancel</> object is an opaque
3675 structure that is not meant to be accessed directly by the
3676 application; it can only be passed to <function>PQcancel</function>
3677 or <function>PQfreeCancel</function>.
3684 <function>PQfreeCancel</function>
3686 <primary>PQfreeCancel</primary>
3692 Frees a data structure created by <function>PQgetCancel</function>.
3694 void PQfreeCancel(PGcancel *cancel);
3699 <function>PQfreeCancel</function> frees a data object previously created
3700 by <function>PQgetCancel</function>.
3707 <function>PQcancel</function>
3709 <primary>PQcancel</primary>
3715 Requests that the server abandon processing of the current command.
3717 int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);
3722 The return value is 1 if the cancel request was successfully
3723 dispatched and 0 if not. If not, <parameter>errbuf</> is filled
3724 with an error message explaining why not. <parameter>errbuf</>
3725 must be a char array of size <parameter>errbufsize</> (the
3726 recommended size is 256 bytes).
3730 Successful dispatch is no guarantee that the request will have
3731 any effect, however. If the cancellation is effective, the current
3732 command will terminate early and return an error result. If the
3733 cancellation fails (say, because the server was already done
3734 processing the command), then there will be no visible result at
3739 <function>PQcancel</function> can safely be invoked from a signal
3740 handler, if the <parameter>errbuf</> is a local variable in the
3741 signal handler. The <structname>PGcancel</> object is read-only
3742 as far as <function>PQcancel</function> is concerned, so it can
3743 also be invoked from a thread that is separate from the one
3744 manipulating the <structname>PGconn</> object.
3753 <function>PQrequestCancel</function>
3755 <primary>PQrequestCancel</primary>
3761 Requests that the server abandon processing of the current
3764 int PQrequestCancel(PGconn *conn);
3769 <function>PQrequestCancel</function> is a deprecated variant of
3770 <function>PQcancel</function>. It operates directly on the
3771 <structname>PGconn</> object, and in case of failure stores the
3772 error message in the <structname>PGconn</> object (whence it can
3773 be retrieved by <function>PQerrorMessage</function>). Although
3774 the functionality is the same, this approach creates hazards for
3775 multiple-thread programs and signal handlers, since it is possible
3776 that overwriting the <structname>PGconn</>'s error message will
3777 mess up the operation currently in progress on the connection.
3786 <sect1 id="libpq-fastpath">
3787 <title>The Fast-Path Interface</title>
3789 <indexterm zone="libpq-fastpath">
3790 <primary>fast path</primary>
3794 <productname>PostgreSQL</productname> provides a fast-path interface
3795 to send simple function calls to the server.
3800 This interface is somewhat obsolete, as one can achieve similar
3801 performance and greater functionality by setting up a prepared
3802 statement to define the function call. Then, executing the statement
3803 with binary transmission of parameters and results substitutes for a
3804 fast-path function call.
3809 The function <function>PQfn</function><indexterm><primary>PQfn</></>
3810 requests execution of a server function via the fast-path interface:
3812 PGresult *PQfn(PGconn *conn,
3817 const PQArgBlock *args,
3832 The <parameter>fnid</> argument is the OID of the function to be
3833 executed. <parameter>args</> and <parameter>nargs</> define the
3834 parameters to be passed to the function; they must match the declared
3835 function argument list. When the <parameter>isint</> field of a
3836 parameter structure is true, the <parameter>u.integer</> value is sent
3837 to the server as an integer of the indicated length (this must be 1,
3838 2, or 4 bytes); proper byte-swapping occurs. When <parameter>isint</>
3839 is false, the indicated number of bytes at <parameter>*u.ptr</> are
3840 sent with no processing; the data must be in the format expected by
3841 the server for binary transmission of the function's argument data
3842 type. <parameter>result_buf</parameter> is the buffer in which to
3843 place the return value. The caller must have allocated sufficient
3844 space to store the return value. (There is no check!) The actual result
3845 length will be returned in the integer pointed to by
3846 <parameter>result_len</parameter>. If a 1, 2, or 4-byte integer result
3847 is expected, set <parameter>result_is_int</parameter> to 1, otherwise
3848 set it to 0. Setting <parameter>result_is_int</parameter> to 1 causes
3849 <application>libpq</> to byte-swap the value if necessary, so that it
3850 is delivered as a proper <type>int</type> value for the client machine.
3851 When <parameter>result_is_int</> is 0, the binary-format byte string
3852 sent by the server is returned unmodified.
3856 <function>PQfn</function> always returns a valid
3857 <structname>PGresult</structname> pointer. The result status should be
3858 checked before the result is used. The caller is responsible for
3859 freeing the <structname>PGresult</structname> with
3860 <function>PQclear</function> when it is no longer needed.
3864 Note that it is not possible to handle null arguments, null results,
3865 nor set-valued results when using this interface.
3870 <sect1 id="libpq-notify">
3871 <title>Asynchronous Notification</title>
3873 <indexterm zone="libpq-notify">
3874 <primary>NOTIFY</primary>
3875 <secondary>in libpq</secondary>
3879 <productname>PostgreSQL</productname> offers asynchronous notification
3880 via the <command>LISTEN</command> and <command>NOTIFY</command>
3881 commands. A client session registers its interest in a particular
3882 notification condition with the <command>LISTEN</command> command (and
3883 can stop listening with the <command>UNLISTEN</command> command). All
3884 sessions listening on a particular condition will be notified
3885 asynchronously when a <command>NOTIFY</command> command with that
3886 condition name is executed by any session. No additional information
3887 is passed from the notifier to the listener. Thus, typically, any
3888 actual data that needs to be communicated is transferred through a
3889 database table. Commonly, the condition name is the same as the
3890 associated table, but it is not necessary for there to be any associated
3895 <application>libpq</application> applications submit
3896 <command>LISTEN</command> and <command>UNLISTEN</command> commands as
3897 ordinary SQL commands. The arrival of <command>NOTIFY</command>
3898 messages can subsequently be detected by calling
3899 <function>PQnotifies</function>.<indexterm><primary>PQnotifies</></>
3903 The function <function>PQnotifies</function>
3904 returns the next notification from a list of unhandled
3905 notification messages received from the server. It returns a null pointer if
3906 there are no pending notifications. Once a notification is
3907 returned from <function>PQnotifies</>, it is considered handled and will be
3908 removed from the list of notifications.
3910 PGnotify *PQnotifies(PGconn *conn);
3912 typedef struct pgNotify {
3913 char *relname; /* notification condition name */
3914 int be_pid; /* process ID of notifying server process */
3915 char *extra; /* notification parameter */
3918 After processing a <structname>PGnotify</structname> object returned
3919 by <function>PQnotifies</function>, be sure to free it with
3920 <function>PQfreemem</function>. It is sufficient to free the
3921 <structname>PGnotify</structname> pointer; the
3922 <structfield>relname</structfield> and <structfield>extra</structfield>
3923 fields do not represent separate allocations. (At present, the
3924 <structfield>extra</structfield> field is unused and will always point
3925 to an empty string.)
3929 <xref linkend="libpq-example-2"> gives a sample program that illustrates
3930 the use of asynchronous notification.
3934 <function>PQnotifies</function> does not actually read data from the
3935 server; it just returns messages previously absorbed by another
3936 <application>libpq</application> function. In prior releases of
3937 <application>libpq</application>, the only way to ensure timely receipt
3938 of <command>NOTIFY</> messages was to constantly submit commands, even
3939 empty ones, and then check <function>PQnotifies</function> after each
3940 <function>PQexec</function>. While this still works, it is deprecated
3941 as a waste of processing power.
3945 A better way to check for <command>NOTIFY</> messages when you have no
3946 useful commands to execute is to call
3947 <function>PQconsumeInput</function>, then check
3948 <function>PQnotifies</function>. You can use
3949 <function>select()</function> to wait for data to arrive from the
3950 server, thereby using no <acronym>CPU</acronym> power unless there is
3951 something to do. (See <function>PQsocket</function> to obtain the file
3952 descriptor number to use with <function>select()</function>.) Note that
3953 this will work OK whether you submit commands with
3954 <function>PQsendQuery</function>/<function>PQgetResult</function> or
3955 simply use <function>PQexec</function>. You should, however, remember
3956 to check <function>PQnotifies</function> after each
3957 <function>PQgetResult</function> or <function>PQexec</function>, to
3958 see if any notifications came in during the processing of the command.
3963 <sect1 id="libpq-copy">
3964 <title>Functions Associated with the <command>COPY</command> Command</title>
3966 <indexterm zone="libpq-copy">
3967 <primary>COPY</primary>
3968 <secondary>with libpq</secondary>
3972 The <command>COPY</command> command in
3973 <productname>PostgreSQL</productname> has options to read from or write
3974 to the network connection used by <application>libpq</application>.
3975 The functions described in this section allow applications to take
3976 advantage of this capability by supplying or consuming copied data.
3980 The overall process is that the application first issues the SQL
3981 <command>COPY</command> command via <function>PQexec</function> or one
3982 of the equivalent functions. The response to this (if there is no
3983 error in the command) will be a <structname>PGresult</> object bearing
3984 a status code of <literal>PGRES_COPY_OUT</literal> or
3985 <literal>PGRES_COPY_IN</literal> (depending on the specified copy
3986 direction). The application should then use the functions of this
3987 section to receive or transmit data rows. When the data transfer is
3988 complete, another <structname>PGresult</> object is returned to indicate
3989 success or failure of the transfer. Its status will be
3990 <literal>PGRES_COMMAND_OK</literal> for success or
3991 <literal>PGRES_FATAL_ERROR</literal> if some problem was encountered.
3992 At this point further SQL commands can be issued via
3993 <function>PQexec</function>. (It is not possible to execute other SQL
3994 commands using the same connection while the <command>COPY</command>
3995 operation is in progress.)
3999 If a <command>COPY</command> command is issued via
4000 <function>PQexec</function> in a string that could contain additional
4001 commands, the application must continue fetching results via
4002 <function>PQgetResult</> after completing the <command>COPY</command>
4003 sequence. Only when <function>PQgetResult</> returns
4004 <symbol>NULL</symbol> is it certain that the <function>PQexec</function>
4005 command string is done and it is safe to issue more commands.
4009 The functions of this section should be executed only after obtaining
4010 a result status of <literal>PGRES_COPY_OUT</literal> or
4011 <literal>PGRES_COPY_IN</literal> from <function>PQexec</function> or
4012 <function>PQgetResult</function>.
4016 A <structname>PGresult</> object bearing one of these status values
4017 carries some additional data about the <command>COPY</command> operation
4018 that is starting. This additional data is available using functions
4019 that are also used in connection with query results:
4024 <function>PQnfields</function>
4026 <primary>PQnfields</primary>
4027 <secondary>with COPY</secondary>
4033 Returns the number of columns (fields) to be copied.
4040 <function>PQbinaryTuples</function>
4042 <primary>PQbinaryTuples</primary>
4043 <secondary>with COPY</secondary>
4049 0 indicates the overall copy format is textual (rows separated by
4050 newlines, columns separated by separator characters, etc). 1
4051 indicates the overall copy format is binary. See <xref
4052 linkend="sql-copy" endterm="sql-copy-title"> for more information.
4059 <function>PQfformat</function>
4061 <primary>PQfformat</primary>
4062 <secondary>with COPY</secondary>
4068 Returns the format code (0 for text, 1 for binary) associated with
4069 each column of the copy operation. The per-column format codes
4070 will always be zero when the overall copy format is textual, but
4071 the binary format can support both text and binary columns.
4072 (However, as of the current implementation of <command>COPY</>,
4073 only binary columns appear in a binary copy; so the per-column
4074 formats always match the overall format at present.)
4083 These additional data values are only available when using protocol
4084 3.0. When using protocol 2.0, all these functions will return 0.
4088 <sect2 id="libpq-copy-send">
4089 <title>Functions for Sending <command>COPY</command> Data</title>
4092 These functions are used to send data during <literal>COPY FROM
4093 STDIN</>. They will fail if called when the connection is not in
4094 <literal>COPY_IN</> state.
4100 <function>PQputCopyData</function>
4102 <primary>PQputCopyData</primary>
4108 Sends data to the server during <literal>COPY_IN</> state.
4110 int PQputCopyData(PGconn *conn,
4117 Transmits the <command>COPY</command> data in the specified
4118 <parameter>buffer</>, of length <parameter>nbytes</>, to the server.
4119 The result is 1 if the data was sent, zero if it was not sent
4120 because the attempt would block (this case is only possible if the
4121 connection is in nonblocking mode), or -1 if an error occurred.
4122 (Use <function>PQerrorMessage</function> to retrieve details if
4123 the return value is -1. If the value is zero, wait for write-ready
4128 The application can divide the <command>COPY</command> data stream
4129 into buffer loads of any convenient size. Buffer-load boundaries
4130 have no semantic significance when sending. The contents of the
4131 data stream must match the data format expected by the
4132 <command>COPY</> command; see <xref linkend="sql-copy"
4133 endterm="sql-copy-title"> for details.
4140 <function>PQputCopyEnd</function>
4142 <primary>PQputCopyEnd</primary>
4148 Sends end-of-data indication to the server during <literal>COPY_IN</> state.
4150 int PQputCopyEnd(PGconn *conn,
4151 const char *errormsg);
4156 Ends the <literal>COPY_IN</> operation successfully if
4157 <parameter>errormsg</> is <symbol>NULL</symbol>. If
4158 <parameter>errormsg</> is not <symbol>NULL</symbol> then the
4159 <command>COPY</> is forced to fail, with the string pointed to by
4160 <parameter>errormsg</> used as the error message. (One should not
4161 assume that this exact error message will come back from the server,
4162 however, as the server might have already failed the
4163 <command>COPY</> for its own reasons. Also note that the option
4164 to force failure does not work when using pre-3.0-protocol
4169 The result is 1 if the termination data was sent, zero if it was
4170 not sent because the attempt would block (this case is only possible
4171 if the connection is in nonblocking mode), or -1 if an error
4172 occurred. (Use <function>PQerrorMessage</function> to retrieve
4173 details if the return value is -1. If the value is zero, wait for
4174 write-ready and try again.)
4178 After successfully calling <function>PQputCopyEnd</>, call
4179 <function>PQgetResult</> to obtain the final result status of the
4180 <command>COPY</> command. One can wait for this result to be
4181 available in the usual way. Then return to normal operation.
4189 <sect2 id="libpq-copy-receive">
4190 <title>Functions for Receiving <command>COPY</command> Data</title>
4193 These functions are used to receive data during <literal>COPY TO
4194 STDOUT</>. They will fail if called when the connection is not in
4195 <literal>COPY_OUT</> state.
4201 <function>PQgetCopyData</function>
4203 <primary>PQgetCopyData</primary>
4209 Receives data from the server during <literal>COPY_OUT</> state.
4211 int PQgetCopyData(PGconn *conn,
4218 Attempts to obtain another row of data from the server during a
4219 <command>COPY</command>. Data is always returned one data row at
4220 a time; if only a partial row is available, it is not returned.
4221 Successful return of a data row involves allocating a chunk of
4222 memory to hold the data. The <parameter>buffer</> parameter must
4223 be non-<symbol>NULL</symbol>. <parameter>*buffer</> is set to
4224 point to the allocated memory, or to <symbol>NULL</symbol> in cases
4225 where no buffer is returned. A non-<symbol>NULL</symbol> result
4226 buffer must be freed using <function>PQfreemem</> when no longer
4231 When a row is successfully returned, the return value is the number
4232 of data bytes in the row (this will always be greater than zero).
4233 The returned string is always null-terminated, though this is
4234 probably only useful for textual <command>COPY</command>. A result
4235 of zero indicates that the <command>COPY</command> is still in
4236 progress, but no row is yet available (this is only possible when
4237 <parameter>async</> is true). A result of -1 indicates that the
4238 <command>COPY</command> is done. A result of -2 indicates that an
4239 error occurred (consult <function>PQerrorMessage</> for the reason).
4243 When <parameter>async</> is true (not zero),
4244 <function>PQgetCopyData</> will not block waiting for input; it
4245 will return zero if the <command>COPY</command> is still in progress
4246 but no complete row is available. (In this case wait for read-ready
4247 and then call <function>PQconsumeInput</> before calling
4248 <function>PQgetCopyData</> again.) When <parameter>async</> is
4249 false (zero), <function>PQgetCopyData</> will block until data is
4250 available or the operation completes.
4254 After <function>PQgetCopyData</> returns -1, call
4255 <function>PQgetResult</> to obtain the final result status of the
4256 <command>COPY</> command. One can wait for this result to be
4257 available in the usual way. Then return to normal operation.
4265 <sect2 id="libpq-copy-deprecated">
4266 <title>Obsolete Functions for <command>COPY</command></title>
4269 These functions represent older methods of handling <command>COPY</>.
4270 Although they still work, they are deprecated due to poor error handling,
4271 inconvenient methods of detecting end-of-data, and lack of support for binary
4272 or nonblocking transfers.
4278 <function>PQgetline</function>
4280 <primary>PQgetline</primary>
4286 Reads a newline-terminated line of characters (transmitted
4287 by the server) into a buffer string of size <parameter>length</>.
4289 int PQgetline(PGconn *conn,
4296 This function copies up to <parameter>length</>-1 characters into
4297 the buffer and converts the terminating newline into a zero byte.
4298 <function>PQgetline</function> returns <symbol>EOF</symbol> at the
4299 end of input, 0 if the entire line has been read, and 1 if the
4300 buffer is full but the terminating newline has not yet been read.
4303 Note that the application must check to see if a new line consists
4304 of the two characters <literal>\.</literal>, which indicates
4305 that the server has finished sending the results of the
4306 <command>COPY</command> command. If the application might receive
4307 lines that are more than <parameter>length</>-1 characters long,
4308 care is needed to be sure it recognizes the <literal>\.</literal>
4309 line correctly (and does not, for example, mistake the end of a
4310 long data line for a terminator line).
4317 <function>PQgetlineAsync</function>
4319 <primary>PQgetlineAsync</primary>
4325 Reads a row of <command>COPY</command> data (transmitted by the
4326 server) into a buffer without blocking.
4328 int PQgetlineAsync(PGconn *conn,
4335 This function is similar to <function>PQgetline</function>, but it can be used
4337 that must read <command>COPY</command> data asynchronously, that is, without blocking.
4338 Having issued the <command>COPY</command> command and gotten a <literal>PGRES_COPY_OUT</literal>
4340 application should call <function>PQconsumeInput</function> and
4341 <function>PQgetlineAsync</function> until the
4342 end-of-data signal is detected.
4345 Unlike <function>PQgetline</function>, this function takes
4346 responsibility for detecting end-of-data.
4350 On each call, <function>PQgetlineAsync</function> will return data if a
4351 complete data row is available in <application>libpq</>'s input buffer.
4352 Otherwise, no data is returned until the rest of the row arrives.
4353 The function returns -1 if the end-of-copy-data marker has been recognized,
4354 or 0 if no data is available, or a positive number giving the number of
4355 bytes of data returned. If -1 is returned, the caller must next call
4356 <function>PQendcopy</function>, and then return to normal processing.
4360 The data returned will not extend beyond a data-row boundary. If possible
4361 a whole row will be returned at one time. But if the buffer offered by
4362 the caller is too small to hold a row sent by the server, then a partial
4363 data row will be returned. With textual data this can be detected by testing
4364 whether the last returned byte is <literal>\n</literal> or not. (In a binary
4365 <command>COPY</>, actual parsing of the <command>COPY</> data format will be needed to make the
4366 equivalent determination.)
4367 The returned string is not null-terminated. (If you want to add a
4368 terminating null, be sure to pass a <parameter>bufsize</parameter> one smaller
4369 than the room actually available.)
4376 <function>PQputline</function>
4378 <primary>PQputline</primary>
4384 Sends a null-terminated string to the server. Returns 0 if
4385 OK and <symbol>EOF</symbol> if unable to send the string.
4387 int PQputline(PGconn *conn,
4388 const char *string);
4393 The <command>COPY</command> data stream sent by a series of calls
4394 to <function>PQputline</function> has the same format as that
4395 returned by <function>PQgetlineAsync</function>, except that
4396 applications are not obliged to send exactly one data row per
4397 <function>PQputline</function> call; it is okay to send a partial
4398 line or multiple lines per call.
4403 Before <productname>PostgreSQL</productname> protocol 3.0, it was necessary
4404 for the application to explicitly send the two characters
4405 <literal>\.</literal> as a final line to indicate to the server that it had
4406 finished sending <command>COPY</> data. While this still works, it is deprecated and the
4407 special meaning of <literal>\.</literal> can be expected to be removed in a
4408 future release. It is sufficient to call <function>PQendcopy</function> after
4409 having sent the actual data.
4417 <function>PQputnbytes</function>
4419 <primary>PQputnbytes</primary>
4425 Sends a non-null-terminated string to the server. Returns
4426 0 if OK and <symbol>EOF</symbol> if unable to send the string.
4428 int PQputnbytes(PGconn *conn,
4435 This is exactly like <function>PQputline</function>, except that the data
4436 buffer need not be null-terminated since the number of bytes to send is
4437 specified directly. Use this procedure when sending binary data.
4444 <function>PQendcopy</function>
4446 <primary>PQendcopy</primary>
4452 Synchronizes with the server.
4454 int PQendcopy(PGconn *conn);
4456 This function waits until the server has finished the copying.
4457 It should either be issued when the last string has been sent
4458 to the server using <function>PQputline</function> or when the
4459 last string has been received from the server using
4460 <function>PGgetline</function>. It must be issued or the server
4461 will get <quote>out of sync</quote> with the client. Upon return
4462 from this function, the server is ready to receive the next SQL
4463 command. The return value is 0 on successful completion,
4464 nonzero otherwise. (Use <function>PQerrorMessage</function> to
4465 retrieve details if the return value is nonzero.)
4469 When using <function>PQgetResult</function>, the application should
4470 respond to a <literal>PGRES_COPY_OUT</literal> result by executing
4471 <function>PQgetline</function> repeatedly, followed by
4472 <function>PQendcopy</function> after the terminator line is seen.
4473 It should then return to the <function>PQgetResult</function> loop
4474 until <function>PQgetResult</function> returns a null pointer.
4475 Similarly a <literal>PGRES_COPY_IN</literal> result is processed
4476 by a series of <function>PQputline</function> calls followed by
4477 <function>PQendcopy</function>, then return to the
4478 <function>PQgetResult</function> loop. This arrangement will
4479 ensure that a <command>COPY</command> command embedded in a series
4480 of <acronym>SQL</acronym> commands will be executed correctly.
4484 Older applications are likely to submit a <command>COPY</command>
4485 via <function>PQexec</function> and assume that the transaction
4486 is done after <function>PQendcopy</function>. This will work
4487 correctly only if the <command>COPY</command> is the only
4488 <acronym>SQL</acronym> command in the command string.
4498 <sect1 id="libpq-control">
4499 <title>Control Functions</title>
4502 These functions control miscellaneous details of <application>libpq</>'s
4509 <function>PQclientEncoding</function>
4511 <primary>PQclientEncoding</primary>
4517 Returns the client encoding.
4519 int PQclientEncoding(const PGconn *<replaceable>conn</replaceable>);
4522 Note that it returns the encoding ID, not a symbolic string
4523 such as <literal>EUC_JP</literal>. To convert an encoding ID to an encoding name, you
4527 char *pg_encoding_to_char(int <replaceable>encoding_id</replaceable>);
4535 <function>PQsetClientEncoding</function>
4537 <primary>PQsetClientEncoding</primary>
4543 Sets the client encoding.
4545 int PQsetClientEncoding(PGconn *<replaceable>conn</replaceable>, const char *<replaceable>encoding</replaceable>);
4548 <replaceable>conn</replaceable> is a connection to the server,
4549 and <replaceable>encoding</replaceable> is the encoding you want to
4550 use. If the function successfully sets the encoding, it returns 0,
4551 otherwise -1. The current encoding for this connection can be
4552 determined by using <function>PQclientEncoding</>.
4559 <function>PQsetErrorVerbosity</function>
4561 <primary>PQsetErrorVerbosity</primary>
4567 Determines the verbosity of messages returned by
4568 <function>PQerrorMessage</> and <function>PQresultErrorMessage</>.
4576 PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);
4579 <function>PQsetErrorVerbosity</> sets the verbosity mode, returning
4580 the connection's previous setting. In <firstterm>TERSE</> mode,
4581 returned messages include severity, primary text, and position only;
4582 this will normally fit on a single line. The default mode produces
4583 messages that include the above plus any detail, hint, or context
4584 fields (these might span multiple lines). The <firstterm>VERBOSE</>
4585 mode includes all available fields. Changing the verbosity does not
4586 affect the messages available from already-existing
4587 <structname>PGresult</> objects, only subsequently-created ones.
4594 <function>PQtrace</function>
4596 <primary>PQtrace</primary>
4602 Enables tracing of the client/server communication to a debugging file stream.
4604 void PQtrace(PGconn *conn, FILE *stream);
4610 On Windows, if the <application>libpq</> library and an application are
4611 compiled with different flags, this function call will crash the
4612 application because the internal representation of the <literal>FILE</>
4613 pointers differ. Specifically, multithreaded/single-threaded,
4614 release/debug, and static/dynamic flags should be the same for the
4615 library and all applications using that library.
4624 <function>PQuntrace</function>
4626 <primary>PQuntrace</primary>
4632 Disables tracing started by <function>PQtrace</function>.
4634 void PQuntrace(PGconn *conn);
4643 <sect1 id="libpq-misc">
4644 <title>Miscellaneous Functions</title>
4647 As always, there are some functions that just don't fit anywhere.
4653 <function>PQfreemem</function>
4655 <primary>PQfreemem</primary>
4661 Frees memory allocated by <application>libpq</>.
4663 void PQfreemem(void *ptr);
4668 Frees memory allocated by <application>libpq</>, particularly
4669 <function>PQescapeByteaConn</function>,
4670 <function>PQescapeBytea</function>,
4671 <function>PQunescapeBytea</function>,
4672 and <function>PQnotifies</function>.
4673 It is particularly important that this function, rather than
4674 <function>free()</>, be used on Microsoft Windows. This is because
4675 allocating memory in a DLL and releasing it in the application works
4676 only if multithreaded/single-threaded, release/debug, and static/dynamic
4677 flags are the same for the DLL and the application. On non-Microsoft
4678 Windows platforms, this function is the same as the standard library
4679 function <function>free()</>.
4686 <function>PQconninfoFree</function>
4688 <primary>PQconninfoFree</primary>
4694 Frees the data structures allocated by
4695 <function>PQconndefaults</> or <function>PQconninfoParse</>.
4697 void PQconninfoFree(PQconninfoOption *connOptions);
4702 A simple <function>PQfreemem</function> will not do for this, since
4703 the array contains references to subsidiary strings.
4710 <function>PQencryptPassword</function>
4712 <primary>PQencryptPassword</primary>
4718 Prepares the encrypted form of a <productname>PostgreSQL</> password.
4720 char * PQencryptPassword(const char *passwd, const char *user);
4722 This function is intended to be used by client applications that
4723 wish to send commands like <literal>ALTER USER joe PASSWORD
4724 'pwd'</>. It is good practice not to send the original cleartext
4725 password in such a command, because it might be exposed in command
4726 logs, activity displays, and so on. Instead, use this function to
4727 convert the password to encrypted form before it is sent. The
4728 arguments are the cleartext password, and the SQL name of the user
4729 it is for. The return value is a string allocated by
4730 <function>malloc</function>, or <symbol>NULL</symbol> if out of
4731 memory. The caller can assume the string doesn't contain any
4732 special characters that would require escaping. Use
4733 <function>PQfreemem</> to free the result when done with it.
4740 <function>PQmakeEmptyPGresult</function>
4742 <primary>PQmakeEmptyPGresult</primary>
4748 Constructs an empty <structname>PGresult</structname> object with the given status.
4750 PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
4755 This is <application>libpq</>'s internal function to allocate and
4756 initialize an empty <structname>PGresult</structname> object. This
4757 function returns NULL if memory could not be allocated. It is
4758 exported because some applications find it useful to generate result
4759 objects (particularly objects with error status) themselves. If
4760 <parameter>conn</parameter> is not null and <parameter>status</>
4761 indicates an error, the current error message of the specified
4762 connection is copied into the <structname>PGresult</structname>.
4763 Also, if <parameter>conn</parameter> is not null, any event procedures
4764 registered in the connection are copied into the
4765 <structname>PGresult</structname>. (They do not get
4766 <literal>PGEVT_RESULTCREATE</> calls, but see
4767 <function>PQfireResultCreateEvents</function>.)
4768 Note that <function>PQclear</function> should eventually be called
4769 on the object, just as with a <structname>PGresult</structname>
4770 returned by <application>libpq</application> itself.
4777 <function>PQfireResultCreateEvents</function>
4779 <primary>PQfireResultCreateEvents</primary>
4784 Fires a <literal>PGEVT_RESULTCREATE</literal> event (see <xref
4785 linkend="libpq-events">) for each event procedure registered in the
4786 <structname>PGresult</structname> object. Returns non-zero for success,
4787 zero if any event procedure fails.
4790 int PQfireResultCreateEvents(PGconn *conn, PGresult *res);
4795 The <literal>conn</> argument is passed through to event procedures
4796 but not used directly. It can be <literal>NULL</> if the event
4797 procedures won't use it.
4801 Event procedures that have already received a
4802 <literal>PGEVT_RESULTCREATE</> or <literal>PGEVT_RESULTCOPY</> event
4803 for this object are not fired again.
4807 The main reason that this function is separate from
4808 <function>PQmakeEmptyPGResult</function> is that it is often appropriate
4809 to create a <structname>PGresult</structname> and fill it with data
4810 before invoking the event procedures.
4817 <function>PQcopyResult</function>
4819 <primary>PQcopyResult</primary>
4825 Makes a copy of a <structname>PGresult</structname> object. The copy is
4826 not linked to the source result in any way and
4827 <function>PQclear</function> must be called when the copy is no longer
4828 needed. If the function fails, NULL is returned.
4831 PGresult *PQcopyResult(const PGresult *src, int flags);
4836 This is not intended to make an exact copy. The returned result is
4837 always put into <literal>PGRES_TUPLES_OK</literal> status, and does not
4838 copy any error message in the source. (It does copy the command status
4839 string, however.) The <parameter>flags</parameter> argument determines
4840 what else is copied. It is a bitwise OR of several flags.
4841 <literal>PG_COPYRES_ATTRS</literal> specifies copying the source
4842 result's attributes (column definitions).
4843 <literal>PG_COPYRES_TUPLES</literal> specifies copying the source
4844 result's tuples. (This implies copying the attributes, too.)
4845 <literal>PG_COPYRES_NOTICEHOOKS</literal> specifies
4846 copying the source result's notify hooks.
4847 <literal>PG_COPYRES_EVENTS</literal> specifies copying the source
4848 result's events. (But any instance data associated with the source
4856 <function>PQsetResultAttrs</function>
4858 <primary>PQsetResultAttrs</primary>
4864 Sets the attributes of a <structname>PGresult</structname> object.
4866 int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs);
4871 The provided <parameter>attDescs</parameter> are copied into the result.
4872 If the <parameter>attDescs</parameter> pointer is NULL or
4873 <parameter>numAttributes</parameter> is less than one, the request is
4874 ignored and the function succeeds. If <parameter>res</parameter>
4875 already contains attributes, the function will fail. If the function
4876 fails, the return value is zero. If the function succeeds, the return
4884 <function>PQsetvalue</function>
4886 <primary>PQsetvalue</primary>
4892 Sets a tuple field value of a <structname>PGresult</structname> object.
4894 int PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len);
4899 The function will automatically grow the result's internal tuples array
4900 as needed. However, the <parameter>tup_num</parameter> argument must be
4901 less than or equal to <function>PQntuples</function>, meaning this
4902 function can only grow the tuples array one tuple at a time. But any
4903 field of any existing tuple can be modified in any order. If a value at
4904 <parameter>field_num</parameter> already exists, it will be overwritten.
4905 If <parameter>len</parameter> is <literal>-1</literal> or
4906 <parameter>value</parameter> is <literal>NULL</literal>, the field value
4907 will be set to an SQL <literal>NULL</literal>. The
4908 <parameter>value</parameter> is copied into the result's private storage,
4909 thus is no longer needed after the function
4910 returns. If the function fails, the return value is zero. If the
4911 function succeeds, the return value is non-zero.
4918 <function>PQresultAlloc</function>
4920 <primary>PQresultAlloc</primary>
4926 Allocate subsidiary storage for a <structname>PGresult</structname> object.
4928 void *PQresultAlloc(PGresult *res, size_t nBytes);
4933 Any memory allocated with this function will be freed when
4934 <parameter>res</parameter> is cleared. If the function fails,
4935 the return value is <literal>NULL</literal>. The result is
4936 guaranteed to be adequately aligned for any type of data,
4937 just as for <function>malloc</>.
4946 <sect1 id="libpq-notice-processing">
4947 <title>Notice Processing</title>
4949 <indexterm zone="libpq-notice-processing">
4950 <primary>notice processing</primary>
4951 <secondary>in libpq</secondary>
4955 Notice and warning messages generated by the server are not returned
4956 by the query execution functions, since they do not imply failure of
4957 the query. Instead they are passed to a notice handling function, and
4958 execution continues normally after the handler returns. The default
4959 notice handling function prints the message on
4960 <filename>stderr</filename>, but the application can override this
4961 behavior by supplying its own handling function.
4965 For historical reasons, there are two levels of notice handling, called
4966 the notice receiver and notice processor. The default behavior is for
4967 the notice receiver to format the notice and pass a string to the notice
4968 processor for printing. However, an application that chooses to provide
4969 its own notice receiver will typically ignore the notice processor
4970 layer and just do all the work in the notice receiver.
4974 The function <function>PQsetNoticeReceiver</function>
4975 <indexterm><primary>notice
4976 receiver</></><indexterm><primary>PQsetNoticeReceiver</></> sets or
4977 examines the current notice receiver for a connection object.
4978 Similarly, <function>PQsetNoticeProcessor</function>
4979 <indexterm><primary>notice
4980 processor</></><indexterm><primary>PQsetNoticeProcessor</></> sets or
4981 examines the current notice processor.
4984 typedef void (*PQnoticeReceiver) (void *arg, const PGresult *res);
4987 PQsetNoticeReceiver(PGconn *conn,
4988 PQnoticeReceiver proc,
4991 typedef void (*PQnoticeProcessor) (void *arg, const char *message);
4994 PQsetNoticeProcessor(PGconn *conn,
4995 PQnoticeProcessor proc,
4999 Each of these functions returns the previous notice receiver or
5000 processor function pointer, and sets the new value. If you supply a
5001 null function pointer, no action is taken, but the current pointer is
5006 When a notice or warning message is received from the server, or
5007 generated internally by <application>libpq</application>, the notice
5008 receiver function is called. It is passed the message in the form of
5009 a <symbol>PGRES_NONFATAL_ERROR</symbol>
5010 <structname>PGresult</structname>. (This allows the receiver to extract
5011 individual fields using <function>PQresultErrorField</>, or the complete
5012 preformatted message using <function>PQresultErrorMessage</>.) The same
5013 void pointer passed to <function>PQsetNoticeReceiver</function> is also
5014 passed. (This pointer can be used to access application-specific state
5019 The default notice receiver simply extracts the message (using
5020 <function>PQresultErrorMessage</>) and passes it to the notice
5025 The notice processor is responsible for handling a notice or warning
5026 message given in text form. It is passed the string text of the message
5027 (including a trailing newline), plus a void pointer that is the same
5028 one passed to <function>PQsetNoticeProcessor</function>. (This pointer
5029 can be used to access application-specific state if needed.)
5033 The default notice processor is simply:
5036 defaultNoticeProcessor(void *arg, const char *message)
5038 fprintf(stderr, "%s", message);
5044 Once you have set a notice receiver or processor, you should expect
5045 that that function could be called as long as either the
5046 <structname>PGconn</> object or <structname>PGresult</> objects made
5047 from it exist. At creation of a <structname>PGresult</>, the
5048 <structname>PGconn</>'s current notice handling pointers are copied
5049 into the <structname>PGresult</> for possible use by functions like
5050 <function>PQgetvalue</function>.
5055 <sect1 id="libpq-events">
5056 <title>Event System</title>
5059 <application>libpq</application>'s event system is designed to notify
5060 registered event handlers about interesting
5061 <application>libpq</application> events, such as the creation or
5062 destruction of <structname>PGconn</structname> and
5063 <structname>PGresult</structname> objects. A principal use case is that
5064 this allows applications to associate their own data with a
5065 <structname>PGconn</structname> or <structname>PGresult</structname>
5066 and ensure that that data is freed at an appropriate time.
5070 Each registered event handler is associated with two pieces of data,
5071 known to <application>libpq</application> only as opaque <literal>void *</>
5072 pointers. There is a <firstterm>passthrough</> pointer that is provided
5073 by the application when the event handler is registered with a
5074 <structname>PGconn</>. The passthrough pointer never changes for the
5075 life of the <structname>PGconn</> and all <structname>PGresult</>s
5076 generated from it; so if used, it must point to long-lived data.
5077 In addition there is an <firstterm>instance data</> pointer, which starts
5078 out NULL in every <structname>PGconn</> and <structname>PGresult</>.
5079 This pointer can be manipulated using the
5080 <function>PQinstanceData</function>,
5081 <function>PQsetInstanceData</function>,
5082 <function>PQresultInstanceData</function> and
5083 <function>PQsetResultInstanceData</function> functions. Note that
5084 unlike the passthrough pointer, instance data of a <structname>PGconn</>
5085 is not automatically inherited by <structname>PGresult</>s created from
5086 it. <application>libpq</application> does not know what passthrough
5087 and instance data pointers point to (if anything) and will never attempt
5088 to free them — that is the responsibility of the event handler.
5091 <sect2 id="libpq-events-types">
5092 <title>Event Types</title>
5095 The enum <literal>PGEventId</> names the types of events handled by
5096 the event system. All its values have names beginning with
5097 <literal>PGEVT</literal>. For each event type, there is a corresponding
5098 event info structure that carries the parameters passed to the event
5099 handlers. The event types are:
5104 <term><literal>PGEVT_REGISTER</literal></term>
5107 The register event occurs when <function>PQregisterEventProc</function>
5108 is called. It is the ideal time to initialize any
5109 <literal>instanceData</literal> an event procedure may need. Only one
5110 register event will be fired per event handler per connection. If the
5111 event procedure fails, the registration is aborted.
5120 When a <literal>PGEVT_REGISTER</literal> event is received, the
5121 <parameter>evtInfo</parameter> pointer should be cast to a
5122 <structname>PGEventRegister *</structname>. This structure contains a
5123 <structname>PGconn</structname> that should be in the
5124 <literal>CONNECTION_OK</literal> status; guaranteed if one calls
5125 <function>PQregisterEventProc</function> right after obtaining a good
5126 <structname>PGconn</structname>. When returning a failure code, all
5127 cleanup must be performed as no <literal>PGEVT_CONNDESTROY</literal>
5134 <term><literal>PGEVT_CONNRESET</literal></term>
5137 The connection reset event is fired on completion of
5138 <function>PQreset</function> or <function>PQresetPoll</function>. In
5139 both cases, the event is only fired if the reset was successful. If
5140 the event procedure fails, the entire connection reset will fail; the
5141 <structname>PGconn</structname> is put into
5142 <literal>CONNECTION_BAD</literal> status and
5143 <function>PQresetPoll</function> will return
5144 <literal>PGRES_POLLING_FAILED</literal>.
5153 When a <literal>PGEVT_CONNRESET</literal> event is received, the
5154 <parameter>evtInfo</parameter> pointer should be cast to a
5155 <structname>PGEventConnReset *</structname>. Although the contained
5156 <structname>PGconn</structname> was just reset, all event data remains
5157 unchanged. This event should be used to reset/reload/requery any
5158 associated <literal>instanceData</literal>. Note that even if the
5159 event procedure fails to process <literal>PGEVT_CONNRESET</>, it will
5160 still receive a <literal>PGEVT_CONNDESTROY</> event when the connection
5167 <term><literal>PGEVT_CONNDESTROY</literal></term>
5170 The connection destroy event is fired in response to
5171 <function>PQfinish</function>. It is the event procedure's
5172 responsibility to properly clean up its event data as libpq has no
5173 ability to manage this memory. Failure to clean up will lead
5180 } PGEventConnDestroy;
5183 When a <literal>PGEVT_CONNDESTROY</literal> event is received, the
5184 <parameter>evtInfo</parameter> pointer should be cast to a
5185 <structname>PGEventConnDestroy *</structname>. This event is fired
5186 prior to <function>PQfinish</function> performing any other cleanup.
5187 The return value of the event procedure is ignored since there is no
5188 way of indicating a failure from <function>PQfinish</function>. Also,
5189 an event procedure failure should not abort the process of cleaning up
5196 <term><literal>PGEVT_RESULTCREATE</literal></term>
5199 The result creation event is fired in response to any query execution
5200 function that generates a result, including
5201 <function>PQgetResult</function>. This event will only be fired after
5202 the result has been created successfully.
5209 } PGEventResultCreate;
5212 When a <literal>PGEVT_RESULTCREATE</literal> event is received, the
5213 <parameter>evtInfo</parameter> pointer should be cast to a
5214 <structname>PGEventResultCreate *</structname>. The
5215 <parameter>conn</parameter> is the connection used to generate the
5216 result. This is the ideal place to initialize any
5217 <literal>instanceData</literal> that needs to be associated with the
5218 result. If the event procedure fails, the result will be cleared and
5219 the failure will be propagated. The event procedure must not try to
5220 <function>PQclear</> the result object for itself. When returning a
5221 failure code, all cleanup must be performed as no
5222 <literal>PGEVT_RESULTDESTROY</literal> event will be sent.
5228 <term><literal>PGEVT_RESULTCOPY</literal></term>
5231 The result copy event is fired in response to
5232 <function>PQcopyResult</function>. This event will only be fired after
5233 the copy is complete. Only event procedures that have
5234 successfully handled the <literal>PGEVT_RESULTCREATE</literal>
5235 or <literal>PGEVT_RESULTCOPY</literal> event for the source result
5236 will receive <literal>PGEVT_RESULTCOPY</literal> events.
5241 const PGresult *src;
5243 } PGEventResultCopy;
5246 When a <literal>PGEVT_RESULTCOPY</literal> event is received, the
5247 <parameter>evtInfo</parameter> pointer should be cast to a
5248 <structname>PGEventResultCopy *</structname>. The
5249 <parameter>src</parameter> result is what was copied while the
5250 <parameter>dest</parameter> result is the copy destination. This event
5251 can be used to provide a deep copy of <literal>instanceData</literal>,
5252 since <literal>PQcopyResult</literal> cannot do that. If the event
5253 procedure fails, the entire copy operation will fail and the
5254 <parameter>dest</parameter> result will be cleared. When returning a
5255 failure code, all cleanup must be performed as no
5256 <literal>PGEVT_RESULTDESTROY</literal> event will be sent for the
5263 <term><literal>PGEVT_RESULTDESTROY</literal></term>
5266 The result destroy event is fired in response to a
5267 <function>PQclear</function>. It is the event procedure's
5268 responsibility to properly clean up its event data as libpq has no
5269 ability to manage this memory. Failure to clean up will lead
5276 } PGEventResultDestroy;
5279 When a <literal>PGEVT_RESULTDESTROY</literal> event is received, the
5280 <parameter>evtInfo</parameter> pointer should be cast to a
5281 <structname>PGEventResultDestroy *</structname>. This event is fired
5282 prior to <function>PQclear</function> performing any other cleanup.
5283 The return value of the event procedure is ignored since there is no
5284 way of indicating a failure from <function>PQclear</function>. Also,
5285 an event procedure failure should not abort the process of cleaning up
5293 <sect2 id="libpq-events-proc">
5294 <title>Event Callback Procedure</title>
5299 <literal>PGEventProc</literal>
5301 <primary>PGEventProc</primary>
5307 <literal>PGEventProc</literal> is a typedef for a pointer to an
5308 event procedure, that is, the user callback function that receives
5309 events from libpq. The signature of an event procedure must be
5312 int eventproc(PGEventId evtId, void *evtInfo, void *passThrough)
5315 The <parameter>evtId</parameter> parameter indicates which
5316 <literal>PGEVT</literal> event occurred. The
5317 <parameter>evtInfo</parameter> pointer must be cast to the appropriate
5318 structure type to obtain further information about the event.
5319 The <parameter>passThrough</parameter> parameter is the pointer
5320 provided to <function>PQregisterEventProc</function> when the event
5321 procedure was registered. The function should return a non-zero value
5322 if it succeeds and zero if it fails.
5326 A particular event procedure can be registered only once in any
5327 <structname>PGconn</>. This is because the address of the procedure
5328 is used as a lookup key to identify the associated instance data.
5333 On Windows, functions can have two different addresses: one visible
5334 from outside a DLL and another visible from inside the DLL. One
5335 should be careful that only one of these addresses is used with
5336 <application>libpq</>'s event-procedure functions, else confusion will
5337 result. The simplest rule for writing code that will work is to
5338 ensure that event procedures are declared <literal>static</>. If the
5339 procedure's address must be available outside its own source file,
5340 expose a separate function to return the address.
5348 <sect2 id="libpq-events-funcs">
5349 <title>Event Support Functions</title>
5354 <function>PQregisterEventProc</function>
5356 <primary>PQregisterEventProc</primary>
5362 Registers an event callback procedure with libpq.
5365 int PQregisterEventProc(PGconn *conn, PGEventProc proc,
5366 const char *name, void *passThrough);
5371 An event procedure must be registered once on each
5372 <structname>PGconn</> you want to receive events about. There is no
5373 limit, other than memory, on the number of event procedures that
5374 can be registered with a connection. The function returns a non-zero
5375 value if it succeeds and zero if it fails.
5379 The <parameter>proc</parameter> argument will be called when a libpq
5380 event is fired. Its memory address is also used to lookup
5381 <literal>instanceData</literal>. The <parameter>name</parameter>
5382 argument is used to refer to the event procedure in error messages.
5383 This value cannot be NULL or a zero-length string. The name string is
5384 copied into the <structname>PGconn</>, so what is passed need not be
5385 long-lived. The <parameter>passThrough</parameter> pointer is passed
5386 to the <parameter>proc</parameter> whenever an event occurs. This
5387 argument can be NULL.
5394 <function>PQsetInstanceData</function>
5396 <primary>PQsetInstanceData</primary>
5401 Sets the conn's instanceData for proc to data. This returns non-zero
5402 for success and zero for failure. (Failure is only possible if
5403 the proc has not been properly registered in the conn.)
5406 int PQsetInstanceData(PGconn *conn, PGEventProc proc, void *data);
5414 <function>PQinstanceData</function>
5416 <primary>PQinstanceData</primary>
5421 Returns the conn's instanceData associated with proc, or NULL
5425 void *PQinstanceData(const PGconn *conn, PGEventProc proc);
5433 <function>PQresultSetInstanceData</function>
5435 <primary>PQresultSetInstanceData</primary>
5440 Sets the result's instanceData for proc to data. This returns non-zero
5441 for success and zero for failure. (Failure is only possible if the
5442 proc has not been properly registered in the result.)
5445 int PQresultSetInstanceData(PGresult *res, PGEventProc proc, void *data);
5453 <function>PQresultInstanceData</function>
5455 <primary>PQresultInstanceData</primary>
5460 Returns the result's instanceData associated with proc, or NULL
5464 void *PQresultInstanceData(const PGresult *res, PGEventProc proc);
5472 <sect2 id="libpq-events-example">
5473 <title>Event Example</title>
5476 Here is a skeleton example of managing private data associated with
5477 libpq connections and results.
5482 /* required header for libpq events (note: includes libpq-fe.h) */
5483 #include <libpq-events.h>
5485 /* The instanceData */
5493 static int myEventProc(PGEventId evtId, void *evtInfo, void *passThrough);
5500 PGconn *conn = PQconnectdb("dbname = postgres");
5502 if (PQstatus(conn) != CONNECTION_OK)
5504 fprintf(stderr, "Connection to database failed: %s",
5505 PQerrorMessage(conn));
5510 /* called once on any connection that should receive events.
5511 * Sends a PGEVT_REGISTER to myEventProc.
5513 if (!PQregisterEventProc(conn, myEventProc, "mydata_proc", NULL))
5515 fprintf(stderr, "Cannot register PGEventProc\n");
5520 /* conn instanceData is available */
5521 data = PQinstanceData(conn, myEventProc);
5523 /* Sends a PGEVT_RESULTCREATE to myEventProc */
5524 res = PQexec(conn, "SELECT 1 + 1");
5526 /* result instanceData is available */
5527 data = PQresultInstanceData(res, myEventProc);
5529 /* If PG_COPYRES_EVENTS is used, sends a PGEVT_RESULTCOPY to myEventProc */
5530 res_copy = PQcopyResult(res, PG_COPYRES_TUPLES | PG_COPYRES_EVENTS);
5532 /* result instanceData is available if PG_COPYRES_EVENTS was
5533 * used during the PQcopyResult call.
5535 data = PQresultInstanceData(res_copy, myEventProc);
5537 /* Both clears send a PGEVT_RESULTDESTROY to myEventProc */
5541 /* Sends a PGEVT_CONNDESTROY to myEventProc */
5548 myEventProc(PGEventId evtId, void *evtInfo, void *passThrough)
5552 case PGEVT_REGISTER:
5554 PGEventRegister *e = (PGEventRegister *)evtInfo;
5555 mydata *data = get_mydata(e->conn);
5557 /* associate app specific data with connection */
5558 PQsetInstanceData(e->conn, myEventProc, data);
5562 case PGEVT_CONNRESET:
5564 PGEventConnReset *e = (PGEventConnReset *)evtInfo;
5565 mydata *data = PQinstanceData(e->conn, myEventProc);
5568 memset(data, 0, sizeof(mydata));
5572 case PGEVT_CONNDESTROY:
5574 PGEventConnDestroy *e = (PGEventConnDestroy *)evtInfo;
5575 mydata *data = PQinstanceData(e->conn, myEventProc);
5577 /* free instance data because the conn is being destroyed */
5583 case PGEVT_RESULTCREATE:
5585 PGEventResultCreate *e = (PGEventResultCreate *)evtInfo;
5586 mydata *conn_data = PQinstanceData(e->conn, myEventProc);
5587 mydata *res_data = dup_mydata(conn_data);
5589 /* associate app specific data with result (copy it from conn) */
5590 PQsetResultInstanceData(e->result, myEventProc, res_data);
5594 case PGEVT_RESULTCOPY:
5596 PGEventResultCopy *e = (PGEventResultCopy *)evtInfo;
5597 mydata *src_data = PQresultInstanceData(e->src, myEventProc);
5598 mydata *dest_data = dup_mydata(src_data);
5600 /* associate app specific data with result (copy it from a result) */
5601 PQsetResultInstanceData(e->dest, myEventProc, dest_data);
5605 case PGEVT_RESULTDESTROY:
5607 PGEventResultDestroy *e = (PGEventResultDestroy *)evtInfo;
5608 mydata *data = PQresultInstanceData(e->result, myEventProc);
5610 /* free instance data because the result is being destroyed */
5616 /* unknown event id, just return TRUE. */
5621 return TRUE; /* event processing succeeded */
5628 <sect1 id="libpq-envars">
5629 <title>Environment Variables</title>
5631 <indexterm zone="libpq-envars">
5632 <primary>environment variable</primary>
5636 The following environment variables can be used to select default
5637 connection parameter values, which will be used by
5638 <function>PQconnectdb</>, <function>PQsetdbLogin</> and
5639 <function>PQsetdb</> if no value is directly specified by the calling
5640 code. These are useful to avoid hard-coding database connection
5641 information into simple client applications, for example.
5647 <primary><envar>PGHOST</envar></primary>
5649 <envar>PGHOST</envar> behaves the same as <xref
5650 linkend="libpq-connect-host"> connection parameter.
5657 <primary><envar>PGHOSTADDR</envar></primary>
5659 <envar>PGHOSTADDR</envar> behaves the same as <xref
5660 linkend="libpq-connect-hostaddr"> connection parameter.
5661 This can be set instead of or in addition to <envar>PGHOST</envar>
5662 to avoid DNS lookup overhead.
5669 <primary><envar>PGPORT</envar></primary>
5671 <envar>PGPORT</envar> behaves the same as <xref
5672 linkend="libpq-connect-port"> connection parameter.
5679 <primary><envar>PGDATABASE</envar></primary>
5681 <envar>PGDATABASE</envar> behaves the same as <xref
5682 linkend="libpq-connect-dbname"> connection parameter.
5689 <primary><envar>PGUSER</envar></primary>
5691 <envar>PGUSER</envar> behaves the same as <xref
5692 linkend="libpq-connect-user"> connection parameter.
5700 <primary><envar>PGPASSWORD</envar></primary>
5702 <envar>PGPASSWORD</envar> behaves the same as <xref
5703 linkend="libpq-connect-password"> connection parameter.
5704 Use of this environment variable
5705 is not recommended for security reasons (some operating systems
5706 allow non-root users to see process environment variables via
5707 <application>ps</>); instead consider using the
5708 <filename>~/.pgpass</> file (see <xref linkend="libpq-pgpass">).
5715 <primary><envar>PGPASSFILE</envar></primary>
5717 <envar>PGPASSFILE</envar> specifies the name of the password file to
5718 use for lookups. If not set, it defaults to <filename>~/.pgpass</>
5719 (see <xref linkend="libpq-pgpass">).
5726 <primary><envar>PGSERVICE</envar></primary>
5728 <envar>PGSERVICE</envar> behaves the same as <xref
5729 linkend="libpq-connect-service"> connection parameter.
5736 <primary><envar>PGREALM</envar></primary>
5738 <envar>PGREALM</envar> sets the Kerberos realm to use with
5739 <productname>PostgreSQL</productname>, if it is different from the
5740 local realm. If <envar>PGREALM</envar> is set,
5741 <application>libpq</application> applications will attempt
5742 authentication with servers for this realm and use separate ticket
5743 files to avoid conflicts with local ticket files. This
5744 environment variable is only used if Kerberos authentication is
5745 selected by the server.
5752 <primary><envar>PGOPTIONS</envar></primary>
5754 <envar>PGOPTIONS</envar> behaves the same as <xref
5755 linkend="libpq-connect-options"> connection parameter.
5762 <primary><envar>PGSSLMODE</envar></primary>
5764 <envar>PGSSLMODE</envar> behaves the same as <xref
5765 linkend="libpq-connect-sslmode"> connection parameter.
5772 <primary><envar>PGSSLVERIFY</envar></primary>
5774 <envar>PGSSLVERIFY</envar> behaves the same as <xref
5775 linkend="libpq-connect-sslverify"> connection parameter.
5782 <primary><envar>PGREQUIRESSL</envar></primary>
5784 <envar>PGREQUIRESSL</envar> behaves the same as <xref
5785 linkend="libpq-connect-requiressl"> connection parameter.
5792 <primary><envar>PGSSLCERT</envar></primary>
5794 <envar>PGSSLCERT</envar> behaves the same as <xref
5795 linkend="libpq-connect-sslcert"> connection parameter.
5802 <primary><envar>PGSSLKEY</envar></primary>
5804 <envar>PGSSLKEY</envar> behaves the same as <xref
5805 linkend="libpq-connect-sslkey"> connection parameter.
5812 <primary><envar>PGSSLROOTCERT</envar></primary>
5814 <envar>PGSSLROOTCERT</envar> behaves the same as <xref
5815 linkend="libpq-connect-sslrootcert"> connection parameter.
5822 <primary><envar>PGSSLCRL</envar></primary>
5824 <envar>PGSSLCRL</envar> behaves the same as <xref
5825 linkend="libpq-connect-sslcrl"> connection parameter.
5832 <primary><envar>PGKRBSRVNAME</envar></primary>
5834 <envar>PGKRBSRVNAME</envar> behaves the same as <xref
5835 linkend="libpq-connect-krbsrvname"> connection parameter.
5842 <primary><envar>PGGSSLIB</envar></primary>
5844 <envar>PGGSSLIB</envar> behaves the same as <xref
5845 linkend="libpq-connect-gsslib"> connection parameter.
5852 <primary><envar>PGCONNECT_TIMEOUT</envar></primary>
5854 <envar>PGCONNECT_TIMEOUT</envar> behaves the same as <xref
5855 linkend="libpq-connect-connect-timeout"> connection parameter.
5862 The following environment variables can be used to specify default
5863 behavior for each <productname>PostgreSQL</productname> session. (See
5864 also the <xref linkend="sql-alteruser" endterm="sql-alteruser-title">
5865 and <xref linkend="sql-alterdatabase" endterm="sql-alterdatabase-title">
5866 commands for ways to set default behavior on a per-user or per-database
5873 <primary><envar>PGDATESTYLE</envar></primary>
5875 <envar>PGDATESTYLE</envar> sets the default style of date/time
5876 representation. (Equivalent to <literal>SET datestyle TO
5884 <primary><envar>PGTZ</envar></primary>
5886 <envar>PGTZ</envar> sets the default time zone. (Equivalent to
5887 <literal>SET timezone TO ...</literal>.)
5894 <primary><envar>PGCLIENTENCODING</envar></primary>
5896 <envar>PGCLIENTENCODING</envar> sets the default client character
5897 set encoding. (Equivalent to <literal>SET client_encoding TO
5905 <primary><envar>PGGEQO</envar></primary>
5907 <envar>PGGEQO</envar> sets the default mode for the genetic query
5908 optimizer. (Equivalent to <literal>SET geqo TO ...</literal>.)
5913 Refer to the <acronym>SQL</acronym> command <xref linkend="sql-set"
5914 endterm="sql-set-title"> for information on correct values for these
5915 environment variables.
5919 The following environment variables determine internal behavior of
5920 <application>libpq</application>; they override compiled-in defaults.
5926 <primary><envar>PGSYSCONFDIR</envar></primary>
5928 <envar>PGSYSCONFDIR</envar> sets the directory containing the
5929 <filename>pg_service.conf</> file.
5936 <primary><envar>PGLOCALEDIR</envar></primary>
5938 <envar>PGLOCALEDIR</envar> sets the directory containing the
5939 <literal>locale</> files for message internationalization.
5948 <sect1 id="libpq-pgpass">
5949 <title>The Password File</title>
5951 <indexterm zone="libpq-pgpass">
5952 <primary>password file</primary>
5954 <indexterm zone="libpq-pgpass">
5955 <primary>.pgpass</primary>
5959 The file <filename>.pgpass</filename> in a user's home directory or the
5960 file referenced by <envar>PGPASSFILE</envar> can contain passwords to
5961 be used if the connection requires a password (and no password has been
5962 specified otherwise). On Microsoft Windows the file is named
5963 <filename>%APPDATA%\postgresql\pgpass.conf</> (where
5964 <filename>%APPDATA%</> refers to the Application Data subdirectory in
5965 the user's profile).
5969 This file should contain lines of the following format:
5971 <replaceable>hostname</replaceable>:<replaceable>port</replaceable>:<replaceable>database</replaceable>:<replaceable>username</replaceable>:<replaceable>password</replaceable>
5973 Each of the first four fields can be a literal value, or
5974 <literal>*</literal>, which matches anything. The password field from
5975 the first line that matches the current connection parameters will be
5976 used. (Therefore, put more-specific entries first when you are using
5977 wildcards.) If an entry needs to contain <literal>:</literal> or
5978 <literal>\</literal>, escape this character with <literal>\</literal>.
5979 A host name of <literal>localhost</> matches both TCP (host name
5980 <literal>localhost</>) and Unix domain socket (<literal>pghost</> empty
5981 or the default socket directory) connections coming from the local
5986 On Unix systems, the permissions on <filename>.pgpass</filename> must
5987 disallow any access to world or group; achieve this by the command
5988 <command>chmod 0600 ~/.pgpass</command>. If the permissions are less
5989 strict than this, the file will be ignored. On Microsoft Windows, it
5990 is assumed that the file is stored in a directory that is secure, so
5991 no special permissions check is made.
5996 <sect1 id="libpq-pgservice">
5997 <title>The Connection Service File</title>
5999 <indexterm zone="libpq-pgservice">
6000 <primary>connection service file</primary>
6002 <indexterm zone="libpq-pgservice">
6003 <primary>pg_service.conf</primary>
6007 The connection service file allows libpq connection parameters to be
6008 associated with a single service name. That service name can then be
6009 specified by a libpq connection, and the associated settings will be
6010 used. This allows connection parameters to be modified without requiring
6011 a recompile of the libpq application. The service name can also be
6012 specified using the <envar>PGSERVICE</envar> environment variable.
6016 To use this feature, copy
6017 <filename>share/pg_service.conf.sample</filename> to
6018 <filename>etc/pg_service.conf</filename> and edit the file to add
6019 service names and parameters. This file can be used for client-only
6020 installs too. The file's location can also be specified by the
6021 <envar>PGSYSCONFDIR</envar> environment variable.
6026 <sect1 id="libpq-ldap">
6027 <title>LDAP Lookup of Connection Parameters</title>
6029 <indexterm zone="libpq-ldap">
6030 <primary>LDAP connection parameter lookup</primary>
6034 If <application>libpq</application> has been compiled with LDAP support (option
6035 <literal><option>--with-ldap</option></literal> for <command>configure</command>)
6036 it is possible to retrieve connection options like <literal>host</literal>
6037 or <literal>dbname</literal> via LDAP from a central server.
6038 The advantage is that if the connection parameters for a database change,
6039 the connection information doesn't have to be updated on all client machines.
6043 LDAP connection parameter lookup uses the connection service file
6044 <filename>pg_service.conf</filename> (see <xref
6045 linkend="libpq-pgservice">). A line in a
6046 <filename>pg_service.conf</filename> stanza that starts with
6047 <literal>ldap://</literal> will be recognized as an LDAP URL and an
6048 LDAP query will be performed. The result must be a list of
6049 <literal>keyword = value</literal> pairs which will be used to set
6050 connection options. The URL must conform to RFC 1959 and be of the
6053 ldap://[<replaceable>hostname</replaceable>[:<replaceable>port</replaceable>]]/<replaceable>search_base</replaceable>?<replaceable>attribute</replaceable>?<replaceable>search_scope</replaceable>?<replaceable>filter</replaceable>
6055 where <replaceable>hostname</replaceable> defaults to
6056 <literal>localhost</literal> and <replaceable>port</replaceable>
6061 Processing of <filename>pg_service.conf</filename> is terminated after
6062 a successful LDAP lookup, but is continued if the LDAP server cannot
6063 be contacted. This is to provide a fallback with further LDAP URL
6064 lines that point to different LDAP servers, classical <literal>keyword
6065 = value</literal> pairs, or default connection options. If you would
6066 rather get an error message in this case, add a syntactically incorrect
6067 line after the LDAP URL.
6071 A sample LDAP entry that has been created with the LDIF file
6074 dn:cn=mydatabase,dc=mycompany,dc=com
6077 objectclass:groupOfUniqueNames
6079 uniqueMember:host=dbserver.mycompany.com
6080 uniqueMember:port=5439
6081 uniqueMember:dbname=mydb
6082 uniqueMember:user=mydb_user
6083 uniqueMember:sslmode=require
6085 might be queried with the following LDAP URL:
6087 ldap://ldap.mycompany.com/dc=mycompany,dc=com?uniqueMember?one?(cn=mydatabase)
6092 You can also mix regular service file entries with LDAP lookups.
6093 A complete example for a stanza in <filename>pg_service.conf</filename>
6096 # only host and port are stored in LDAP, specify dbname and user explicitly
6100 ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*)
6107 <sect1 id="libpq-ssl">
6108 <title>SSL Support</title>
6110 <indexterm zone="libpq-ssl">
6111 <primary>SSL</primary>
6115 <productname>PostgreSQL</> has native support for using <acronym>SSL</>
6116 connections to encrypt client/server communications for increased
6117 security. See <xref linkend="ssl-tcp"> for details about the server-side
6118 <acronym>SSL</> functionality.
6122 <application>libpq</application> reads the system-wide
6123 <productname>OpenSSL</productname> configuration file. By default, this
6124 file is named <filename>openssl.cnf</filename> and is located in the
6125 directory reported by <literal>openssl version -d</>. This default
6126 can be overridden by setting environment variable
6127 <envar>OPENSSL_CONF</envar> to the name of the desired configuration
6132 When the <literal>sslverify</> parameter is set to <literal>cn</> or
6133 <literal>cert</>, libpq will verify that the server certificate is
6134 trustworthy by checking the certificate chain up to a <acronym>CA</>.
6135 For this to work, place the certificate of a trusted <acronym>CA</>
6136 in the file <filename>~/.postgresql/root.crt</> in the user's home directory.
6137 (On Microsoft Windows the file is named
6138 <filename>%APPDATA%\postgresql\root.crt</filename>.)
6139 <application>libpq</application> will then verify that the server's
6140 certificate is signed by one of the trusted certificate authorities.
6141 The SSL connection will fail if the server does not present a trusted
6142 certificate. Certificate Revocation List (CRL) entries are also checked
6143 if the file <filename>~/.postgresql/root.crl</filename> exists
6144 (<filename>%APPDATA%\postgresql\root.crl</filename> on Microsoft
6146 The location of the root certificate store and the CRL can be overridden
6147 by the connection parameters <literal>sslrootcert</> and <literal>sslcrl</>
6148 or the environment variables <envar>PGSSLROOTCERT</> and <envar>PGSSLCRL</>.
6152 If the server requests a trusted client certificate,
6153 <application>libpq</application> will send the certificate stored in
6154 file <filename>~/.postgresql/postgresql.crt</> in the user's home
6155 directory. The certificate must be signed by one of the certificate
6156 authorities (<acronym>CA</acronym>) trusted by the server. A matching
6157 private key file <filename>~/.postgresql/postgresql.key</> must also
6158 be present. The private
6159 key file must not allow any access to world or group; achieve this by the
6160 command <command>chmod 0600 ~/.postgresql/postgresql.key</command>.
6161 On Microsoft Windows these files are named
6162 <filename>%APPDATA%\postgresql\postgresql.crt</filename> and
6163 <filename>%APPDATA%\postgresql\postgresql.key</filename>, and there
6164 is no special permissions check since the directory is presumed secure.
6165 The location of the certificate and key files can be overridden by the
6166 connection parameters <literal>sslcert</> and <literal>sslkey</> or the
6167 environment variables <envar>PGSSLCERT</> and <envar>PGSSLKEY</>.
6171 If you are using <acronym>SSL</> inside your application (in addition
6172 to inside <application>libpq</application>), you can use
6173 <function>PQinitSSL(int)</> to tell <application>libpq</application>
6174 that the <acronym>SSL</> library has already been initialized by your
6176 <!-- If this URL changes replace it with a URL to www.archive.org. -->
6178 url="http://h71000.www7.hp.com/doc/83final/BA554_90007/ch04.html"></ulink>
6179 for details on the SSL API.
6182 <table id="libpq-ssl-file-usage">
6183 <title>Libpq/Client SSL File Usage</title>
6188 <entry>Contents</entry>
6189 <entry>Effect</entry>
6196 <entry><filename>~/.postgresql/postgresql.crt</></entry>
6197 <entry>client certificate</entry>
6198 <entry>requested by server</entry>
6202 <entry><filename>~/.postgresql/postgresql.key</></entry>
6203 <entry>client private key</entry>
6204 <entry>proves client certificate sent by owner; does not indicate
6205 certificate owner is trustworthy</entry>
6209 <entry><filename>~/.postgresql/root.crt</></entry>
6210 <entry>trusted certificate authorities</entry>
6211 <entry>checks server certificate is signed by a trusted certificate
6216 <entry><filename>~/.postgresql/root.crl</></entry>
6217 <entry>certificates revoked by certificate authorities</entry>
6218 <entry>server certificate must not be on this list</entry>
6228 <sect1 id="libpq-threading">
6229 <title>Behavior in Threaded Programs</title>
6231 <indexterm zone="libpq-threading">
6232 <primary>threads</primary>
6233 <secondary>with libpq</secondary>
6237 <application>libpq</application> is reentrant and thread-safe if the
6238 <filename>configure</filename> command-line option
6239 <literal>--enable-thread-safety</> was used when the
6240 <productname>PostgreSQL</productname> distribution was built. In
6241 addition, you might need to use additional compiler command-line
6242 options when you compile your application code. Refer to your
6243 system's documentation for information about how to build
6244 thread-enabled applications, or look in
6245 <filename>src/Makefile.global</filename> for <literal>PTHREAD_CFLAGS</>
6246 and <literal>PTHREAD_LIBS</>. This function allows the querying of
6247 <application>libpq</application>'s thread-safe status:
6253 <function>PQisthreadsafe</function>
6255 <primary>PQisthreadsafe</primary>
6261 Returns the thread safety status of the
6262 <application>libpq</application> library.
6264 int PQisthreadsafe();
6269 Returns 1 if the <application>libpq</application> is thread-safe
6277 One thread restriction is that no two threads attempt to manipulate
6278 the same <structname>PGconn</> object at the same time. In particular,
6279 you cannot issue concurrent commands from different threads through
6280 the same connection object. (If you need to run concurrent commands,
6281 use multiple connections.)
6285 <structname>PGresult</> objects are read-only after creation, and so
6286 can be passed around freely between threads.
6290 The deprecated functions <function>PQrequestCancel</function> and
6291 <function>PQoidStatus</function> are not thread-safe and should not be
6292 used in multithread programs. <function>PQrequestCancel</function>
6293 can be replaced by <function>PQcancel</function>.
6294 <function>PQoidStatus</function> can be replaced by
6295 <function>PQoidValue</function>.
6299 If you are using Kerberos inside your application (in addition to inside
6300 <application>libpq</application>), you will need to do locking around
6301 Kerberos calls because Kerberos functions are not thread-safe. See
6302 function <function>PQregisterThreadLock</> in the
6303 <application>libpq</application> source code for a way to do cooperative
6304 locking between <application>libpq</application> and your application.
6308 If you experience problems with threaded applications, run the program
6309 in <filename>src/tools/thread</> to see if your platform has
6310 thread-unsafe functions. This program is run by
6311 <filename>configure</filename>, but for binary distributions your
6312 library might not match the library used to build the binaries.
6317 <sect1 id="libpq-build">
6318 <title>Building <application>libpq</application> Programs</title>
6320 <indexterm zone="libpq-build">
6321 <primary>compiling</primary>
6322 <secondary>libpq applications</secondary>
6326 To build (i.e., compile and link) a program using
6327 <application>libpq</application> you need to do all of the following
6333 Include the <filename>libpq-fe.h</filename> header file:
6335 #include <libpq-fe.h>
6337 If you failed to do that then you will normally get error messages
6338 from your compiler similar to
6340 foo.c: In function `main':
6341 foo.c:34: `PGconn' undeclared (first use in this function)
6342 foo.c:35: `PGresult' undeclared (first use in this function)
6343 foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
6344 foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
6345 foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)
6352 Point your compiler to the directory where the <productname>PostgreSQL</> header
6353 files were installed, by supplying the
6354 <literal>-I<replaceable>directory</replaceable></literal> option
6355 to your compiler. (In some cases the compiler will look into
6356 the directory in question by default, so you can omit this
6357 option.) For instance, your compile command line could look
6360 cc -c -I/usr/local/pgsql/include testprog.c
6362 If you are using makefiles then add the option to the
6363 <varname>CPPFLAGS</varname> variable:
6365 CPPFLAGS += -I/usr/local/pgsql/include
6370 If there is any chance that your program might be compiled by
6371 other users then you should not hardcode the directory location
6372 like that. Instead, you can run the utility
6373 <command>pg_config</command><indexterm><primary>pg_config</><secondary
6374 sortas="libpq">with libpq</></> to find out where the header
6375 files are on the local system:
6377 <prompt>$</prompt> pg_config --includedir
6378 <computeroutput>/usr/local/include</computeroutput>
6383 Failure to specify the correct option to the compiler will
6384 result in an error message such as
6386 testlibpq.c:8:22: libpq-fe.h: No such file or directory
6393 When linking the final program, specify the option
6394 <literal>-lpq</literal> so that the <application>libpq</application>
6395 library gets pulled in, as well as the option
6396 <literal>-L<replaceable>directory</replaceable></literal> to point
6397 the compiler to the directory where the
6398 <application>libpq</application> library resides. (Again, the
6399 compiler will search some directories by default.) For maximum
6400 portability, put the <option>-L</option> option before the
6401 <option>-lpq</option> option. For example:
6403 cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
6408 You can find out the library directory using
6409 <command>pg_config</command> as well:
6411 <prompt>$</prompt> pg_config --libdir
6412 <computeroutput>/usr/local/pgsql/lib</computeroutput>
6417 Error messages that point to problems in this area could look like
6420 testlibpq.o: In function `main':
6421 testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
6422 testlibpq.o(.text+0x71): undefined reference to `PQstatus'
6423 testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'
6425 This means you forgot <option>-lpq</option>.
6427 /usr/bin/ld: cannot find -lpq
6429 This means you forgot the <option>-L</option> option or did not
6430 specify the right directory.
6439 <sect1 id="libpq-example">
6440 <title>Example Programs</title>
6443 These examples and others can be found in the
6444 directory <filename>src/test/examples</filename> in the source code
6448 <example id="libpq-example-1">
6449 <title><application>libpq</application> Example Program 1</title>
6456 * Test the C version of libpq, the PostgreSQL frontend library.
6460 #include "libpq-fe.h"
6463 exit_nicely(PGconn *conn)
6470 main(int argc, char **argv)
6472 const char *conninfo;
6480 * If the user supplies a parameter on the command line, use it as the
6481 * conninfo string; otherwise default to setting dbname=postgres and using
6482 * environment variables or defaults for all other connection parameters.
6487 conninfo = "dbname = postgres";
6489 /* Make a connection to the database */
6490 conn = PQconnectdb(conninfo);
6492 /* Check to see that the backend connection was successfully made */
6493 if (PQstatus(conn) != CONNECTION_OK)
6495 fprintf(stderr, "Connection to database failed: %s",
6496 PQerrorMessage(conn));
6501 * Our test case here involves using a cursor, for which we must be inside
6502 * a transaction block. We could do the whole thing with a single
6503 * PQexec() of "select * from pg_database", but that's too trivial to make
6507 /* Start a transaction block */
6508 res = PQexec(conn, "BEGIN");
6509 if (PQresultStatus(res) != PGRES_COMMAND_OK)
6511 fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
6517 * Should PQclear PGresult whenever it is no longer needed to avoid memory
6523 * Fetch rows from pg_database, the system catalog of databases
6525 res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
6526 if (PQresultStatus(res) != PGRES_COMMAND_OK)
6528 fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
6534 res = PQexec(conn, "FETCH ALL in myportal");
6535 if (PQresultStatus(res) != PGRES_TUPLES_OK)
6537 fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
6542 /* first, print out the attribute names */
6543 nFields = PQnfields(res);
6544 for (i = 0; i < nFields; i++)
6545 printf("%-15s", PQfname(res, i));
6548 /* next, print out the rows */
6549 for (i = 0; i < PQntuples(res); i++)
6551 for (j = 0; j < nFields; j++)
6552 printf("%-15s", PQgetvalue(res, i, j));
6558 /* close the portal ... we don't bother to check for errors ... */
6559 res = PQexec(conn, "CLOSE myportal");
6562 /* end the transaction */
6563 res = PQexec(conn, "END");
6566 /* close the connection to the database and cleanup */
6575 <example id="libpq-example-2">
6576 <title><application>libpq</application> Example Program 2</title>
6582 * Test of the asynchronous notification interface
6584 * Start this program, then from psql in another window do
6586 * Repeat four times to get this program to exit.
6588 * Or, if you want to get fancy, try this:
6589 * populate a database with the following commands
6590 * (provided in src/test/examples/testlibpq2.sql):
6592 * CREATE TABLE TBL1 (i int4);
6594 * CREATE TABLE TBL2 (i int4);
6596 * CREATE RULE r1 AS ON INSERT TO TBL1 DO
6597 * (INSERT INTO TBL2 VALUES (new.i); NOTIFY TBL2);
6599 * and do this four times:
6601 * INSERT INTO TBL1 VALUES (10);
6607 #include <sys/time.h>
6608 #include "libpq-fe.h"
6611 exit_nicely(PGconn *conn)
6618 main(int argc, char **argv)
6620 const char *conninfo;
6627 * If the user supplies a parameter on the command line, use it as the
6628 * conninfo string; otherwise default to setting dbname=postgres and using
6629 * environment variables or defaults for all other connection parameters.
6634 conninfo = "dbname = postgres";
6636 /* Make a connection to the database */
6637 conn = PQconnectdb(conninfo);
6639 /* Check to see that the backend connection was successfully made */
6640 if (PQstatus(conn) != CONNECTION_OK)
6642 fprintf(stderr, "Connection to database failed: %s",
6643 PQerrorMessage(conn));
6648 * Issue LISTEN command to enable notifications from the rule's NOTIFY.
6650 res = PQexec(conn, "LISTEN TBL2");
6651 if (PQresultStatus(res) != PGRES_COMMAND_OK)
6653 fprintf(stderr, "LISTEN command failed: %s", PQerrorMessage(conn));
6659 * should PQclear PGresult whenever it is no longer needed to avoid memory
6664 /* Quit after four notifies are received. */
6666 while (nnotifies < 4)
6669 * Sleep until something happens on the connection. We use select(2)
6670 * to wait for input, but you could also use poll() or similar
6676 sock = PQsocket(conn);
6679 break; /* shouldn't happen */
6681 FD_ZERO(&input_mask);
6682 FD_SET(sock, &input_mask);
6684 if (select(sock + 1, &input_mask, NULL, NULL, NULL) < 0)
6686 fprintf(stderr, "select() failed: %s\n", strerror(errno));
6690 /* Now check for input */
6691 PQconsumeInput(conn);
6692 while ((notify = PQnotifies(conn)) != NULL)
6695 "ASYNC NOTIFY of '%s' received from backend pid %d\n",
6696 notify->relname, notify->be_pid);
6702 fprintf(stderr, "Done.\n");
6704 /* close the connection to the database and cleanup */
6713 <example id="libpq-example-3">
6714 <title><application>libpq</application> Example Program 3</>
6720 * Test out-of-line parameters and binary I/O.
6722 * Before running this, populate a database with the following commands
6723 * (provided in src/test/examples/testlibpq3.sql):
6725 * CREATE TABLE test1 (i int4, t text, b bytea);
6727 * INSERT INTO test1 values (1, 'joe''s place', '\\000\\001\\002\\003\\004');
6728 * INSERT INTO test1 values (2, 'ho there', '\\004\\003\\002\\001\\000');
6730 * The expected output is:
6734 * t = (11 bytes) 'joe's place'
6735 * b = (5 bytes) \000\001\002\003\004
6739 * t = (8 bytes) 'ho there'
6740 * b = (5 bytes) \004\003\002\001\000
6745 #include <sys/types.h>
6746 #include "libpq-fe.h"
6748 /* for ntohl/htonl */
6749 #include <netinet/in.h>
6750 #include <arpa/inet.h>
6754 exit_nicely(PGconn *conn)
6761 * This function prints a query result that is a binary-format fetch from
6762 * a table defined as in the comment above. We split it out because the
6763 * main() function uses it twice.
6766 show_binary_results(PGresult *res)
6774 /* Use PQfnumber to avoid assumptions about field order in result */
6775 i_fnum = PQfnumber(res, "i");
6776 t_fnum = PQfnumber(res, "t");
6777 b_fnum = PQfnumber(res, "b");
6779 for (i = 0; i < PQntuples(res); i++)
6787 /* Get the field values (we ignore possibility they are null!) */
6788 iptr = PQgetvalue(res, i, i_fnum);
6789 tptr = PQgetvalue(res, i, t_fnum);
6790 bptr = PQgetvalue(res, i, b_fnum);
6793 * The binary representation of INT4 is in network byte order, which
6794 * we'd better coerce to the local byte order.
6796 ival = ntohl(*((uint32_t *) iptr));
6799 * The binary representation of TEXT is, well, text, and since libpq
6800 * was nice enough to append a zero byte to it, it'll work just fine
6803 * The binary representation of BYTEA is a bunch of bytes, which could
6804 * include embedded nulls so we have to pay attention to field length.
6806 blen = PQgetlength(res, i, b_fnum);
6808 printf("tuple %d: got\n", i);
6809 printf(" i = (%d bytes) %d\n",
6810 PQgetlength(res, i, i_fnum), ival);
6811 printf(" t = (%d bytes) '%s'\n",
6812 PQgetlength(res, i, t_fnum), tptr);
6813 printf(" b = (%d bytes) ", blen);
6814 for (j = 0; j < blen; j++)
6815 printf("\\%03o", bptr[j]);
6821 main(int argc, char **argv)
6823 const char *conninfo;
6826 const char *paramValues[1];
6827 int paramLengths[1];
6828 int paramFormats[1];
6829 uint32_t binaryIntVal;
6832 * If the user supplies a parameter on the command line, use it as the
6833 * conninfo string; otherwise default to setting dbname=postgres and using
6834 * environment variables or defaults for all other connection parameters.
6839 conninfo = "dbname = postgres";
6841 /* Make a connection to the database */
6842 conn = PQconnectdb(conninfo);
6844 /* Check to see that the backend connection was successfully made */
6845 if (PQstatus(conn) != CONNECTION_OK)
6847 fprintf(stderr, "Connection to database failed: %s",
6848 PQerrorMessage(conn));
6853 * The point of this program is to illustrate use of PQexecParams() with
6854 * out-of-line parameters, as well as binary transmission of data.
6856 * This first example transmits the parameters as text, but receives the
6857 * results in binary format. By using out-of-line parameters we can
6858 * avoid a lot of tedious mucking about with quoting and escaping, even
6859 * though the data is text. Notice how we don't have to do anything
6860 * special with the quote mark in the parameter value.
6863 /* Here is our out-of-line parameter value */
6864 paramValues[0] = "joe's place";
6866 res = PQexecParams(conn,
6867 "SELECT * FROM test1 WHERE t = $1",
6869 NULL, /* let the backend deduce param type */
6871 NULL, /* don't need param lengths since text */
6872 NULL, /* default to all text params */
6873 1); /* ask for binary results */
6875 if (PQresultStatus(res) != PGRES_TUPLES_OK)
6877 fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn));
6882 show_binary_results(res);
6887 * In this second example we transmit an integer parameter in binary
6888 * form, and again retrieve the results in binary form.
6890 * Although we tell PQexecParams we are letting the backend deduce
6891 * parameter type, we really force the decision by casting the parameter
6892 * symbol in the query text. This is a good safety measure when sending
6893 * binary parameters.
6896 /* Convert integer value "2" to network byte order */
6897 binaryIntVal = htonl((uint32_t) 2);
6899 /* Set up parameter arrays for PQexecParams */
6900 paramValues[0] = (char *) &binaryIntVal;
6901 paramLengths[0] = sizeof(binaryIntVal);
6902 paramFormats[0] = 1; /* binary */
6904 res = PQexecParams(conn,
6905 "SELECT * FROM test1 WHERE i = $1::int4",
6907 NULL, /* let the backend deduce param type */
6911 1); /* ask for binary results */
6913 if (PQresultStatus(res) != PGRES_TUPLES_OK)
6915 fprintf(stderr, "SELECT failed: %s", PQerrorMessage(conn));
6920 show_binary_results(res);
6924 /* close the connection to the database and cleanup */