# PostgreSQL Functions

## Introduction

PostgreSQL database is Open Source product and available without cost. Postgres, developed originally in the UC Berkeley Computer Science Department, pioneered many of the object-relational concepts now becoming available in some commercial databases. It provides SQL92/SQL99 language support, transactions, referential integrity, stored procedures and type extensibility. PostgreSQL is an open source descendant of this original Berkeley code.

## Requirements

To use PostgreSQL support, you need PostgreSQL 6.5 or later, PostgreSQL 8.0 or later to enable all PostgreSQL module features. PostgreSQL supports many character encodings including multibyte character encoding. The current version and more information about PostgreSQL is available at » http://www.postgresql.org/ and the » PostgreSQL Documentation.

## Installation

In order to enable PostgreSQL support, --with-pgsql[=DIR] is required when you compile PHP. DIR is the PostgreSQL base install directory, defaults to /usr/local/pgsql. If shared object module is available, PostgreSQL module may be loaded using extension directive in php.ini or dl() function.

## Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

PostgreSQL configuration options
Name | Default | Changeable | Changelog
--- | --- | --- | ---
pgsql.allow_persistent | "1" | PHP_INI_SYSTEM |
pgsql.max_persistent | "-1" | PHP_INI_SYSTEM |
pgsql.max_links | "-1" | PHP_INI_SYSTEM |
pgsql.auto_reset_persistent | "0" | PHP_INI_SYSTEM | Available since PHP 4.2.0.
pgsql.ignore_notice | "0" | PHP_INI_ALL | Available since PHP 4.3.0.
pgsql.log_notice | "0" | PHP_INI_ALL | Available since PHP 4.3.0.

For further details and definitions of the PHP_INI_* constants, see the php.ini directives.

Here's a short explanation of the configuration directives.

`pgsql.allow_persistent` boolean

  Whether to allow persistent Postgres connections.

`pgsql.max_persistent` integer

  The maximum number of persistent Postgres connections per process.

`pgsql.max_links` integer

  The maximum number of Postgres connections per process, including persistent connections.

`pgsql.auto_reset_persistent` integer

  Detect broken persistent links with pg_pconnect(). Needs a little overhead.

`pgsql.ignore_notice` integer

  Whether or not to ignore PostgreSQL backend notices.

`pgsql.log_notice` integer

  Whether or not to log PostgreSQL backends notice messages. The PHP directive pgsql.ignore_notice must be off in order to log notice messages.

## Resource Types

There are two resource types used in the PostgreSQL module. The first one is the link identifier for a database connection, the second a resource which holds the result of a query.

## Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

`PGSQL_ASSOC` (integer)
  Passed to pg_fetch_array(). Return an associative array of field names and values.
`PGSQL_NUM` (integer)
  Passed to pg_fetch_array(). Return a numerically indexed array of field numbers and values.
`PGSQL_BOTH` (integer)
  Passed to pg_fetch_array(). Return an array of field values that is both numerically indexed (by field number) and associated (by field name).
`PGSQL_CONNECT_FORCE_NEW` (integer)
  Passed to pg_connect() to force the creation of a new connection, rather then re-using an existing identical connection.
`PGSQL_CONNECTION_BAD` (integer)
  Returned by pg_connection_status() indicating that the database connection is in an invalid state.
`PGSQL_CONNECTION_OK` (integer)
  Returned by pg_connection_status() indicating that the database connection is in a valid state.
`PGSQL_SEEK_SET` (integer)
  Passed to pg_lo_seek(). Seek operation is to begin from the start of the object.
`PGSQL_SEEK_CUR` (integer)
  Passed to pg_lo_seek(). Seek operation is to begin from the current position.
`PGSQL_SEEK_END` (integer)
  Passed to pg_lo_seek(). Seek operation is to begin from the end of the object.
`PGSQL_EMPTY_QUERY` (integer)
  Returned by pg_result_status(). The string sent to the server was empty.
`PGSQL_COMMAND_OK` (integer)
  Returned by pg_result_status(). Successful completion of a command returning no data.
`PGSQL_TUPLES_OK` (integer)
  Returned by pg_result_status(). Successful completion of a command returning data (such as a SELECT or SHOW).
`PGSQL_COPY_OUT` (integer)
  Returned by pg_result_status(). Copy Out (from server) data transfer started.
`PGSQL_COPY_IN` (integer)
  Returned by pg_result_status(). Copy In (to server) data transfer started.
`PGSQL_BAD_RESPONSE` (integer)
  Returned by pg_result_status(). The server's response was not understood.
`PGSQL_NONFATAL_ERROR` (integer)
  Returned by pg_result_status(). A nonfatal error (a notice or warning) occurred.
`PGSQL_FATAL_ERROR` (integer)
  Returned by pg_result_status(). A fatal error occurred.
`PGSQL_TRANSACTION_IDLE` (integer)
  Returned by pg_transaction_status(). Connection is currently idle, not in a transaction.
`PGSQL_TRANSACTION_ACTIVE` (integer)
  Returned by pg_transaction_status(). A command is in progress on the connection. A query has been sent via the connection and not yet completed.
