libpq.3
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:39k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. ." This is -*-nroff-*-
  2. ." XXX standard disclaimer belongs here....
  3. ." $Header: /usr/local/cvsroot/pgsql/src/man/Attic/libpq.3,v 1.27 1999/05/21 00:36:01 tgl Exp $
  4. .TH LIBPQ INTRO 08/08/98 PostgreSQL PostgreSQL
  5. .SH DESCRIPTION
  6. Current documentation for this topic is available in the new Programmer's Guide
  7. chapter on libpq.
  8. This man page is obsolete, though in sync with the Programmer's Guide as of 1998/08/15.
  9. .PP
  10. Libpq is the programmer's interface to Postgres.  Libpq is a set of
  11. library routines which allows
  12. client programs to pass queries to the Postgres backend
  13. server and to receive the results of these queries.
  14. .PP
  15. This version of the documentation describes the C interface library.
  16. Three short programs are included at the end of this section to show how
  17. to write programs that use Libpq.
  18. .PP
  19. There are several examples of Libpq applications in the following
  20. directories:
  21. .nf
  22. &../src/test/regress
  23. &../src/test/examples
  24. &../src/bin/psql
  25. .fi
  26. .PP
  27. Frontend programs which use Libpq must include the header file
  28. .B "libpq-fe.h"
  29. and must link with the
  30. .B libpq 
  31. library.
  32. .SH "Control and Initialization"
  33. .PP
  34. The following environment variables can be used to set up default
  35. environment values to avoid hard-coding database names into
  36. an application program:
  37. .sp
  38. (bu
  39. .B PGHOST
  40. sets the default server name.
  41. If it is set to a non-zero-length string, it causes TCP/IP
  42. communication to be used, rather than the default local Unix domain sockets.
  43. .sp
  44. (bu
  45. .B PGUSER
  46. sets the username used to connect to the database and for authentication.
  47. .sp
  48. (bu
  49. .B PGOPTIONS
  50. sets additional runtime options for the Postgres backend.
  51. .sp
  52. (bu
  53. .B PGPORT
  54. sets the default port or local Unix domain socket file extension
  55. for communicating with the Postgres backend.
  56. .sp
  57. (bu
  58. .B PGTTY
  59. sets the file or tty on which debugging messages from the backend server
  60. are displayed.
  61. .sp
  62. (bu
  63. .B PGDATABASE
  64. sets the default Postgres database name.
  65. .sp
  66. (bu
  67. .B PGREALM
  68. sets the
  69. .I Kerberos
  70. realm to use with Postgres, if it is different from the local realm.  If 
  71. .B PGREALM
  72. is set, Postgres applications will attempt authentication with servers
  73. for this realm and use separate ticket files to avoid conflicts with
  74. local ticket files.  This environment variable is only used if 
  75. .I Kerberos
  76. authentication is enabled.
  77. .PP
  78. The following environment variables can be used to specify user-level default behavior
  79. for every Postgres session:
  80. .sp
  81. (bu
  82. .B PGDATESTYLE
  83. sets the default style of date/time representation.
  84. .sp
  85. (bu
  86. .B PGTZ
  87. sets the default time zone.
  88. .PP
  89. The following environment variables can be used to specify default internal
  90. behavior for every Postgres session:
  91. .sp
  92. (bu
  93. .B PGGEQO
  94. sets the default mode for the genetic optimizer.
  95. .sp
  96. (bu
  97. .B PGRPLANS
  98. sets the default mode to allow or disable right-sided plans in the optimizer.
  99. .sp
  100. (bu
  101. .B PGCOSTHEAP
  102. sets the default cost for heap searches for the optimizer.
  103. .sp
  104. (bu
  105. .B PGCOSTINDEX
  106. sets the default cost for indexed searches for the optimizer.
  107. (bu
  108. .B PGQUERY_LIMIT
  109. sets the maximum number of rows returned by a query.
  110. .sp
  111. .PP
  112. See the
  113. set(l)
  114. man page for information on the arguments for these environment variables.
  115. .SH "Database Connection Functions"
  116. .PP
  117. The following routines deal with making a connection to a backend
  118. from a C program.
  119. .PP
  120. .B PQsetdb
  121. .br
  122. .B PQsetdbLogin
  123. .IP
  124. Makes a new connection to a backend.
  125. .B PQsetdb
  126. is the method usually used to
  127. connect to the database when username/password authentication is not
  128. needed.
  129. .nf
  130. PGconn *PQsetdb(char *pghost,
  131.                 char *pgport,
  132.                 char *pgoptions,
  133.                 char *pgtty,
  134.                 char *dbName); 
  135. .fi
  136. .IP
  137. .B PQsetdbLogin
  138. is the method used to
  139. connect to the database when username/password authentication is
  140. needed.
  141. .nf
  142. PGconn *PQsetdbLogin(char *pghost,
  143.                      char *pgport,
  144.                      char *pgoptions,
  145.                      char *pgtty,
  146.                      char *dbName,
  147.                      char *login,
  148.                      char *pwd);
  149. .fi
  150. If any argument is NULL, then the corresponding environment variable
  151. is checked.  If the environment variable is also not set, then hardwired
  152. defaults are used. 
  153. .IP
  154. .I PQsetdb
  155. and
  156. .I PQsetdbLogin
  157. always return a valid PGconn pointer.  The 
  158. .I PQstatus
  159. (see below) command should be called to ensure that a connection was
  160. properly made before queries are sent via the connection.  Libpq
  161. programmers should be careful to maintain the PGconn abstraction.  Use
  162. the accessor functions below to get at the contents of PGconn.  Avoid
  163. directly referencing the fields of the PGconn structure as they are
  164. subject to change in the future.
  165. .IP
  166. .B PQdb
  167. returns the database name of the connection.
  168. .nf
  169. char *PQdb(PGconn *conn)
  170. .fi
  171. .B PQhost
  172. returns the host name of the connection.
  173. .nf
  174. char *PQhost(PGconn *conn)
  175. .fi
  176. .B PQoptions
  177. returns the pgoptions used in the connection.
  178. .nf
  179. char *PQoptions(PGconn *conn)
  180. .fi
  181. .B PQport
  182. returns the pgport of the connection.
  183. .nf
  184. char *PQport(PGconn *conn)
  185. .fi
  186. .B PQtty
  187. returns the pgtty of the connection.
  188. .nf
  189. char *PQtty(PGconn *conn)
  190. .fi
  191. .B PQstatus
  192. Returns the status of the connection. The status can be CONNECTION_OK or
  193. CONNECTION_BAD.  
  194. .nf
  195. ConnStatusType *PQstatus(PGconn *conn)
  196. .fi
  197. .B PQerrorMessage
  198. returns the error message associated with the connection
  199. .nf
  200. char *PQerrorMessage(PGconn* conn);
  201. .fi
  202. .PP
  203. .B PQfinish
  204. .IP
  205. Close the connection to the backend.  Also frees memory used by the
  206. PGconn structure.  The PGconn pointer should not be used after PQfinish
  207. has been called. 
  208. .nf
  209. void PQfinish(PGconn *conn)
  210. .fi
  211. .PP
  212. .B PQreset
  213. .IP
  214. Reset the communication port with the backend.  This function will close
  215. the IPC socket connection to the backend and attempt to reestablish a
  216. new connection to the same backend.
  217. .nf
  218. void PQreset(PGconn *conn)
  219. .fi
  220. .PP
  221. .SH "Query Execution Functions"
  222. .PP
  223. .B PQexec
  224. .IP
  225. Submit a query to Postgres.   Returns  a  PGresult
  226. pointer or possibly a NULL pointer.  If a NULL is returned, it
  227. should be treated like a PGRES_FATAL_ERROR result: use
  228. .I PQerrorMessage
  229. to get more information about the error.
  230. .nf
  231. PGresult *PQexec(PGconn *conn,
  232.                  const char *query);
  233. .fi
  234. The PGresult structure encapsulates the query result returned by the
  235. backend.  Libpq programmers should be careful to maintain the PGresult
  236. abstraction. Use the accessor functions described below to retrieve the
  237. results of the query.  Avoid directly referencing the fields of the PGresult
  238. structure as they are subject to change in the future. 
  239. .PP
  240. .B PQresultStatus
  241. .IP
  242. Returns the result status of the query.
  243. .I PQresultStatus
  244. can return one of the following values:
  245. .nf
  246. PGRES_EMPTY_QUERY,
  247. PGRES_COMMAND_OK,  /* the query was a command returning no data */
  248. PGRES_TUPLES_OK,  /* the query successfully returned tuples */
  249. PGRES_COPY_OUT, 
  250. PGRES_COPY_IN,
  251. PGRES_BAD_RESPONSE, /* an unexpected response was received */
  252. PGRES_NONFATAL_ERROR,
  253. PGRES_FATAL_ERROR
  254. .fi
  255. .IP
  256. If  the result status is PGRES_TUPLES_OK, then the
  257. routines described below can be  used  to  retrieve  the
  258. tuples returned by the query.  Note that a SELECT that
  259. happens to retrieve zero tuples still shows PGRES_TUPLES_OK.
  260. PGRES_COMMAND_OK is for commands that can never return tuples.
  261. .PP
  262. .B PQresStatus
  263. .IP
  264. Converts the enumerated type returned by PQresultStatus into
  265. a string constant describing the status code.
  266. .nf
  267. const char *PQresStatus(ExecStatusType status);
  268. .fi
  269. .IP
  270. Older code may perform this same operation by direct access to a constant
  271. string array inside libpq,
  272. .nf
  273. extern const char * const pgresStatus[];
  274. .fi
  275. .IP
  276. However, using the function is recommended instead, since it is more portable
  277. and will not fail on out-of-range values.
  278. .PP
  279. .B PQresultErrorMessage
  280. .IP
  281. returns the error message associated with the query, or an empty string
  282. if there was no error.
  283. .nf
  284. const char *PQresultErrorMessage(PGresult *res);
  285. .fi
  286. .IP
  287. Immediately following a PQexec or PQgetResult call, PQerrorMessage
  288. (on the connection) will return the same string as PQresultErrorMessage
  289. (on the result).  However, a PGresult will retain its error message
  290. until destroyed, whereas the connection's error message will change when
  291. subsequent operations are done.  Use PQresultErrorMessage when you want to
  292. know the status associated with a particular PGresult; use PQerrorMessage
  293. when you want to know the status from the latest operation on the connection.
  294. .B PQntuples
  295. returns the number of tuples (instances) in the query result.
  296. .nf
  297. int PQntuples(PGresult *res);
  298. .fi
  299. .B PQnfields
  300. returns the number of fields (attributes) in the query result.
  301. .nf
  302. int PQnfields(PGresult *res);
  303. .fi
  304. .B PQfname
  305. returns the field (attribute) name associated with the given field index.
  306. Field indices start at 0.
  307. .nf
  308. char *PQfname(PGresult *res,
  309.              int field_index);
  310. .fi
  311. .B PQfnumber
  312. returns the field (attribute) index associated with the given field name.
  313. .nf
  314. int PQfnumber(PGresult *res,
  315.              char* field_name);
  316. .fi
  317. .B PQftype
  318. returns the field type associated with the given field index. The
  319. integer returned is an internal coding of the type.  Field indices start
  320. at 0.
  321. .nf
  322. Oid PQftype(PGresult *res,
  323.             int field_num);
  324. .fi
  325. .B PQfsize
  326. returns the size in bytes of the field associated with the given field
  327. index. If the size returned is -1, the field is a variable length field.
  328. Field indices start at 0. 
  329. .nf
  330. short PQfsize(PGresult *res,
  331.               int field_index);
  332. .fi
  333. .B PQfmod
  334. returns the type-specific modification data of the field
  335. associated with the given field index.
  336. Field indices start at 0.
  337. .nf
  338. int PQfmod(PGresult *res,
  339.            int field_index);
  340. .fi
  341. .B PQgetvalue
  342. returns the field (attribute) value.  For most queries, the value
  343. returned by 
  344. .I PQgetvalue
  345. is a null-terminated ASCII string representation
  346. of the attribute value.  If the query was a result of a 
  347. .B BINARY
  348. cursor, then the value returned by
  349. .I PQgetvalue
  350. is the binary representation of the type in the internal format of the
  351. backend server.  It is the programmer's responsibility to cast and
  352. convert the data to the correct C type.  The value returned by 
  353. .I PQgetvalue
  354. points to storage that is part of the PGresult structure.  One must
  355. explicitly copy the value into other storage if it is to be used past
  356. the lifetime of the PGresult structure itself.
  357. .nf
  358. char* PQgetvalue(PGresult *res,
  359.                  int tup_num,
  360.                  int field_num);
  361. .fi
  362. .B PQgetlength
  363. returns the length of a field (attribute) in bytes.  If the field
  364. is a
  365. .I "struct varlena" ,
  366. the length returned here does 
  367. .B not
  368. include the size field of the varlena, i.e., it is 4 bytes less.
  369. .nf
  370. int PQgetlength(PGresult *res,
  371.                 int tup_num,
  372.                 int field_num);
  373. .fi
  374. .B PQgetisnull
  375. returns the NULL status of a field.
  376. .nf
  377. int PQgetisnull(PGresult *res,
  378.                 int tup_num,
  379.                 int field_num);
  380. .fi
  381. .PP
  382. .B PQcmdStatus
  383. .IP 
  384. Returns the command status associated with the last query command.
  385. .nf
  386. char *PQcmdStatus(PGresult *res);
  387. .fi
  388. .PP
  389. .B PQcmdTuples
  390. .IP
  391. Returns the number of tuples (instances) affected by INSERT, UPDATE, and
  392. DELETE queries.
  393. .nf
  394. char *PQcmdTuples(PGresult *res);
  395. .fi
  396. .PP
  397. .B PQoidStatus
  398. .IP
  399. Returns a string with the object id of the tuple inserted if the last
  400. query is an INSERT command.  Otherwise, returns an empty string.
  401. .nf
  402. char* PQoidStatus(PGresult *res);
  403. .fi
  404. .PP
  405. .B PQprint
  406. .IP
  407. + Prints out all the tuples in an intelligent manner. The
  408. .B psql
  409. + program uses this function for its output.
  410. .nf
  411. void PQprint(
  412.       FILE* fout,      /* output stream */
  413.       PGresult* res,   /* query results */
  414.       PQprintOpt *ps   /* option structure */
  415.         );
  416. .fi
  417. .I PQprintOpt
  418. is a typedef'ed structure as defined below.
  419. .(C
  420. typedef struct _PQprintOpt {
  421.     bool header;           /* print table headings and row count */
  422.     bool align;            /* fill align the fields */
  423.     bool standard;         /* old brain dead format (needs align) */
  424.     bool html3;            /* output html3+ tables */
  425.     bool expanded;         /* expand tables */
  426.     bool pager;            /* use pager if needed */
  427.     char *fieldSep;        /* field separator */
  428.     char *caption;         /* html table caption (or NULL) */
  429.     char **fieldName;      /* null terminated array of field names (or NULL) */
  430. } PQprintOpt;
  431. .fi
  432. .LP
  433. .B PQclear
  434. .IP
  435. Frees the storage associated with the PGresult.  Every query result
  436. should be properly freed when it is no longer used.  Failure to do this
  437. will result in memory leaks in the frontend application.  The PQresult*
  438. passed in should be a value which is returned from PQexec().  Calling
  439. PQclear() on an uninitialized PQresult pointer will very likely result
  440. in a core dump. 
  441. .nf
  442. void PQclear(PQresult *res);
  443. .fi
  444. .PP
  445. .SH "Asynchronous Query Processing"
  446. .PP
  447. The PQexec function is adequate for submitting queries in simple synchronous
  448. applications.  It has a couple of major deficiencies however:
  449. .IP
  450. PQexec waits for the query to be completed.  The application may have other
  451. work to do (such as maintaining a user interface), in which case it won't
  452. want to block waiting for the response.
  453. .IP
  454. Since control is buried inside PQexec, it is hard for the frontend
  455. to decide it would like to try to cancel the ongoing query.  (It can be
  456. done from a signal handler, but not otherwise.)
  457. .IP
  458. PQexec can return only one PGresult structure.  If the submitted query
  459. string contains multiple SQL commands, all but the last PGresult are
  460. discarded by PQexec.
  461. .PP
  462. Applications that do not like these limitations can instead use the
  463. underlying functions that PQexec is built from: PQsendQuery and
  464. PQgetResult.
  465. .PP
  466. .B PQsendQuery
  467. .IP
  468. Submit a query to Postgres without
  469. waiting for the result(s).  TRUE is returned if the query was
  470. successfully dispatched, FALSE if not (in which case, use
  471. PQerrorMessage to get more information about the failure).
  472. .nf
  473. int PQsendQuery(PGconn *conn,
  474.                 const char *query);
  475. .fi
  476. After successfully calling PQsendQuery, call PQgetResult one or more
  477. times to obtain the query results.  PQsendQuery may not be called
  478. again (on the same connection) until PQgetResult has returned NULL,
  479. indicating that the query is done.
  480. .PP
  481. .B PQgetResult
  482. .IP
  483. Wait for the next result from a prior PQsendQuery,
  484. and return it.  NULL is returned when the query is complete
  485. and there will be no more results.
  486. .nf
  487. PGresult *PQgetResult(PGconn *conn);
  488. .fi
  489. PQgetResult must be called repeatedly until it returns NULL,
  490. indicating that the query is done.  (If called when no query is
  491. active, PQgetResult will just return NULL at once.)
  492. Each non-null result from PQgetResult should be processed using
  493. the same PGresult accessor functions previously described.
  494. Don't forget to free each result object with PQclear when done with it.
  495. Note that PQgetResult will block only if a query is active and the
  496. necessary response data has not yet been read by PQconsumeInput.
  497. .PP
  498. Using PQsendQuery and PQgetResult solves one of PQexec's problems:
  499. if a query string contains multiple SQL commands, the results of those
  500. commands can be obtained individually.  (This allows a simple form of
  501. overlapped processing, by the way: the frontend can be handling the
  502. results of one query while the backend is still working on later
  503. queries in the same query string.)  However, calling PQgetResult will
  504. still cause the frontend to block until the backend completes the
  505. next SQL command.  This can be avoided by proper use of three more
  506. functions:
  507. .PP
  508. .B PQconsumeInput
  509. .IP
  510. If input is available from the backend, consume it.
  511. .nf
  512. void PQconsumeInput(PGconn *conn);
  513. .fi
  514. No direct return value is available from PQconsumeInput, but
  515. after calling it, the application may check PQisBusy and/or
  516. PQnotifies to see if their state has changed.
  517. PQconsumeInput may be called even if the application is not
  518. prepared to deal with a result or notification just yet.
  519. It will read available data and save it in a buffer, thereby
  520. causing a select(2) read-ready indication to go away.  The
  521. application can thus use PQconsumeInput to clear the select
  522. condition immediately, and then examine the results at leisure.
  523. .PP
  524. .B PQisBusy
  525. .IP
  526. Returns TRUE if a query is busy, that is, PQgetResult would block
  527. waiting for input.  A FALSE return indicates that PQgetResult can
  528. be called with assurance of not blocking.
  529. .nf
  530. int PQisBusy(PGconn *conn);
  531. .fi
  532. PQisBusy will not itself attempt to read data from the backend;
  533. therefore PQconsumeInput must be invoked first, or the busy
  534. state will never end.
  535. .PP
  536. .B PQsocket
  537. .IP
  538. Obtain the file descriptor number for the backend connection socket.
  539. A valid descriptor will be >= 0; a result of -1 indicates that
  540. no backend connection is currently open.
  541. .nf
  542. int PQsocket(PGconn *conn);
  543. .fi
  544. PQsocket should be used to obtain the backend socket descriptor
  545. in preparation for executing select(2).  This allows an application
  546. to wait for either backend responses or other conditions.
  547. If the result of select(2) indicates that data can be read from
  548. the backend socket, then PQconsumeInput should be called to read the
  549. data; after which, PQisBusy, PQgetResult, and/or PQnotifies can be
  550. used to process the response.
  551. .PP
  552. A typical frontend using these functions will have a main loop that uses
  553. select(2) to wait for all the conditions that it must respond to.  One of
  554. the conditions will be input available from the backend, which in select's
  555. terms is readable data on the file descriptor identified by PQsocket.
  556. When the main loop detects input ready, it should call PQconsumeInput
  557. to read the input.  It can then call PQisBusy, followed by PQgetResult
  558. if PQisBusy returns FALSE.  It can also call PQnotifies to detect NOTIFY
  559. messages (see "Asynchronous Notification", below).
  560. .PP
  561. A frontend that uses PQsendQuery/PQgetResult can also attempt to cancel
  562. a query that is still being processed by the backend.
  563. .PP
  564. .B PQrequestCancel
  565. .IP
  566. Request that <ProductName>Postgres</ProductName> abandon
  567. processing of the current query.
  568. .nf
  569. int PQrequestCancel(PGconn *conn);
  570. .fi
  571. The return value is TRUE if the cancel request was successfully
  572. dispatched, FALSE if not.  (If not, PQerrorMessage tells why not.)
  573. Successful dispatch is no guarantee that the request will have any
  574. effect, however.  Regardless of the return value of PQrequestCancel,
  575. the application must continue with the normal result-reading
  576. sequence using PQgetResult.  If the cancellation
  577. is effective, the current query will terminate early and return
  578. an error result.  If the cancellation fails (say because the
  579. backend was already done processing the query), then there will
  580. be no visible result at all.
  581. .PP
  582. Note that if the current query is part of a transaction, cancellation
  583. will abort the whole transaction.
  584. .PP
  585. PQrequestCancel can safely be invoked from a signal handler.  So, it is
  586. also possible to use it in conjunction with plain PQexec, if the decision
  587. to cancel can be made in a signal handler.  For example, psql invokes
  588. PQrequestCancel from a SIGINT signal handler, thus allowing interactive
  589. cancellation of queries that it issues through PQexec.  Note that
  590. PQrequestCancel will have no effect if the connection is not currently open
  591. or the backend is not currently processing a query.
  592. .PP
  593. .SH "Fast Path"
  594. .PP
  595. Postgres provides a 
  596. .B "fast path"
  597. interface to send function calls to the backend.  This is a trapdoor
  598. into system internals and can be a potential security hole.  Most users
  599. will not need this feature. 
  600. .nf
  601. PGresult* PQfn(PGconn* conn,
  602.        int fnid, 
  603.        int *result_buf, 
  604.        int *result_len,
  605.        int result_is_int,
  606.        PQArgBlock *args, 
  607.        int nargs);
  608. .fi
  609. .PP
  610. The
  611. .I fnid
  612. argument is the object identifier of the function to be executed.
  613. .I result_buf
  614. is the buffer in which to load the return value.  The caller must have
  615. allocated sufficient space to store the return value.  
  616. The result length will be returned in the storage pointed to by 
  617. .I result_len.
  618. If the result is to be an integer value, than 
  619. .I result_is_int
  620. should be set to 1; otherwise it should be set to 0.
  621. .I args
  622. and 
  623. .I nargs
  624. specify the arguments to the function.
  625. .nf
  626. typedef struct {
  627.     int len;
  628.     int isint;
  629.     union {
  630.         int *ptr;
  631. int integer;
  632.     } u;
  633. } PQArgBlock;
  634. .fi
  635. .PP
  636. .I PQfn
  637. always returns a valid PGresult*.  The resultStatus should be checked
  638. before the result is used.   The caller is responsible for freeing the
  639. PGresult with 
  640. .I PQclear
  641. when it is no longer needed.
  642. .PP
  643. .SH "Asynchronous Notification"
  644. .PP
  645. Postgres supports asynchronous notification via the 
  646. .I LISTEN
  647. and
  648. .I NOTIFY
  649. commands.  A backend registers its interest in a particular
  650. notification condition with the LISTEN command.  All backends listening on a
  651. particular condition will be notified asynchronously when a NOTIFY of that
  652. condition name is executed by any backend.  No additional information is
  653. passed from the notifier to the listener.  Thus, typically, any actual data
  654. that needs to be communicated is transferred through a database relation.
  655. Commonly the condition name is the same as the associated relation, but it is
  656. not necessary for there to be any associated relation.
  657. .PP
  658. libpq applications submit LISTEN commands as ordinary
  659. SQL queries.  Subsequently, arrival of NOTIFY messages can be detected by
  660. calling PQnotifies().
  661. .PP
  662. .B PQNotifies
  663. .IP
  664. Returns  the next notification from a list of unhandled
  665. notification messages received from the backend.  Returns NULL if
  666. there are no pending notifications.  PQnotifies behaves like the
  667. popping of a stack.  Once a notification is returned from
  668. PQnotifies, it is considered handled and will be removed from the
  669. list of notifications.
  670. .nf
  671. PGnotify* PQNotifies(PGconn *conn);
  672. .fi
  673. After processing a PGnotify object returned by PQnotifies,
  674. be sure to free it with free() to avoid a memory leak.
  675. .PP
  676. The second sample program gives an example of the use of asynchronous
  677. notification.
  678. .PP
  679. PQnotifies() does not actually read backend data; it just returns messages
  680. previously absorbed by another libpq function.  In prior
  681. releases of libpq, the only way to ensure timely receipt
  682. of NOTIFY messages was to constantly submit queries, even empty ones, and then
  683. check PQnotifies() after each PQexec().  While this still works, it is
  684. deprecated as a waste of processing power.  A better way to check for NOTIFY
  685. messages when you have no useful queries to make is to call PQconsumeInput(),
  686. then check PQnotifies().  You can use select(2) to wait for backend data to
  687. arrive, thereby using no CPU power unless there is something to do.  Note that
  688. this will work OK whether you use PQsendQuery/PQgetResult or plain old PQexec
  689. for queries.  You should, however, remember to check PQnotifies() after each
  690. PQgetResult or PQexec to see if any notifications came in during the
  691. processing of the query.
  692. .PP
  693. .SH "Functions Associated with the COPY Command"
  694. .PP
  695. The
  696. .I copy
  697. command in Postgres has options to read from or write to the network
  698. connection used by Libpq.  Therefore, functions are necessary to
  699. access this network connection directly so applications may take full
  700. advantage of this capability.
  701. .PP
  702. These functions should be executed only after obtaining a PGRES_COPY_OUT
  703. or PGRES_COPY_IN result object from PQexec or PQgetResult.
  704. .PP
  705. .B PQgetline
  706. .IP
  707. Reads a newline-terminated line of characters (transmitted by the
  708. backend server) into a buffer 
  709. .I string 
  710. of size
  711. .I length .
  712. Like
  713. .I fgets(3),
  714. this routine copies up to 
  715. .I length "-1"
  716. characters into 
  717. .I string .
  718. It is like 
  719. .I gets(3),
  720. however, in that it converts the terminating newline into a null
  721. character.
  722. .IP
  723. .I PQgetline
  724. returns EOF at EOF, 0 if the entire line has been read, and 1 if the
  725. buffer is full but the terminating newline has not yet been read.
  726. .IP
  727. Notice that the application must check to see if a new line consists
  728. of the two characters *(lq\.*(rq, which indicates that the backend
  729. server has finished sending the results of the 
  730. .I copy
  731. command.  Therefore, if the application ever expects to receive lines
  732. that are more than
  733. .I length "-1"
  734. characters long, the application must be sure to check the return
  735. value of 
  736. .I PQgetline
  737. very carefully.
  738. .IP
  739. The code in
  740. .nf
  741. &../src/bin/psql/psql.c
  742. .fi
  743. contains routines that correctly handle the copy protocol.
  744. .nf
  745. int PQgetline(PGconn *conn,
  746.               char *string,
  747.               int length)
  748. .fi
  749. .PP
  750. .B PQputline
  751. .IP
  752. Sends a null-terminated 
  753. .I string
  754. to the backend server.
  755. .IP
  756. The application must explicitly send the two characters *(lq\.*(rq
  757. on a final line
  758. to indicate to the backend that it has finished sending its data.
  759. .nf
  760. void PQputline(PGconn *conn,
  761.                char *string);
  762. .fi
  763. .PP
  764. .B PQendcopy
  765. .IP
  766. Syncs with the backend.  This function waits until the backend has
  767. finished the copy.  It should either be issued when the
  768. last string has been sent to the backend using
  769. .I PQputline
  770. or when the last string has been received from the backend using
  771. .I PGgetline .
  772. It must be issued or the backend may get *(lqout of sync*(rq with
  773. the frontend.  Upon return from this function, the backend is ready to
  774. receive the next query.
  775. .IP
  776. The return value is 0 on successful completion, nonzero otherwise.
  777. .nf
  778. int PQendcopy(PGconn *conn);
  779. .fi
  780. As an example:
  781. .nf
  782. PQexec(conn, "create table foo (a int4, b char(16), d float8)");
  783. PQexec(conn, "copy foo from stdin");
  784. PQputline(conn, "3ethello worldet4.5en");
  785. PQputline(conn,"4etgoodbye worldet7.11en");
  786. &...
  787. PQputline(conn,"ee.en");
  788. PQendcopy(conn);
  789. .fi
  790. .PP
  791. When using PQgetResult, the application should respond to
  792. a PGRES_COPY_OUT result by executing PQgetline repeatedly,
  793. followed by PQendcopy after the terminator line is seen.
  794. It should then return to the PQgetResult loop until PQgetResult
  795. returns NULL.  Similarly a PGRES_COPY_IN result is processed
  796. by a series of PQputline calls followed by PQendcopy, then
  797. return to the PQgetResult loop.  This arrangement will ensure that
  798. a copy in or copy out command embedded in a series of SQL commands
  799. will be executed correctly.
  800. Older applications are likely to submit a copy in or copy out
  801. via PQexec and assume that the transaction is done after PQendcopy.
  802. This will work correctly only if the copy in/out is the only
  803. SQL command in the query string.
  804. .PP
  805. .SH "LIBPQ Tracing Functions"
  806. .PP
  807. .B PQtrace
  808. .IP
  809. Enable tracing of the frontend/backend communication to a debugging file
  810. stream. 
  811. .nf
  812. void PQtrace(PGconn *conn
  813.              FILE *debug_port)
  814. .fi
  815. .PP
  816. .B PQuntrace 
  817. .IP
  818. Disable tracing started by 
  819. .I PQtrace
  820. .nf
  821. void PQuntrace(PGconn *conn)
  822. .fi
  823. .PP
  824. .SH "LIBPQ Control Functions"
  825. .PP
  826. .B PQsetNoticeProcessor
  827. .IP
  828. Control reporting of notice and warning messages generated by libpq.
  829. .nf
  830. void PQsetNoticeProcessor (PGconn * conn,
  831. void (*noticeProcessor) (void * arg, const char * message),
  832. void * arg)
  833. .fi
  834. By default, libpq prints "notice" messages from the backend on stderr,
  835. as well as a few error messages that it generates by itself.
  836. This behavior can be overridden by supplying a callback function that
  837. does something else with the messages.  The callback function is passed
  838. the text of the error message (which includes a trailing newline), plus
  839. a void pointer that is the same one passed to PQsetNoticeProcessor.
  840. (This pointer can be used to access application-specific state if needed.)
  841. The default notice processor is simply
  842. .nf
  843. static void
  844. defaultNoticeProcessor(void * arg, const char * message)
  845. {
  846. fprintf(stderr, "%s", message);
  847. }
  848. .fi
  849. To use a special notice processor, call PQsetNoticeProcessor just after
  850. any creation of a new PGconn object.
  851. .PP
  852. .SH "User Authentication Functions"
  853. .PP
  854. If the user has generated the appropriate authentication credentials
  855. (e.g., obtaining
  856. .I Kerberos
  857. tickets), the frontend/backend authentication process is handled by
  858. .I PQexec
  859. without any further intervention.  The authentication method is now
  860. determined entirely by the DBA (see pga_hba.conf(5)).  The following
  861. routines no longer have any effect and should not be used.
  862. .PP
  863. .B fe_getauthname
  864. .IP
  865. Returns a pointer to static space containing whatever name the user
  866. has authenticated.  Use of this routine in place of calls to
  867. .I getenv(3)
  868. or 
  869. .I getpwuid(3)
  870. by applications is highly recommended, as it is entirely possible that
  871. the authenticated user name is 
  872. .B not
  873. the same as value of the
  874. .B USER
  875. environment variable or the user's entry in
  876. .I /etc/passwd .
  877. .nf
  878. char *fe_getauthname(char* errorMessage)
  879. .fi
  880. .PP
  881. .B fe_setauthsvc
  882. .IP
  883. Specifies that Libpq should use authentication service
  884. .I name
  885. rather than its compiled-in default.  This value is typically taken
  886. from a command-line switch.
  887. .nf
  888. void fe_setauthsvc(char *name,
  889.                    char* errorMessage)
  890. .fi
  891. Any error messages from the authentication attempts are returned in the
  892. errorMessage argument.
  893. .PP
  894. .SH "BUGS"
  895. .PP
  896. The query buffer is 8192 bytes long, and queries over that length will
  897. be rejected.
  898. .PP
  899. .SH "Sample Programs"
  900. .bp
  901. .SH "Sample Program 1"
  902. .PP
  903. .nf M
  904. /*
  905.  * testlibpq.c
  906.  *  Test the C version of Libpq, the Postgres frontend library.
  907.  *
  908.  *
  909.  */
  910. #include <stdio.h>
  911. #include "libpq-fe.h"
  912. void
  913. exit_nicely(PGconn *conn)
  914. {
  915.     PQfinish(conn);
  916.     exit(1);
  917. }
  918. main()
  919. {
  920.     char       *pghost,
  921.                *pgport,
  922.                *pgoptions,
  923.                *pgtty;
  924.     char       *dbName;
  925.     int         nFields;
  926.     int         i,
  927.                 j;
  928. /*  FILE *debug; */
  929.     PGconn     *conn;
  930.     PGresult   *res;
  931.     /*
  932.      * begin, by setting the parameters for a backend connection if the
  933.      * parameters are null, then the system will try to use reasonable
  934.      * defaults by looking up environment variables or, failing that,
  935.      * using hardwired constants
  936.      */
  937.     pghost = NULL;              /* host name of the backend server */
  938.     pgport = NULL;              /* port of the backend server */
  939.     pgoptions = NULL;           /* special options to start up the backend
  940.                                  * server */
  941.     pgtty = NULL;               /* debugging tty for the backend server */
  942.     dbName = "template1";
  943.     /* make a connection to the database */
  944.     conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
  945.     /* check to see that the backend connection was successfully made */
  946.     if (PQstatus(conn) == CONNECTION_BAD)
  947.     {
  948.         fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
  949.         fprintf(stderr, "%s", PQerrorMessage(conn));
  950.         exit_nicely(conn);
  951.     }
  952. /*  debug = fopen("/tmp/trace.out","w");  */
  953. /*   PQtrace(conn, debug);  */
  954.     /* start a transaction block */
  955.     res = PQexec(conn, "BEGIN");
  956.     if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
  957.     {
  958.         fprintf(stderr, "BEGIN command failed\n");
  959.         PQclear(res);
  960.         exit_nicely(conn);
  961.     }
  962.     /*
  963.      * should PQclear PGresult whenever it is no longer needed to avoid
  964.      * memory leaks
  965.      */
  966.     PQclear(res);
  967.     /*
  968.      * fetch instances from the pg_database, the system catalog of
  969.      * databases
  970.      */
  971.     res = PQexec(conn, "DECLARE mycursor CURSOR FOR select * from pg_database");
  972.     if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
  973.     {
  974.         fprintf(stderr, "DECLARE CURSOR command failed\n");
  975.         PQclear(res);
  976.         exit_nicely(conn);
  977.     }
  978.     PQclear(res);
  979.     res = PQexec(conn, "FETCH ALL in mycursor");
  980.     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
  981.     {
  982.         fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
  983.         PQclear(res);
  984.         exit_nicely(conn);
  985.     }
  986.     /* first, print out the attribute names */
  987.     nFields = PQnfields(res);
  988.     for (i = 0; i < nFields; i++)
  989.         printf("%-15s", PQfname(res, i));
  990.     printf("\n\n");
  991.     /* next, print out the instances */
  992.     for (i = 0; i < PQntuples(res); i++)
  993.     {
  994.         for (j = 0; j < nFields; j++)
  995.             printf("%-15s", PQgetvalue(res, i, j));
  996.         printf("\n");
  997.     }
  998.     PQclear(res);
  999.     /* close the cursor */
  1000.     res = PQexec(conn, "CLOSE mycursor");
  1001.     PQclear(res);
  1002.     /* commit the transaction */
  1003.     res = PQexec(conn, "COMMIT");
  1004.     PQclear(res);
  1005.     /* close the connection to the database and cleanup */
  1006.     PQfinish(conn);
  1007. /*   fclose(debug); */
  1008. }
  1009. .fi
  1010. .bp
  1011. .SH "Sample Program 2"
  1012. .PP
  1013. .nf M
  1014. /*
  1015.  * testlibpq2.c
  1016.  *  Test of the asynchronous notification interface
  1017.  *
  1018.  * Start this program, then from psql in another window do
  1019.  *   NOTIFY TBL2;
  1020.  *
  1021.  * Or, if you want to get fancy, try this:
  1022.  * Populate a database with the following:
  1023.  *
  1024.  *   CREATE TABLE TBL1 (i int4);
  1025.  *
  1026.  *   CREATE TABLE TBL2 (i int4);
  1027.  *
  1028.  *   CREATE RULE r1 AS ON INSERT TO TBL1 DO
  1029.  *     (INSERT INTO TBL2 values (new.i); NOTIFY TBL2);
  1030.  *
  1031.  * and do
  1032.  *
  1033.  *   INSERT INTO TBL1 values (10);
  1034.  *
  1035.  */
  1036. #include <stdio.h>
  1037. #include "libpq-fe.h"
  1038. void
  1039. exit_nicely(PGconn *conn)
  1040. {
  1041.     PQfinish(conn);
  1042.     exit(1);
  1043. }
  1044. main()
  1045. {
  1046.     char       *pghost,
  1047.                *pgport,
  1048.                *pgoptions,
  1049.                *pgtty;
  1050.     char       *dbName;
  1051.     int         nFields;
  1052.     int         i,
  1053.                 j;
  1054.     PGconn     *conn;
  1055.     PGresult   *res;
  1056.     PGnotify   *notify;
  1057.     /*
  1058.      * begin, by setting the parameters for a backend connection if the
  1059.      * parameters are null, then the system will try to use reasonable
  1060.      * defaults by looking up environment variables or, failing that,
  1061.      * using hardwired constants
  1062.      */
  1063.     pghost = NULL;              /* host name of the backend server */
  1064.     pgport = NULL;              /* port of the backend server */
  1065.     pgoptions = NULL;           /* special options to start up the backend
  1066.                                  * server */
  1067.     pgtty = NULL;               /* debugging tty for the backend server */
  1068.     dbName = getenv("USER");    /* change this to the name of your test
  1069.                                  * database */
  1070.     /* make a connection to the database */
  1071.     conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
  1072.     /* check to see that the backend connection was successfully made */
  1073.     if (PQstatus(conn) == CONNECTION_BAD)
  1074.     {
  1075.         fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
  1076.         fprintf(stderr, "%s", PQerrorMessage(conn));
  1077.         exit_nicely(conn);
  1078.     }
  1079.     res = PQexec(conn, "LISTEN TBL2");
  1080.     if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
  1081.     {
  1082.         fprintf(stderr, "LISTEN command failed\n");
  1083.         PQclear(res);
  1084.         exit_nicely(conn);
  1085.     }
  1086.     /*
  1087.      * should PQclear PGresult whenever it is no longer needed to avoid
  1088.      * memory leaks
  1089.      */
  1090.     PQclear(res);
  1091.     while (1)
  1092.     {
  1093. /* wait a little bit between checks;
  1094.  * waiting with select() would be more efficient.
  1095.  */
  1096. sleep(1);
  1097. /* collect any asynchronous backend messages */
  1098. PQconsumeInput(conn);
  1099. /* check for asynchronous notify messages */
  1100. while ((notify = PQnotifies(conn)) != NULL) {
  1101.             fprintf(stderr,
  1102.                 "ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
  1103.                     notify->relname, notify->be_pid);
  1104.             free(notify);
  1105.         }
  1106.     }
  1107.     /* close the connection to the database and cleanup */
  1108.     PQfinish(conn);
  1109. }
  1110. .fi
  1111. .bp
  1112. .SH "Sample Program 3"
  1113. .PP
  1114. .nf M
  1115. /*
  1116.  * testlibpq3.c
  1117.  *  Test the C version of Libpq, the Postgres frontend library.
  1118.  *   tests the binary cursor interface
  1119.  *
  1120.  *
  1121.  *
  1122.  populate a database by doing the following:
  1123. CREATE TABLE test1 (i int4, d float4, p polygon);
  1124. INSERT INTO test1 values (1, 3.567, '(3.0, 4.0, 1.0, 2.0)'::polygon);
  1125. INSERT INTO test1 values (2, 89.05, '(4.0, 3.0, 2.0, 1.0)'::polygon);
  1126.  the expected output is:
  1127. tuple 0: got
  1128.  i = (4 bytes) 1,
  1129.  d = (4 bytes) 3.567000,
  1130.  p = (4 bytes) 2 points         boundbox = (hi=3.000000/4.000000, lo = 1.000000,2.000000)
  1131. tuple 1: got
  1132.  i = (4 bytes) 2,
  1133.  d = (4 bytes) 89.050003,
  1134.  p = (4 bytes) 2 points         boundbox = (hi=4.000000/3.000000, lo = 2.000000,1.000000)
  1135.  *
  1136.  */
  1137. #include <stdio.h>
  1138. #include "libpq-fe.h"
  1139. #include "utils/geo-decls.h"    /* for the POLYGON type */
  1140. void
  1141. exit_nicely(PGconn *conn)
  1142. {
  1143.     PQfinish(conn);
  1144.     exit(1);
  1145. }
  1146. main()
  1147. {
  1148.     char       *pghost,
  1149.                *pgport,
  1150.                *pgoptions,
  1151.                *pgtty;
  1152.     char       *dbName;
  1153.     int         nFields;
  1154.     int         i,
  1155.                 j;
  1156.     int         i_fnum,
  1157.                 d_fnum,
  1158.                 p_fnum;
  1159.     PGconn     *conn;
  1160.     PGresult   *res;
  1161.     /*
  1162.      * begin, by setting the parameters for a backend connection if the
  1163.      * parameters are null, then the system will try to use reasonable
  1164.      * defaults by looking up environment variables or, failing that,
  1165.      * using hardwired constants
  1166.      */
  1167.     pghost = NULL;              /* host name of the backend server */
  1168.     pgport = NULL;              /* port of the backend server */
  1169.     pgoptions = NULL;           /* special options to start up the backend
  1170.                                  * server */
  1171.     pgtty = NULL;               /* debugging tty for the backend server */
  1172.     dbName = getenv("USER");    /* change this to the name of your test
  1173.                                  * database */
  1174.     /* make a connection to the database */
  1175.     conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
  1176.     /* check to see that the backend connection was successfully made */
  1177.     if (PQstatus(conn) == CONNECTION_BAD)
  1178.     {
  1179.         fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
  1180.         fprintf(stderr, "%s", PQerrorMessage(conn));
  1181.         exit_nicely(conn);
  1182.     }
  1183.     /* start a transaction block */
  1184.     res = PQexec(conn, "BEGIN");
  1185.     if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
  1186.     {
  1187.         fprintf(stderr, "BEGIN command failed\n");
  1188.         PQclear(res);
  1189.         exit_nicely(conn);
  1190.     }
  1191.     /*
  1192.      * should PQclear PGresult whenever it is no longer needed to avoid
  1193.      * memory leaks
  1194.      */
  1195.     PQclear(res);
  1196.     /*
  1197.      * fetch instances from the pg_database, the system catalog of
  1198.      * databases
  1199.      */
  1200.     res = PQexec(conn, "DECLARE mycursor BINARY CURSOR FOR select * from test1");
  1201.     if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
  1202.     {
  1203.         fprintf(stderr, "DECLARE CURSOR command failed\n");
  1204.         PQclear(res);
  1205.         exit_nicely(conn);
  1206.     }
  1207.     PQclear(res);
  1208.     res = PQexec(conn, "FETCH ALL in mycursor");
  1209.     if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
  1210.     {
  1211.         fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
  1212.         PQclear(res);
  1213.         exit_nicely(conn);
  1214.     }
  1215.     i_fnum = PQfnumber(res, "i");
  1216.     d_fnum = PQfnumber(res, "d");
  1217.     p_fnum = PQfnumber(res, "p");
  1218.     for (i = 0; i < 3; i++)
  1219.     {
  1220.         printf("type[%d] = %d, size[%d] = %d\n",
  1221.                i, PQftype(res, i),
  1222.                i, PQfsize(res, i));
  1223.     }
  1224.     for (i = 0; i < PQntuples(res); i++)
  1225.     {
  1226.         int        *ival;
  1227.         float      *dval;
  1228.         int         plen;
  1229.         POLYGON    *pval;
  1230.         /* we hard-wire this to the 3 fields we know about */
  1231.         ival = (int *) PQgetvalue(res, i, i_fnum);
  1232.         dval = (float *) PQgetvalue(res, i, d_fnum);
  1233.         plen = PQgetlength(res, i, p_fnum);
  1234.         /*
  1235.          * plen doesn't include the length field so need to increment by
  1236.          * VARHDSZ
  1237.          */
  1238.         pval = (POLYGON *) malloc(plen + VARHDRSZ);
  1239.         pval->size = plen;
  1240.         memmove((char *) &pval->npts, PQgetvalue(res, i, p_fnum), plen);
  1241.         printf("tuple %d: got\n", i);
  1242.         printf(" i = (%d bytes) %d,\n",
  1243.                PQgetlength(res, i, i_fnum), *ival);
  1244.         printf(" d = (%d bytes) %f,\n",
  1245.                PQgetlength(res, i, d_fnum), *dval);
  1246.         printf(" p = (%d bytes) %d points \tboundbox = (hi=%f/%f, lo = %f,%f)\n",
  1247.                PQgetlength(res, i, d_fnum),
  1248.                pval->npts,
  1249.                pval->boundbox.xh,
  1250.                pval->boundbox.yh,
  1251.                pval->boundbox.xl,
  1252.                pval->boundbox.yl);
  1253.     }
  1254.     PQclear(res);
  1255.     /* close the cursor */
  1256.     res = PQexec(conn, "CLOSE mycursor");
  1257.     PQclear(res);
  1258.     /* commit the transaction */
  1259.     res = PQexec(conn, "COMMIT");
  1260.     PQclear(res);
  1261.     /* close the connection to the database and cleanup */
  1262.     PQfinish(conn);
  1263. }
  1264. .fi