--- title: "Client Interfaces" id: client-interfaces pg_version: "20devel" --- Part IV. Client InterfacesThis part describes the client programming interfaces distributed with PostgreSQL. Each of these chapters can be read independently. There are many external programming interfaces for client programs that are distributed separately. They contain their own documentation ([Appendix H](external-projects.md) lists some of the more popular ones). Readers of this part should be familiar with using SQL to manipulate and query the database (see [Part II](sql.md)) and of course with the programming language of their choice. ## Table of Contents - [32. libpq — C Library](libpq.md) - [32.1. Database Connection Control Functions](libpq-connect.md) - [32.1.1. Connection Strings](libpq-connect.md#libpq-connstring) - [32.1.2. Parameter Key Words](libpq-connect.md#libpq-paramkeywords) - [32.2. Connection Status Functions](libpq-status.md) - [32.3. Command Execution Functions](libpq-exec.md) - [32.3.1. Main Functions](libpq-exec.md#libpq-exec-main) - [32.3.2. Retrieving Query Result Information](libpq-exec.md#libpq-exec-select-info) - [32.3.3. Retrieving Other Result Information](libpq-exec.md#libpq-exec-nonselect) - [32.3.4. Escaping Strings for Inclusion in SQL Commands](libpq-exec.md#libpq-exec-escape-string) - [32.4. Asynchronous Command Processing](libpq-async.md) - [32.5. Pipeline Mode](libpq-pipeline-mode.md) - [32.5.1. Using Pipeline Mode](libpq-pipeline-mode.md#libpq-pipeline-using) - [32.5.2. Functions Associated with Pipeline Mode](libpq-pipeline-mode.md#libpq-pipeline-functions) - [32.5.3. When to Use Pipeline Mode](libpq-pipeline-mode.md#libpq-pipeline-tips) - [32.6. Retrieving Query Results in Chunks](libpq-single-row-mode.md) - [32.7. Canceling Queries in Progress](libpq-cancel.md) - [32.7.1. Functions for Sending Cancel Requests](libpq-cancel.md#libpq-cancel-functions) - [32.7.2. Obsolete Functions for Sending Cancel Requests](libpq-cancel.md#libpq-cancel-deprecated) - [32.8. The Fast-Path Interface](libpq-fastpath.md) - [32.9. Asynchronous Notification](libpq-notify.md) - [32.10. Functions Associated with the `COPY` Command](libpq-copy.md) - [32.10.1. Functions for Sending `COPY` Data](libpq-copy.md#libpq-copy-send) - [32.10.2. Functions for Receiving `COPY` Data](libpq-copy.md#libpq-copy-receive) - [32.10.3. Obsolete Functions for `COPY`](libpq-copy.md#libpq-copy-deprecated) - [32.11. Control Functions](libpq-control.md) - [32.12. Miscellaneous Functions](libpq-misc.md) - [32.13. Notice Processing](libpq-notice-processing.md) - [32.14. Event System](libpq-events.md) - [32.14.1. Event Types](libpq-events.md#libpq-events-types) - [32.14.2. Event Callback Procedure](libpq-events.md#libpq-events-proc) - [32.14.3. Event Support Functions](libpq-events.md#libpq-events-funcs) - [32.14.4. Event Example](libpq-events.md#libpq-events-example) - [32.15. Environment Variables](libpq-envars.md) - [32.16. The Password File](libpq-pgpass.md) - [32.17. The Connection Service File](libpq-pgservice.md) - [32.18. LDAP Lookup of Connection Parameters](libpq-ldap.md) - [32.19. SSL Support](libpq-ssl.md) - [32.19.1. Client Verification of Server Certificates](libpq-ssl.md#libq-ssl-certificates) - [32.19.2. Client Certificates](libpq-ssl.md#libpq-ssl-clientcert) - [32.19.3. Protection Provided in Different Modes](libpq-ssl.md#libpq-ssl-protection) - [32.19.4. SSL Client File Usage](libpq-ssl.md#libpq-ssl-fileusage) - [32.19.5. SSL Library Initialization](libpq-ssl.md#libpq-ssl-initialize) - [32.20. OAuth Support](libpq-oauth.md) - [32.20.1. Authdata Hooks](libpq-oauth.md#libpq-oauth-authdata-hooks) - [32.20.2. Debugging and Developer Settings](libpq-oauth.md#libpq-oauth-debugging) - [32.21. Behavior in Threaded Programs](libpq-threading.md) - [32.22. Building libpq Programs](libpq-build.md) - [32.23. Example Programs](libpq-example.md) - [33. Large Objects](largeobjects.md) - [33.1. Introduction](lo-intro.md) - [33.2. Implementation Features](lo-implementation.md) - [33.3. Client Interfaces](lo-interfaces.md) - [33.3.1. Creating a Large Object](lo-interfaces.md#lo-create) - [33.3.2. Importing a Large Object](lo-interfaces.md#lo-import) - [33.3.3. Exporting a Large Object](lo-interfaces.md#lo-export) - [33.3.4. Opening an Existing Large Object](lo-interfaces.md#lo-open) - [33.3.5. Writing Data to a Large Object](lo-interfaces.md#lo-write) - [33.3.6. Reading Data from a Large Object](lo-interfaces.md#lo-read) - [33.3.7. Seeking in a Large Object](lo-interfaces.md#lo-seek) - [33.3.8. Obtaining the Seek Position of a Large Object](lo-interfaces.md#lo-tell) - [33.3.9. Truncating a Large Object](lo-interfaces.md#lo-truncate) - [33.3.10. Closing a Large Object Descriptor](lo-interfaces.md#lo-close) - [33.3.11. Removing a Large Object](lo-interfaces.md#lo-unlink) - [33.4. Server-Side Functions](lo-funcs.md) - [33.5. Example Program](lo-examplesect.md) - [34. ECPG — Embedded SQL in C](ecpg.md) - [34.1. The Concept](ecpg-concept.md) - [34.2. Managing Database Connections](ecpg-connect.md) - [34.2.1. Connecting to the Database Server](ecpg-connect.md#ecpg-connecting) - [34.2.2. Choosing a Connection](ecpg-connect.md#ecpg-set-connection) - [34.2.3. Closing a Connection](ecpg-connect.md#ecpg-disconnect) - [34.3. Running SQL Commands](ecpg-commands.md) - [34.3.1. Executing SQL Statements](ecpg-commands.md#ecpg-executing) - [34.3.2. Using Cursors](ecpg-commands.md#ecpg-cursors) - [34.3.3. Managing Transactions](ecpg-commands.md#ecpg-transactions) - [34.3.4. Prepared Statements](ecpg-commands.md#ecpg-prepared) - [34.4. Using Host Variables](ecpg-variables.md) - [34.4.1. Overview](ecpg-variables.md#ecpg-variables-overview) - [34.4.2. Declare Sections](ecpg-variables.md#ecpg-declare-sections) - [34.4.3. Retrieving Query Results](ecpg-variables.md#ecpg-retrieving) - [34.4.4. Type Mapping](ecpg-variables.md#ecpg-variables-type-mapping) - [34.4.5. Handling Nonprimitive SQL Data Types](ecpg-variables.md#ecpg-variables-nonprimitive-sql) - [34.4.6. Indicators](ecpg-variables.md#ecpg-indicators) - [34.5. Dynamic SQL](ecpg-dynamic.md) - [34.5.1. Executing Statements without a Result Set](ecpg-dynamic.md#ecpg-dynamic-without-result) - [34.5.2. Executing a Statement with Input Parameters](ecpg-dynamic.md#ecpg-dynamic-input) - [34.5.3. Executing a Statement with a Result Set](ecpg-dynamic.md#ecpg-dynamic-with-result) - [34.6. pgtypes Library](ecpg-pgtypes.md) - [34.6.1. Character Strings](ecpg-pgtypes.md#ecpg-pgtypes-cstrings) - [34.6.2. The numeric Type](ecpg-pgtypes.md#ecpg-pgtypes-numeric) - [34.6.3. The date Type](ecpg-pgtypes.md#ecpg-pgtypes-date) - [34.6.4. The timestamp Type](ecpg-pgtypes.md#ecpg-pgtypes-timestamp) - [34.6.5. The interval Type](ecpg-pgtypes.md#ecpg-pgtypes-interval) - [34.6.6. The decimal Type](ecpg-pgtypes.md#ecpg-pgtypes-decimal) - [34.6.7. errno Values of pgtypeslib](ecpg-pgtypes.md#ecpg-pgtypes-errno) - [34.6.8. Special Constants of pgtypeslib](ecpg-pgtypes.md#ecpg-pgtypes-constants) - [34.7. Using Descriptor Areas](ecpg-descriptors.md) - [34.7.1. Named SQL Descriptor Areas](ecpg-descriptors.md#ecpg-named-descriptors) - [34.7.2. SQLDA Descriptor Areas](ecpg-descriptors.md#ecpg-sqlda-descriptors) - [34.8. Error Handling](ecpg-errors.md) - [34.8.1. Setting Callbacks](ecpg-errors.md#ecpg-whenever) - [34.8.2. sqlca](ecpg-errors.md#ecpg-sqlca) - [34.8.3. `SQLSTATE` vs. `SQLCODE`](ecpg-errors.md#ecpg-sqlstate-sqlcode) - [34.9. Preprocessor Directives](ecpg-preproc.md) - [34.9.1. Including Files](ecpg-preproc.md#ecpg-include) - [34.9.2. The define and undef Directives](ecpg-preproc.md#ecpg-define) - [34.9.3. ifdef, ifndef, elif, else, and endif Directives](ecpg-preproc.md#ecpg-ifdef) - [34.10. Processing Embedded SQL Programs](ecpg-process.md) - [34.11. Library Functions](ecpg-library.md) - [34.12. Large Objects](ecpg-lo.md) - [34.13. C++ Applications](ecpg-cpp.md) - [34.13.1. Scope for Host Variables](ecpg-cpp.md#ecpg-cpp-scope) - [34.13.2. C++ Application Development with External C Module](ecpg-cpp.md#ecpg-cpp-and-c) - [34.14. Embedded SQL Commands](ecpg-sql-commands.md) - [ALLOCATE DESCRIPTOR](ecpg-sql-allocate-descriptor.md) - [CONNECT](ecpg-sql-connect.md) - [DEALLOCATE DESCRIPTOR](ecpg-sql-deallocate-descriptor.md) - [DECLARE](ecpg-sql-declare.md) - [DECLARE STATEMENT](ecpg-sql-declare-statement.md) - [DESCRIBE](ecpg-sql-describe.md) - [DISCONNECT](ecpg-sql-disconnect.md) - [EXECUTE IMMEDIATE](ecpg-sql-execute-immediate.md) - [GET DESCRIPTOR](ecpg-sql-get-descriptor.md) - [OPEN](ecpg-sql-open.md) - [PREPARE](ecpg-sql-prepare.md) - [SET AUTOCOMMIT](ecpg-sql-set-autocommit.md) - [SET CONNECTION](ecpg-sql-set-connection.md) - [SET DESCRIPTOR](ecpg-sql-set-descriptor.md) - [TYPE](ecpg-sql-type.md) - [VAR](ecpg-sql-var.md) - [WHENEVER](ecpg-sql-whenever.md) - [34.15. Informix Compatibility Mode](ecpg-informix-compat.md) - [34.15.1. Additional Types](ecpg-informix-compat.md#ecpg-informix-types) - [34.15.2. Additional/Missing Embedded SQL Statements](ecpg-informix-compat.md#ecpg-informix-statements) - [34.15.3. Informix-compatible SQLDA Descriptor Areas](ecpg-informix-compat.md#ecpg-informix-sqlda) - [34.15.4. Additional Functions](ecpg-informix-compat.md#ecpg-informix-functions) - [34.15.5. Additional Constants](ecpg-informix-compat.md#ecpg-informix-constants) - [34.16. Oracle Compatibility Mode](ecpg-oracle-compat.md) - [34.17. Internals](ecpg-develop.md) - [35. The Information Schema](information-schema.md) - [35.1. The Schema](infoschema-schema.md) - [35.2. Data Types](infoschema-datatypes.md) - [35.3. `information_schema_catalog_name`](infoschema-information-schema-catalog-name.md) - [35.4. `administrable_role_​authorizations`](infoschema-administrable-role-authorizations.md) - [35.5. `applicable_roles`](infoschema-applicable-roles.md) - [35.6. `attributes`](infoschema-attributes.md) - [35.7. `character_sets`](infoschema-character-sets.md) - [35.8. `check_constraint_routine_usage`](infoschema-check-constraint-routine-usage.md) - [35.9. `check_constraints`](infoschema-check-constraints.md) - [35.10. `collations`](infoschema-collations.md) - [35.11. `collation_character_set_​applicability`](infoschema-collation-character-set-applicab.md) - [35.12. `column_column_usage`](infoschema-column-column-usage.md) - [35.13. `column_domain_usage`](infoschema-column-domain-usage.md) - [35.14. `column_options`](infoschema-column-options.md) - [35.15. `column_privileges`](infoschema-column-privileges.md) - [35.16. `column_udt_usage`](infoschema-column-udt-usage.md) - [35.17. `columns`](infoschema-columns.md) - [35.18. `constraint_column_usage`](infoschema-constraint-column-usage.md) - [35.19. `constraint_table_usage`](infoschema-constraint-table-usage.md) - [35.20. `data_type_privileges`](infoschema-data-type-privileges.md) - [35.21. `domain_constraints`](infoschema-domain-constraints.md) - [35.22. `domain_udt_usage`](infoschema-domain-udt-usage.md) - [35.23. `domains`](infoschema-domains.md) - [35.24. `element_types`](infoschema-element-types.md) - [35.25. `enabled_roles`](infoschema-enabled-roles.md) - [35.26. `foreign_data_wrapper_options`](infoschema-foreign-data-wrapper-options.md) - [35.27. `foreign_data_wrappers`](infoschema-foreign-data-wrappers.md) - [35.28. `foreign_server_options`](infoschema-foreign-server-options.md) - [35.29. `foreign_servers`](infoschema-foreign-servers.md) - [35.30. `foreign_table_options`](infoschema-foreign-table-options.md) - [35.31. `foreign_tables`](infoschema-foreign-tables.md) - [35.32. `key_column_usage`](infoschema-key-column-usage.md) - [35.33. `parameters`](infoschema-parameters.md) - [35.34. `pg_edge_table_components`](infoschema-pg-edge-table-components.md) - [35.35. `pg_element_table_key_columns`](infoschema-pg-element-table-key-columns.md) - [35.36. `pg_element_table_labels`](infoschema-pg-element-table-labels.md) - [35.37. `pg_element_table_properties`](infoschema-pg-element-table-properties.md) - [35.38. `pg_element_tables`](infoschema-pg-element-tables.md) - [35.39. `pg_label_properties`](infoschema-pg-label-properties.md) - [35.40. `pg_labels`](infoschema-pg-labels.md) - [35.41. `pg_property_data_types`](infoschema-pg-property-data-types.md) - [35.42. `pg_property_graph_privileges`](infoschema-pg-property-graph-privileges.md) - [35.43. `property_graphs`](infoschema-property-graphs.md) - [35.44. `referential_constraints`](infoschema-referential-constraints.md) - [35.45. `role_column_grants`](infoschema-role-column-grants.md) - [35.46. `role_routine_grants`](infoschema-role-routine-grants.md) - [35.47. `role_table_grants`](infoschema-role-table-grants.md) - [35.48. `role_udt_grants`](infoschema-role-udt-grants.md) - [35.49. `role_usage_grants`](infoschema-role-usage-grants.md) - [35.50. `routine_column_usage`](infoschema-routine-column-usage.md) - [35.51. `routine_privileges`](infoschema-routine-privileges.md) - [35.52. `routine_routine_usage`](infoschema-routine-routine-usage.md) - [35.53. `routine_sequence_usage`](infoschema-routine-sequence-usage.md) - [35.54. `routine_table_usage`](infoschema-routine-table-usage.md) - [35.55. `routines`](infoschema-routines.md) - [35.56. `schemata`](infoschema-schemata.md) - [35.57. `sequences`](infoschema-sequences.md) - [35.58. sql_features](infoschema-sql-features.md) - [35.59. sql_implementation_info](infoschema-sql-implementation-info.md) - [35.60. sql_parts](infoschema-sql-parts.md) - [35.61. sql_sizing](infoschema-sql-sizing.md) - [35.62. `table_constraints`](infoschema-table-constraints.md) - [35.63. `table_privileges`](infoschema-table-privileges.md) - [35.64. `tables`](infoschema-tables.md) - [35.65. `transforms`](infoschema-transforms.md) - [35.66. `triggered_update_columns`](infoschema-triggered-update-columns.md) - [35.67. `triggers`](infoschema-triggers.md) - [35.68. `udt_privileges`](infoschema-udt-privileges.md) - [35.69. `usage_privileges`](infoschema-usage-privileges.md) - [35.70. `user_defined_types`](infoschema-user-defined-types.md) - [35.71. `user_mapping_options`](infoschema-user-mapping-options.md) - [35.72. `user_mappings`](infoschema-user-mappings.md) - [35.73. `view_column_usage`](infoschema-view-column-usage.md) - [35.74. `view_routine_usage`](infoschema-view-routine-usage.md) - [35.75. `view_table_usage`](infoschema-view-table-usage.md) - [35.76. `views`](infoschema-views.md)