`PGSQL_TRANSACTION_INTRANS` (integer)
  Returned by pg_transaction_status(). The connection is idle, in a transaction block.
`PGSQL_TRANSACTION_INERROR` (integer)
  Returned by pg_transaction_status(). The connection is idle, in a failed transaction block.
`PGSQL_TRANSACTION_UNKNOWN` (integer)
  Returned by pg_transaction_status(). The connection is bad.
`PGSQL_DIAG_SEVERITY` (integer)
  Passed to pg_result_error_field(). The severity; the field contents are ERROR, FATAL, or PANIC (in an error message), or WARNING, NOTICE, DEBUG, INFO, or LOG (in a notice message), or a localized translation of one of these. Always present.
`PGSQL_DIAG_SQLSTATE` (integer)
  Passed to pg_result_error_field(). The SQLSTATE code for the error. The SQLSTATE code identifies the type of error that has occurred; it can be used by front-end applications to perform specific operations (such as error handling) in response to a particular database error. This field is not localizable, and is always present.
`PGSQL_DIAG_MESSAGE_PRIMARY` (integer)
  Passed to pg_result_error_field(). The primary human-readable error message (typically one line). Always present.
`PGSQL_DIAG_MESSAGE_DETAIL` (integer)
  Passed to pg_result_error_field(). Detail: an optional secondary error message carrying more detail about the problem. May run to multiple lines.
`PGSQL_DIAG_MESSAGE_HINT` (integer)
  Passed to pg_result_error_field(). Hint: an optional suggestion what to do about the problem. This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts. May run to multiple lines.
`PGSQL_DIAG_STATEMENT_POSITION` (integer)
  Passed to pg_result_error_field(). A string containing a decimal integer indicating an error cursor position as an index into the original statement string. The first character has index 1, and positions are measured in characters not bytes.
`PGSQL_DIAG_INTERNAL_POSITION` (integer)
  Passed to pg_result_error_field(). This is defined the same as the `PG_DIAG_STATEMENT_POSITION` field, but it is used when the cursor position refers to an internally generated command rather than the one submitted by the client. The `PG_DIAG_INTERNAL_QUERY` field will always appear when this field appears.
`PGSQL_DIAG_INTERNAL_QUERY` (integer)
  Passed to pg_result_error_field(). The text of a failed internally-generated command. This could be, for example, a SQL query issued by a PL/pgSQL function.
`PGSQL_DIAG_CONTEXT` (integer)
  Passed to pg_result_error_field(). An indication of the context in which the error occurred. Presently this includes a call stack traceback of active procedural language functions and internally-generated queries. The trace is one entry per line, most recent first.
`PGSQL_DIAG_SOURCE_FILE` (integer)
  Passed to pg_result_error_field(). The file name of the PostgreSQL source-code location where the error was reported.
`PGSQL_DIAG_SOURCE_LINE` (integer)
  Passed to pg_result_error_field(). The line number of the PostgreSQL source-code location where the error was reported.
`PGSQL_DIAG_SOURCE_FUNCTION` (integer)
  Passed to pg_result_error_field(). The name of the PostgreSQL source-code function reporting the error.
`PGSQL_ERRORS_TERSE` (integer)
  Passed to pg_set_error_verbosity(). Specified that returned messages include severity, primary text, and position only; this will normally fit on a single line.
`PGSQL_ERRORS_DEFAULT` (integer)
  Passed to pg_set_error_verbosity(). The default mode produces messages that include the above plus any detail, hint, or context fields (these may span multiple lines).
`PGSQL_ERRORS_VERBOSE` (integer)
  Passed to pg_set_error_verbosity(). The verbose mode includes all available fields.
`PGSQL_STATUS_LONG` (integer)
  Passed to pg_result_status(). Indicates that numerical result code is desired.
`PGSQL_STATUS_STRING` (integer)
  Passed to pg_result_status(). Indicates that textual result command tag is desired.
`PGSQL_CONV_IGNORE_DEFAULT` (integer)
  Passed to pg_convert(). Ignore default values in the table during conversion.
`PGSQL_CONV_FORCE_NULL` (integer)
  Passed to pg_convert(). Use SQL NULL in place of an empty string.
`PGSQL_CONV_IGNORE_DEFAULT` (integer)
  Passed to pg_convert(). Ignore conversion of `NULL` into SQL NOT NULL columns.

## Notes

> Note: Not all functions are supported by all builds. It depends on your libpq (The PostgreSQL C client library) version and how libpq is compiled. If PHP PostgreSQL extensions are missing, then it is because your libpq version does not support them.

> Note: Most PostgreSQL functions accept `connection` as the first optional parameter. If it is not provided, the last opened connection is used. If it doesn't exist, functions return `FALSE`.

> Note: PostgreSQL automatically folds all identifiers (e.g. table/column names) to lower-case values at object creation time and at query time. To force the use of mixed or upper case identifiers, you must escape the identifier using double quotes ("").

> Note: PostgreSQL does not have special commands for fetching database schema information (eg. all the tables in the current database). Instead, there is a standard schema named information_schema in PostgreSQL 7.4 and above containing system views with all the necessary information, in an easily queryable form. See the » PostgreSQL Documentation for full details.

## Examples

This simple example shows how to connect, execute a query, print resulting rows and disconnect from a PostgreSQL database.

Example#1 PostgreSQL extension overview example

`<?php
// Connecting, selecting database
$dbconn = pg_connect("host=localhost dbname=publishing user=www password=foo")
or die('Could not connect: ' . pg_last_error());
// Performing SQL query
$query = 'SELECT * FROM authors';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
// Printing results in HTML
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// Free resultset
pg_free_result($result);
// Closing connection
pg_close($dbconn);
?>`

## Table of Contents

- pg_affected_rows — Returns number of affected records (tuples)
- pg_cancel_query — Cancel an asynchronous query
- pg_client_encoding — Gets the client encoding
- pg_close — Closes a PostgreSQL connection
- pg_connect — Open a PostgreSQL connection
- pg_connection_busy — Get connection is busy or not
- pg_connection_reset — Reset connection (reconnect)
- pg_connection_status — Get connection status
- pg_convert — Convert associative array values into suitable for SQL statement
- pg_copy_from — Insert records into a table from an array
- pg_copy_to — Copy a table to an array
- pg_dbname — Get the database name
- pg_delete — Deletes records
- pg_end_copy — Sync with PostgreSQL backend
- pg_escape_bytea — Escape a string for insertion into a bytea field
- pg_escape_string — Escape a string for insertion into a text field
- pg_execute — Sends a request to execute a prepared statement with given parameters, and waits for the result.
- pg_fetch_all_columns — Fetches all rows in a particular result column as an array
- pg_fetch_all — Fetches all rows from a result as an array
- pg_fetch_array — Fetch a row as an array
- pg_fetch_assoc — Fetch a row as an associative array
- pg_fetch_object — Fetch a row as an object
- pg_fetch_result — Returns values from a result resource
- pg_fetch_row — Get a row as an enumerated array
- pg_field_is_null — Test if a field is SQL NULL
- pg_field_name — Returns the name of a field
- pg_field_num — Returns the field number of the named field
- pg_field_prtlen — Returns the printed length
- pg_field_size — Returns the internal storage size of the named field
- pg_field_table — Returns the name or oid of the tables field
- pg_field_type_oid — Returns the type ID (OID) for the corresponding field number
- pg_field_type — Returns the type name for the corresponding field number
- pg_free_result — Free result memory
- pg_get_notify — Gets SQL NOTIFY message
- pg_get_pid — Gets the backend's process ID
- pg_get_result — Get asynchronous query result
- pg_host — Returns the host name associated with the connection
- pg_insert — Insert array into table
- pg_last_error — Get the last error message string of a connection
- pg_last_notice — Returns the last notice message from PostgreSQL server
- pg_last_oid — Returns the last row's OID
- pg_lo_close — Close a large object
- pg_lo_create — Create a large object
- pg_lo_export — Export a large object to file
- pg_lo_import — Import a large object from file
- pg_lo_open — Open a large object
- pg_lo_read_all — Reads an entire large object and send straight to browser
- pg_lo_read — Read a large object
- pg_lo_seek — Seeks position within a large object
- pg_lo_tell — Returns current seek position a of large object
- pg_lo_unlink — Delete a large object
- pg_lo_write — Write to a large object
- pg_meta_data — Get meta data for table
- pg_num_fields — Returns the number of fields in a result
- pg_num_rows — Returns the number of rows in a result
- pg_options — Get the options associated with the connection
- pg_parameter_status — Looks up a current parameter setting of the server.
- pg_pconnect — Open a persistent PostgreSQL connection
- pg_ping — Ping database connection
- pg_port — Return the port number associated with the connection
- pg_prepare — Submits a request to create a prepared statement with the given parameters, and waits for completion.
- pg_put_line — Send a NULL-terminated string to PostgreSQL backend
- pg_query_params — Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text.
- pg_query — Execute a query
- pg_result_error_field — Returns an individual field of an error report.
- pg_result_error — Get error message associated with result
- pg_result_seek — Set internal row offset in result resource
- pg_result_status — Get status of query result
- pg_select — Select records
- pg_send_execute — Sends a request to execute a prepared statement with given parameters, without waiting for the result(s).
- pg_send_prepare — Sends a request to create a prepared statement with the given parameters, without waiting for completion.
- pg_send_query_params — Submits a command and separate parameters to the server without waiting for the result(s).
- pg_send_query — Sends asynchronous query
- pg_set_client_encoding — Set the client encoding
- pg_set_error_verbosity — Determines the verbosity of messages returned by pg_last_error and pg_result_error.
- pg_trace — Enable tracing a PostgreSQL connection
- pg_transaction_status — Returns the current in-transaction status of the server.
- pg_tty — Return the TTY name associated with the connection
- pg_unescape_bytea — Unescape binary for bytea type
- pg_untrace — Disable tracing of a PostgreSQL connection
- pg_update — Update table
- pg_version — Returns an array with client, protocol and server version (when available)