<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.52 $ -->
 <reference id="ref.pgsql">
  <title>PostgreSQL functions</title>
  <titleabbrev>PostgreSQL</titleabbrev>

  <partintro>
   <warning>
    <para>
     Use of PostgreSQL module with PHP 4.0.6 is not recommended due to
     a bug in notice message handling.
    </para>
   </warning>
   <para>
    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/SQL3 language support, transaction integrity and type
    extensibility.  PostgreSQL is an open source descendant of this
    original Berkeley code.
   </para>
   <para>
    PostgreSQL database is Open Source product and available without
    cost. To use PostgreSQL support, you need PostgreSQL 6.5 or
    later. PostgreSQL 7.0 or later to enable all PostgreSQL module
    feature. PostgreSQL supports many charactor encoding including
    multibyte character encoding. The current version and more
    information about PostgreSQL is available at <ulink
    url="&url.pgsql;">www.postgresql.org</ulink>.
   </para>
   <para>
    In order to enable PostgreSQL support,
    &quot;--enable-pgsql[=DIR]&quot; is required when you compile
    PHP. If shared object module is available, PostgreSQL module may
    be loaded using <link linkend="ini.extension">extension</link>
    directive in php.ini or <function>dl</function>
    function. Supported ini directives are described in php.ini-dist
    file which comes with source distribution.
   </para>
   <para>
    Not all functions are supported by all builds. It depends on your
    libpq (The PostgreSQL C Client interface) versoin and how libpq is
    compiled. If there is missing function, libpq does not support
    the feature required for the function. 
   </para>
   <para>
    It is also important that you use newer libpq than PostgreSQL
    Server to be connected. If you use libpq older than PostgreSQL
    Server expects, you may have problems.
   </para>
   <para>
    Since version 6.3 (03/02/1998) PostgreSQL uses unix domain sockets
    by default. TCP port will not be openned by default. A table is
    shown below describing these new connection possibilities.  This
    socket will be found in <filename>/tmp/.s.PGSQL.5432</filename>.
    This option can be enabled with the '-i' flag to
    <command>postmaster</command> and it's meaning is: "listen on
    TCP/IP sockets as well as Unix domain sockets".
    <table>
     <title>Postmaster and PHP</title>
     <tgroup cols="3">
      <thead>
       <row>
	<entry>Postmaster</entry>
	<entry>PHP</entry>
	<entry>Status</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>postmaster &amp;</entry>
	<entry>pg_connect("dbname=MyDbName");</entry>
	<entry>OK</entry>
       </row>
       <row>
	<entry>postmaster -i &amp;</entry>
	<entry>pg_connect("dbname=MyDbName");</entry>
	<entry>OK</entry>
       </row>
       <row>
	<entry>postmaster &amp;</entry>
	<entry>pg_connect("host=localhost dbname=MyDbName");</entry>
	<entry>
	 Unable to connect to PostgreSQL server: connectDB() failed:
	 Is the postmaster running and accepting TCP/IP (with -i)
	 connection at 'localhost' on port '5432'? in
	 /path/to/file.php on line 20.
	</entry>
       </row>
       <row>
	<entry>postmaster -i &amp;</entry>
	<entry>pg_connect("host=localhost dbname=MyDbName");</entry>
	<entry>OK</entry>
       </row>
      </tbody>
     </tgroup>
    </table>
   </para>
   <para>
    A connection to PostgreSQL server can be established with the
    following value pairs set in the command string: <command>$conn =
    pg_connect("host=myHost port=myPort tty=myTTY options=myOptions
    dbname=myDB user=myUser password=myPassword ");
    </command>
   </para>
   <para>
    The previous syntax of:
    <command>
     $conn = pg_connect ("host", "port", "options", "tty", "dbname")
    </command>
    has been deprecated.
   </para>
   <para>
    Environmental variable affects PostgreSQL server/client
    behavior. For example, PostgreSQL module will lookup PGHOST
    environment variable when hostname is omitted in connection
    string. Supported environment variables are different from version
    to version. Refer to PostgreSQL Programmer's Manual (libpq -
    Environment Variables) for details.
   </para>
   <para>
    From PostgreSQL 7.1.0, text data type has 1GB as its max
    size. Older PostgreSQL's text data type is limitted by block
    size. (Default 8KB. Max 32KB defined at compile time)
   </para>
   <para>
    To use the large object (lo) interface, it is required to enclose
    large object functions within a transaction block. A transaction
    block starts with a SQL statement <command>begin</command> and if
    the transaction was valid ends with <command>commit</command> or
    <command>end</command>.  If the transaction fails the transaction
    should be closed with <command>rollback</command> or
    <command>abort</command>.
    <example>
     <title>Using Large Objects</title>
     <programlisting role="php">
<![CDATA[
<?php
    $database = pg_connect ("dbname=jacarta");
    pg_exec ($database, "begin");
    $oid = pg_locreate ($database);
    echo ("$oid\n");
    $handle = pg_loopen ($database, $oid, "w");
    echo ("$handle\n");
    pg_lowrite ($handle, "large object data");
    pg_loclose ($handle);
    pg_exec ($database, "commit");
?>
]]>
     </programlisting>
    </example>
    Do not close connection resource before closing large object
    resource.
   </para>
  </partintro>

  <refentry id="function.pg-close">
   <refnamediv>
    <refname>pg_close</refname>
    <refpurpose>Close a PostgreSQL connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_close</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_close</function> closes down the non-persistent
     connection to a PostgreSQL database associated with the given
     <parameter>connection</parameter> resource. It returns &true;, if
     <parameter>connection</parameter> is a valid connection resource,
     otherwise it return &false;.
    </para>
    <note>
     <para>
      <function>pg_close</function> is not usually necessary, as
      non-persistent open links are automatically closed at the end of
      the script's execution. <function>pg_close</function> will not
      close persistent links generated by
      <function>pg_pconnect</function>.
     </para>
    </note>
    <para>
     If there is open large object resource on the connection, do not
     close the connection before closing all large object resources.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-cmdtuples">
   <refnamediv>
    <refname>pg_cmdtuples</refname>
    <refpurpose>Returns number of affected records(tuples)</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_cmdtuples</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_cmdtuples</function> returns the number of tuples
     (instances/records/rows) affected by INSERT, UPDATE, and DELETE
     queries executed by <function>pg_exec</function>. If no tuple is
     affected by this function, it will return 0.
     <example>
      <title><function>pg_cmdtuples</function></title>
      <programlisting role="php">
<![CDATA[
<?php
$result = pg_exec ($conn, "INSERT INTO publisher VALUES ('Author')");
$cmdtuples = pg_cmdtuples ($result);
echo $cmdtuples . " tuples are affected.";
?>
]]>
      </programlisting>
     </example>
    </para>
    <para>
     See also <function>pg_exec</function> and
     <function>pg_numrows</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-connect">
   <refnamediv>
    <refname>pg_connect</refname>
    <refpurpose>Open a PostgreSQL connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>resource <function>pg_connect</function></funcdef>
      <paramdef>string <parameter>connection_string</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_connect</function> returns a connection resource
     that is needed by other PostgreSQL functions.
    </para>
    <para>
     <function>pg_connect</function> opens a connection to a
     PostgreSQL database specified by
     <parameter>connection_string</parameter>. It returns a connection
     resource on success. It returns &false;, if the connection could
     not be made. <parameter>connection_string</parameter> should be
     a quoted string.
     <example>
     <title>Using pg_connect</title>
     <programlisting role="php">
<![CDATA[
<?php
$dbconn = pg_connect ("dbname=mary");
//connect to a database named "mary"
$dbconn2 = pg_connect ("host=localhost port=5432 dbname=mary");
// connect to a database named "mary" on "localhost" at port "5432"
$dbconn3 = pg_connect ("host=sheep port=5432 dbname=mary user=lamb password=foo");
//connect to a database named "mary" on the host "sheep" with a username and password
$conn_string = "host=sheep port=5432 dbname=test user=lamb password=bar";
$dbconn4 = pg_connect ($conn_string);
//connect to a database named "test" on the host "sheep" with a username and password
?>
]]>
     </programlisting>
     </example>
     The arguments available for
     <parameter>connection_string</parameter> includes
     <parameter>host</parameter>, <parameter>port</parameter>,
     <parameter>tty</parameter>, <parameter>options</parameter>,
     <parameter>dbname</parameter>, <parameter>user</parameter>, and
     <parameter>password</parameter>.
    </para>
    <para>
     If a second call is made to <function>pg_connect</function> with
     the same <parameter>connection_string</parameter> arguments, no
     new connection will be established, but instead, the connection
     resource of the already opened connection will be returned. You
     can have multiple connections to the same database if you use
     different connection patameters. (i.e. Use different username)
    </para>
    <para>
     Syntax supports multiple parameters:
     <command>$conn = pg_connect ("host", "port", "options", "tty", "dbname")
     </command>
     has been deprecated.
    </para>
    <para>
     See also <function>pg_pconnect</function>,
     <function>pg_close</function>, <function>pg_host</function>,
     <function>pg_port</function>, <function>pg_tty</function>,
     <function>pg_options</function> and <function>pg_dbname</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-dbname">
   <refnamediv>
    <refname>pg_dbname</refname>
    <refpurpose>Get the database name</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_dbname</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_dbname</function> returns the name of the database
     that the given PostgreSQL <parameter>connection</parameter>
     resource. It retuns &false;, if <parameter>connection</parameter>
     is not a valid PostgreSQL connection resource.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-end-copy">
   <refnamediv>
    <refname>pg_end_copy</refname>
    <refpurpose>Sync with PostgreSQL backend</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_end_copy</function></funcdef>
      <paramdef>resource
       <parameter><optional>connection</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_end_copy</function> syncs PostgreSQL frontend
     (usually a web server process) with the PostgreSQL server after
     doing a copy operation performed by
     <function>pg_put_line</function>. <function>pg_end_copy</function>
     must be issued, otherwise the PostgreSQL server may get "out of
     sync" error with the frontend. It returns &true; for success,
     otherwise it returns &false;.
    </para>
    <para>
     For further details and an example, see also
     <function>pg_put_line</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-errormessage">
   <refnamediv>
    <refname>pg_errormessage</refname>
    <refpurpose>Get the last error message string of a connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_errormessage</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_errormessage</function> returns a string containing
     the last error message for given
     <parameter>connection</parameter>. It returns &false; on failure.
    </para>
    <para>
     <function>pg_errormessage</function> returns the last error
     message for given <parameter>connection</parameter> and error
     message may be overwritten if other libpq functions are called on
     the connection. PostgreSQL functions calls libpq functions
     internally. Therefore, details about the error may not be
     retrieved using the <function>pg_errormessage</function>
     function.  pg_result_error_message() will be added from 4.2.0 to
     get last error for the result resource.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-exec">
   <refnamediv>
    <refname>pg_exec</refname>
    <refpurpose>Execute a query</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>resource <function>pg_exec</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
      <paramdef>string <parameter>query</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_exec</function> returns a query result resource if
     query could be executed.  It returns &false; on failure or if
     connection is not a valid connection. Details about the error can
     be retrieved using the <function>pg_errormessage</function>
     function if connection is valid.
     <function>pg_errormessage</function> sends an SQL statement to
     the PostgreSQL database specified by the
     <parameter>connection</parameter> resource. The
     <parameter>connection</parameter> must be a valid connection that
     was returned by <function>pg_connect</function> or
     <function>pg_pconnect</function>. The return value of this
     function is an query result resource to be used to access the
     results from other PostgreSQL functions such as
     <function>pg_fetch_array</function>.
     <note>
      <simpara>
       PHP/FI returned 1 if the query was not expected to return data
       (inserts or updates, for example) and greater than 1 even on
       selects that did not return anything. No such assumption can be
       made in PHP.  
      </simpara>
     </note>
    </para>
    <para>
     See also <function>pg_fetch_array</function>,
     <function>pg_fetch_object</function>,
     <function>pg_result</function>, <function>pg_numrows</function>,
     <function>pg_cmdtuples</function> and
     <function>pg_numfields</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fetch-array">
   <refnamediv>
    <refname>pg_fetch_array</refname>
    <refpurpose>Fetch a row as an array</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>array <function>pg_fetch_array</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>row</parameter></paramdef>
      <paramdef>int 
       <parameter><optional>result_type</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fetch_array</function> returns an array that
     corresponds to the fetched row (tuples/records). It returns
     &false;, if there are no more rows.
    </para>
    <para>
     <function>pg_fetch_array</function> is an extended version of
     <function>pg_fetch_row</function>.  In addition to storing the
     data in the numeric indices (field index) to the result array, it
     also stores the data in associative indices (field name) by
     default.
    </para>
    <para>
     <parameter>row</parameter> is row (record) number to be
     retrived. First row is 0.
    </para>
    <para>
     <parameter>result_type</parameter> is optional parameter controls
     how return value is initilized.
     <parameter>result_type</parameter> is a constant and can take the
     following values: PGSQL_ASSOC, PGSQL_NUM, and PGSQL_BOTH.
     <function>pg_fetch_array</function> returns associative array
     that has field name as key for PGSQL_ASSOC. field index as key
     with PGSQL_NUM and both field name/index as key with
     PGSQL_BOTH. Default is PGSQL_BOTH.
     <note>
      <para>
       <parameter>result_type</parameter> was added in PHP 4.0.
      </para>
     </note>
    </para>
    <para>
     <function>pg_fetch_array</function> is NOT significantly
     slower than using <function>pg_fetch_row</function>, while it
     provides a significant ease of use.
    </para>
    <para>
     See also <function>pg_fetch_row</function> and
    <function>pg_fetch_object</function> and
    <function>pg_result</function>.
    </para>
    <para>
     <example>
      <title>PostgreSQL fetch array</title>
      <programlisting role="php">
       <![CDATA[
<?php 
$conn = pg_pconnect ("dbname=publisher");
if (!$conn) {
    echo "An error occured.\n";
    exit;
}

$result = pg_exec ($conn, "SELECT * FROM authors");
if (!$result) {
    echo "An error occured.\n";
    exit;
}

$arr = pg_fetch_array ($result, 0, PGSQL_NUM);
echo $arr[0] . " <- array\n";

$arr = pg_fetch_array ($result, 1, PGSQL_ASSOC);
echo $arr["author"] . " <- array\n";
?>
]]>
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fetch-object">
   <refnamediv>
    <refname>pg_fetch_object</refname>
    <refpurpose>Fetch a row as an object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>object <function>pg_fetch_object</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>row</parameter></paramdef>
      <paramdef>int 
       <parameter><optional>result_type</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fetch_object</function> returns an object with
     properties that correspond to the fetched row. It returns &false;
     if there are no more rows or error.
    </para>
    <para> 
     <function>pg_fetch_object</function> is similar to
     <function>pg_fetch_array</function>, with one difference - an
     object is returned, instead of an array.  Indirectly, that means
     that you can only access the data by the field names, and not by
     their offsets (numbers are illegal property names).
    </para>
    <para>
     <parameter>result_type</parameter> is optional parameter controls
     how return value is initilized.
     <parameter>result_type</parameter> is a constant and can take the
     following values: PGSQL_ASSOC, PGSQL_NUM, and PGSQL_BOTH.
     <function>pg_fetch_array</function> returns associative array
     that has field name as key for PGSQL_ASSOC. field index as key
     with PGSQL_NUM and both field name/index as key with
     PGSQL_BOTH. Default is PGSQL_BOTH.
    </para>
    <para>
     <note>
      <para>
       <parameter>result_type</parameter> was added in PHP 4.0.
      </para>
     </note>
    </para>
    <para>
     Speed-wise, the function is identical to
     <function>pg_fetch_array</function>, and almost as quick as
     <function>pg_fetch_row</function> (the difference is
     insignificant).
    </para>
    <para> 
     See also <function>pg_exec</function>, <function>pg_fetch_array</function>,
     <function>pg_fetch_row</function> and <function>pg_result</function>.
    </para>
    <para>
     <example>
      <title>Postgres fetch object</title>
      <programlisting role="php">
<![CDATA[
<?php 
$database = "verlag";
$db_conn = pg_connect ("host=localhost port=5432 dbname=$database");
if (!$db_conn): ?>
    <H1>Failed connecting to postgres database <?php echo $database ?></H1> <?php
    exit;
endif;

$qu = pg_exec ($db_conn, "SELECT * FROM verlag ORDER BY autor");
$row = 0; // postgres needs a row counter other dbs might not 

while ($data = pg_fetch_object ($qu, $row)):
    echo $data->autor." (";
    echo $data->jahr ."): ";
    echo $data->titel."<BR>";
    $row++;
endwhile; ?>

<PRE><?php
$fields[] = Array ("autor", "Author");
$fields[] = Array ("jahr",  "  Year");
$fields[] = Array ("titel", " Title");

$row= 0; // postgres needs a row counter other dbs might not
while ($data = pg_fetch_object ($qu, $row)):
    echo "----------\n";
    reset ($fields);
    while (list (,$item) = each ($fields)):
        echo $item[1].": ".$data->$item[0]."\n";
    endwhile;
    $row++;
endwhile;
echo "----------\n"; ?>
</PRE> <?php
pg_freeresult ($qu);
pg_close ($db_conn);
?>
]]>
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fetch-row">
   <refnamediv>
    <refname>pg_fetch_row</refname>
    <refpurpose>Get a row as an enumerated array</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>array <function>pg_fetch_row</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>row</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fetch_row</function> fetches one row of data from
     the result associated with the specified
     <parameter>result</parameter> resource.  The row (record) is
     returned as an array.  Each result column is stored in an array
     offset, starting at offset 0.
    </para>
    <para> 
     It returns an array that corresponds to the fetched row, or &false;
     if there are no more rows.
    </para>
    <para>
     See also: <function>pg_exec</function>,
     <function>pg_fetch_array</function>,
     <function>pg_fetch_object</function> and
     <function>pg_result</function>.
    </para>
    <para>
     <example>
      <title>Postgres fetch row</title>
      <programlisting role="php">
<![CDATA[
<?php 
$conn = pg_pconnect ("dbname=publisher");
if (!$conn) {
    echo "An error occured.\n";
    exit;
}

$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
    echo "An error occured.\n";
    exit;
}

$num = pg_numrows($result); 

for ($i=0; $i < $num; $i++) {
  $r = pg_fetch_row($result, $i);

  for ($j=0; $j < count($r); $j++) {
    echo "$r[$j]&nbsp;";
  }

  echo "<BR>";

}
 
?>
]]>
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fieldisnull">
   <refnamediv>
    <refname>pg_fieldisnull</refname>
    <refpurpose>Test if a field is &null;</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_fieldisnull</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>row</parameter></paramdef>
      <paramdef>mixed <parameter>field</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fieldisnull</function> test if a field is &null; or
     not. It returns 1 if the field in the given row is &null;. It
     returns 0 if the field in the given row is NOT &null;. Field can
     be specified as colum index (number) or fieldname (string). Row
     numbering starts at 0.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fieldname">
   <refnamediv>
    <refname>pg_fieldname</refname>
    <refpurpose>Returns the name of a field</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_fieldname</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>field_number</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fieldname</function> returns the name of the field
     occupying the given <parameter>field_number</parameter> in the
     given PostgreSQL <parameter>result</parameter> resource.  Field
     numbering starts from 0.
    </para>
    <para>
     See also <function>pg_filednum</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fieldnum">
   <refnamediv>
    <refname>pg_fieldnum</refname>
    <refpurpose>Returns the field number of the named field</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_fieldnum</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>string <parameter>field_name</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fieldnum</function> will return the number of the
     column (field) slot that corresponds to the
     <parameter>field_name</parameter> in the given PosgreSQL
     <parameter>result</parameter> resource.  Field numbering starts
     at 0.  This function will return -1 on error.
    </para>
    <para>
     See also <function>pg_fieldname</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fieldprtlen">
   <refnamediv>
    <refname>pg_fieldprtlen</refname>
    <refpurpose>Returns the printed length</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_fieldprtlen</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>row_number</parameter></paramdef>
      <paramdef>string <parameter>field_name</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fieldprtlen</function> returns the actual printed
     length (number of characters) of a specific value in a PostgreSQL
     <parameter>result</parameter>.  Row numbering starts at 0.  This
     function will return -1 on an error.
    </para>
    <para>
     See also <function>pg_fieldsize</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fieldsize">
   <refnamediv>
    <refname>pg_fieldsize</refname> 
    <refpurpose>
     Returns the internal storage size of the named field
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_fieldsize</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>field_number</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fieldsize</function> returns the internal storage
     size (in bytes) of the field number in the given PostgreSQL
     <parameter>result</parameter>. Field numbering starts at 0. A
     field size of -1 indicates a variable length field. This function
     will return &false; on error.
    </para>
    <para>
     See also <function>pg_fieldlen</function> and <function>pg_fieldtype</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-fieldtype">
   <refnamediv>
    <refname>pg_fieldtype</refname> 
    <refpurpose>
     Returns the type name for the corresponding field number
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_fieldtype</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>field_number</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_fieldtype</function> returns a string containing the
     type name of the given <parameter>field_number</parameter> in the
     given PostgreSQL <parameter>result</parameter> resource.  Field
     numbering starts at 0.
    </para>
    <para>
     See also <function>pg_fieldlen</function> and <function>pg_fieldname</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-freeresult">
   <refnamediv>
    <refname>pg_freeresult</refname> 
    <refpurpose>Free result memory</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_freeresult</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_freeresult</function> only needs to be called if you
     are worried about using too much memory while your script is
     running.  All result memory will automatically be freed when the
     script is finished.  But, if you are sure you are not going to
     need the result data anymore in a script, you may call
     <function>pg_freeresult</function> with the
     <parameter>result</parameter> resource as an argument and the
     associated result memory will be freed.
    </para>
    <para>
     See also <function>pg_exec</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-getlastoid">
   <refnamediv>
    <refname>pg_getlastoid</refname> 
    <refpurpose>Returns the last object's oid</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_getlastoid</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_getlastoid</function> is used to retrieve the
     <varname>oid</varname> assigned to an inserted tuple (record) if
     the result resource is used from the last command sent via
     <function>pg_exec</function> and was an SQL INSERT.  Returns a
     positive integer if there was a valid <varname>oid</varname>.  It
     returns &false; if an error occurs or the last command sent via
     <function>pg_exec</function> was not an INSERT or INSERT is
     failed.
    </para>
    <para>
     See also <function>pg_exec</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-host">
   <refnamediv>
    <refname>pg_host</refname> 
    <refpurpose>
     Returns the host name associated with the connection
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_host</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_host</function> returns the host name of the given
     PostgreSQL <parameter>connection</parameter> resource is
     connected to.
    </para>
    <para>
     See also <function>pg_connect</function> and
     <function>pg_pconnect</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-last-notice">
   <refnamediv>
    <refname>pg_last_notice</refname> 
    <refpurpose>
     Returns the last notice message from PostgreSQL server
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_last_notice</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_last_notice</function> returns the last notice
     message from PostgreSQL server specified by
     <parameter>connection</parameter>. PostgreSQL server set notice
     message when transaction cannot be continued. There one can avoid
     issuing useless SQL using <function>pg_exec</function> using
     <function>pg_last_notice</function>. There are other cases that
     PostgreSQL server sets notice message. Programmer must check
     contents of notice message if it is related to transaction or
     not.
    </para>
    <warning>
     <para>
      <function>pg_last_notice</function> is added form PHP
      4.0.6. However, PHP 4.0.6 has problem with notice message
      handling. Use of PostgreSQL module with PHP 4.0.6 is not recommended
      even if you are not using <function>pg_last_notice</function>.
     </para>
    </warning>
    <para>
     See also <function>pg_exec</function> and <function>pg_errormessage</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-loclose">
   <refnamediv>
    <refname>pg_loclose</refname>
    <refpurpose>Close a large object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_loclose</function></funcdef>
      <paramdef>resource <parameter>large_object</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_loclose</function> closes an Inversion Large
     Object. <parameter>large_object</parameter> is a resource for the
     large object from <function>pg_loopen</function>.
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_loopen</function>,
     <function>pg_locreate</function> and
     <function>pg_loimport</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-locreate">
   <refnamediv>
    <refname>pg_locreate</refname>
    <refpurpose>Create a large object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_locreate</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_locreate</function> creates an Inversion Large
     Object and returns the <varname>oid</varname> of the large
     object.  <parameter>connection</parameter> specifies a valid
     database connection opened by <function>pg_connect</function> or
     <function>pg_pconnect</function>.  PostgreSQL access modes
     INV_READ, INV_WRITE, and INV_ARCHIVE are not supported, the
     object is created always with both read and write
     access. INV_ARCHIVE has been removed from PostgreSQL itself
     (version 6.3 and above). It returns large object oid
     otherwise. It retuns &false;, if an error occurred,
     
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-loexport">
   <refnamediv>
    <refname>pg_loexport</refname>
    <refpurpose>Export a large object to file</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_loexport</function></funcdef>
      <paramdef>int
       <parameter>oid</parameter>
      </paramdef>
      <paramdef>string
       <parameter>pathname</parameter>
      </paramdef>
      <paramdef>resource
       <parameter><optional>connection</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     The <parameter>oid</parameter> argument specifies oid of the
     large object to export and the <parameter>pathname</parameter>
     argument specifies the pathname of the file. It returns &false; if
     an error occurred, &true; otherwise. 
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_loimport</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-loimport">
   <refnamediv>
    <refname>pg_loimport</refname>
    <refpurpose>Import a large object from file</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_loimport</function></funcdef>
      <paramdef>string <parameter>pathname</parameter></paramdef>
      <paramdef>resource
       <parameter><optional>connection</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     The <parameter>pathname</parameter> argument specifies the
     pathname of the file to be imported as a large object. It returns
     &false; if an error occurred, oid of the just created large
     object otherwise. 
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    &note.sm.uidcheck;
    <para>
     See also <function>pg_loexport</function> and
     <function>pg_loopen</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-loopen">
   <refnamediv>
    <refname>pg_loopen</refname>
    <refpurpose>Open a large object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>resource <function>pg_loopen</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
      <paramdef>int <parameter>oid</parameter></paramdef>
      <paramdef>string <parameter>mode</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_loopen</function> open an Inversion Large Object and
     returns large object resource. The resource encapsulates
     information about the connection. 
     <parameter>oid</parameter> specifies a valid large object oid and
     <parameter>mode</parameter> can be either "r", "w", or "rw". It
     returns &false; if there is an error.
    </para>
    <warning>
     <para>
      Do not close the database connection before closing the large
      object resource. 
     </para>
    </warning>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_loclose</function> and
     <function>pg_locreate</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-loread">
   <refnamediv>
    <refname>pg_loread</refname>
    <refpurpose>Read a large object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_loread</function></funcdef>
      <paramdef>resource <parameter>large_object</parameter></paramdef>
      <paramdef>int <parameter>len</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_loread</function> reads at most
     <parameter>len</parameter> bytes from a large object and returns
     it as a string.  <parameter>large_object</parameter> specifies a
     valid large object resource and<parameter>len</parameter>
     specifies the maximum allowable size of the large object
     segment. It returns &false; if there is an error.
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_loreadall</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-loreadall">
   <refnamediv>
    <refname>pg_loreadall</refname>
    <refpurpose>
     Read a entire large object and send straight to browser
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_loreadall</function></funcdef>
      <paramdef>resource <parameter>large_object</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_loreadall</function> reads a large object and passes
     it straight through to the browser after sending all pending
     headers. Mainly intended for sending binary data like images or
     sound. It returns number of bytes read. It returns &false;, if an
     error occured.
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_loread</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-lounlink">
   <refnamediv>
    <refname>pg_lounlink</refname>
    <refpurpose>Delete a large object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_lounlink</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
      <paramdef>int <parameter>oid</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_lounlink</function> deletes a large object with the
     <parameter>oid</parameter>. It rreturn &true; on success,
     otherwise returns &false;.
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_locreate</function> and
     <function>pg_loimport</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-lowrite">
   <refnamediv>
    <refname>pg_lowrite</refname>
    <refpurpose>Write a large object</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_lowrite</function></funcdef>
      <paramdef>resource <parameter>large_object</parameter></paramdef>
      <paramdef>string <parameter>data</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_lowrite</function> writes at most to a large object
     from a variable <parameter>data</parameter> and returns the number
     of bytes actually written, or &false; in the case of an error.
     <parameter>large_object</parameter> is a large object resource
     from <function>pg_loopen</function>. 
    </para>
    <para>
     To use the large object (lo) interface, it is necessary to
     enclose it within a transaction block.
    </para>
    <para>
     See also <function>pg_locreate</function> and
     <function>pg_loopen</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-numfields">
   <refnamediv>
    <refname>pg_numfields</refname> 
    <refpurpose>Returns the number of fields</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_numfields</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_numfields</function> returns the number of fields
     (columns) in a PostgreSQL <parameter>result</parameter>. The
     argument is a result resource returned by
     <function>pg_exec</function>. This function will return -1 on
     error.
    </para>
    <para>
     See also <function>pg_numrows</function> and
     <function>pg_cmdtuples</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-numrows">
   <refnamediv>
    <refname>pg_numrows</refname> 
    <refpurpose>Returns the number of rows</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_numrows</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_numrows</function> will return the number of rows in a
     PostgreSQL result.  The argument is a result resource
     returned by <function>pg_exec</function>. This function will
     return -1 on error.
    </para>
    <para>
     See also <function>pg_numfields</function> and
     <function>pg_cmdtuples</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-options">
   <refnamediv>
    <refname>pg_options</refname> 
    <refpurpose>Get the options associated with the connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_options</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_options</function> will return a string containing
     the options specified on the given PostgreSQL
     <parameter>connection</parameter> resource.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-pconnect">
   <refnamediv>
    <refname>pg_pconnect</refname>
    <refpurpose>Open a persistent PostgreSQL connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_pconnect</function></funcdef>
      <paramdef>string <parameter>connection_string</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_pconnect</function> opens a connection to a
     PostgreSQL database.  It returns a connection resource that is
     needed by other PostgreSQL functions.
    </para>
    <para>
     It returns a connection resource on success, or &false; if the
     connection could not be made. The arguments should be within a
     quoted string.  The arguments available include
     <parameter>host</parameter>, <parameter>port</parameter>,
     <parameter>tty</parameter>, <parameter>options</parameter>,
     <parameter>dbname</parameter>, <parameter>user</parameter>, and
     <parameter>password</parameter>.
    </para>
     <example>
     <title>Using pg_connect</title>
     <programlisting role="php">
<![CDATA[
<?php
$dbconn = pg_connect ("dbname=mary");
//connect to a database named "mary"
$dbconn2 = pg_connect ("host=localhost port=5432 dbname=mary");
// connect to a database named "mary" on "localhost" at port "5432"
$dbconn3 = pg_connect ("host=sheep port=5432 dbname=mary user=lamb password=foo");
//connect to a database named "mary" on the host "sheep" with a username and password
$conn_string = "host=sheep port=5432 dbname=test user=lamb password=bar";
$dbconn4 = pg_connect ($conn_string);
//connect to a database named "test" on the host "sheep" with a username and password
?>
]]>
     </programlisting>
     </example>
    <para>
     If a second call is made to <function>pg_pconnect</function> with
     the same arguments, no new connection will be established, but
     instead, the connection resource of the already opened connection
     will be returned. You can have multiple connections to the same
     database if you use different connection patameters. (i.e. Use
     different username)
    </para>
    <para>
     The previous syntax of:
     <command>$conn = pg_pconnect ("host", "port", "options", "tty",
    "dbname")
     </command>
     has been deprecated.
    </para>
    <para>
     To enable persistent connection, <link
     linkend="ini.pgsql.allow-persistent">pgsql.allow_persistent</link>
     php.ini directive must be set to &quot;On&quot;. (Default is On)
     Max number of persistent connection can be defined by <link
     linkend="ini.pgsql.max-persistent">pgsql.max_persistent</link>
     php.ini directive. (Default is -1 which is no limit) Total number
     of connection can be set by <link
     linkend="ini.pgsql.max-links">pgsql.max_links</link> php.ini
     directive.
    </para>
    <para>
     <function>pg_close</function> will not close persistent links
     generated by <function>pg_pconnect</function>.  
    </para>
    <para>
     See also <function>pg_connect</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-port">
   <refnamediv>
    <refname>pg_port</refname>
    <refpurpose>
     Return the port number associated with the connection
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_port</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_port</function> returns the port number that the
     given PostgreSQL <parameter>connection</parameter> resource is
     connected to.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-put-line">
   <refnamediv>
    <refname>pg_put_line</refname>
    <refpurpose>Send a NULL-terminated string to PostgreSQL backend</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_put_line</function></funcdef>
      <paramdef>resource
       <parameter><optional>connection</optional></parameter>
      </paramdef>
      <paramdef>string <parameter>data</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_put_line</function> sends a NULL-terminated string
     to the PostgreSQL backend server. This is useful for example for
     very high-speed inserting of data into a table, initiated by
     starting a PostgreSQL copy-operation. That final NULL-character
     is added automatically. It returns &true; if successfull, &false;
     otherwise.
    </para>
    <note>
     <para> 
      Note the application must explicitly send the two characters "\."
      on a final line to indicate to the backend that it has finished
      sending its data.
     </para>
    </note>
    <para>
     See also <function>pg_end_copy</function>.
     <example>
      <title>High-speed insertion of data into a table</title>
      <programlisting role="php">
<![CDATA[
<?php 
    $conn = pg_pconnect ("dbname=foo");
    pg_exec($conn, "create table bar (a int4, b char(16), d float8)");
    pg_exec($conn, "copy bar from stdin");
    pg_put_line($conn, "3\thello world\t4.5\n");
    pg_put_line($conn, "4\tgoodbye world\t7.11\n");
    pg_put_line($conn, "\\.\n");
    pg_end_copy($conn);
?>
]]>
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-result">
   <refnamediv>
    <refname>pg_result</refname>
    <refpurpose>Returns values from a result resource</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>mixed <function>pg_result</function></funcdef>
      <paramdef>resource <parameter>result</parameter></paramdef>
      <paramdef>int <parameter>row_number</parameter></paramdef>
      <paramdef>mixed <parameter>field</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_result</function> returns values from a
     <parameter>result</parameter> resource returned by
     <function>pg_exec</function>. <parameter>row_number</parameter>
     is integer.  <parameter>field</parameter> is field name(string)
     or field index (integer). The <parameter>row_number</parameter>
     and <parameter>field</parameter> sepcify what cell in the table
     of results to return.  Row numbering starts from 0.  Instead of
     naming the field, you may use the field index as an unquoted
     number.  Field indices start from 0.
    </para>
    <para>
     PostgreSQL has many built in types and only the basic ones are
     directly supported here.  All forms of <type>integer</type>,
     <type>boolean</type> and void 
     <!-- FIXME: is that still true? PHP supports boolean&null now... --> 
     <!-- Yes, supporting boolean&null breaks scripts. pg_fetch_array() 
          can be used instead. I might take of this issue with additional 
          ini directive. yohgaki@php.net --> 
     types are
     returned as <type>integer</type> values.  All forms of float, and
     real types are returned as <type>float</type> values.  All other
     types, including arrays are returned as strings formatted in the
     same default PostgreSQL manner that you would see in the
     <command>psql</command> program.  
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-set-client-encoding">
   <refnamediv>
    <refname>pg_set_client_encoding</refname>
    <refpurpose>
     Set the client encoding
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>int <function>pg_set_client_encoding</function></funcdef>
      <paramdef>resource 
       <parameter><optional>connection</optional></parameter>
      </paramdef>
      <paramdef>string <parameter>encoding</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_set_client_encoding</function> sets the client
     encoding and return 0 if success or -1 if error.
    </para>
    <para>
     <parameter>encoding</parameter> is the client
     encoding and can be either :
     SQL_ASCII, EUC_JP, EUC_CN, EUC_KR, EUC_TW, UNICODE,
     MULE_INTERNAL, LATINX (X=1...9), KOI8, WIN, ALT,
     SJIS, BIG5, WIN1250.
    </para>
    <note>
     <para>
      This function requires PHP-4.0.2 or higher and PostgreSQL-7.0 or
      higher. If libpq is compiled without multibyte encoding support,
      <function>pg_set_client_encoding</function> will not be
      included. Refer to PostgreSQL manual to enable multibyte support
      for PostgreSQL server and libpq.
     </para>
     <para>
      The function used to be called
      <function>pg_setclientencoding</function>.
     </para>
    </note>
    <para>
     See also <function>pg_client_encoding</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-client-encoding">
   <refnamediv>
    <refname>pg_client_encoding</refname>
    <refpurpose>
     Get the client encoding
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>      
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_client_encoding</function></funcdef>
      <paramdef>resource 
       <parameter><optional>connection</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_client_encoding</function> returns the client
     encoding as the string. The returned string should be either :
     SQL_ASCII, EUC_JP, EUC_CN, EUC_KR, EUC_TW, UNICODE,
     MULE_INTERNAL, LATINX (X=1...9), KOI8, WIN, ALT, SJIS, BIG5,
     WIN1250.
    </para>
    <note>
     <para>
      This function requires PHP-4.0.2 or higher and PostgreSQL-7.0 or
      higher.
     </para>
     <para>
      The function used to be called
      <function>pg_clientencoding</function>.
     </para>
    </note>
    <para>
     See also <function>pg_set_client_encoding</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-trace">
   <refnamediv>
    <refname>pg_trace</refname>
    <refpurpose>Enable tracing a PostgreSQL connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_trace</function></funcdef>
      <paramdef>string
       <parameter>pathname</parameter>
      </paramdef>
      <paramdef>string
       <parameter><optional>mode</optional></parameter>
      </paramdef>
      <paramdef>resource
       <parameter><optional>connection</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_trace</function> enables tracing of the PostgreSQL
     frontend/backend communication to a debugging file specified as
     <parameter>pathname</parameter>. To fully understand the results,
     one needs to be familiar with the internals of PostgreSQL
     communication protocol.  For those who are not, it can still be
     useful for tracing errors in queries sent to the server, you
     could do for example <command>grep '^To backend'
     trace.log</command> and see what query actually were sent to the
     PostgreSQL server. For more information, refer to PostgreSQL
     manual.
    </para>
    <para>
     <parameter>Filename</parameter> and <parameter>mode</parameter>
     are the same as in <function>fopen</function>
     (<parameter>mode</parameter> defaults to 'w'),
     <parameter>connection</parameter> specifies the connection to
     trace and defaults to the last one opened.
    </para>
    <para>
     It returns &true; if <parameter>pathname</parameter> could be opened
     for logging, &false; otherwise.
    </para>
    <para>
     See also <function>fopen</function> and
     <function>pg_untrace</function>.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-tty">
   <refnamediv>
    <refname>pg_tty</refname>
    <refpurpose>
     Return the tty name associated with the connection
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>string <function>pg_tty</function></funcdef>
      <paramdef>resource <parameter>connection</parameter></paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     <function>pg_tty</function> returns the tty name that server
     side debugging output is sent to on the given PostgreSQL
     <parameter>connection</parameter> resource.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.pg-untrace">
   <refnamediv>
    <refname>pg_untrace</refname>
    <refpurpose>Disable tracing of a PostgreSQL connection</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
    <funcsynopsis>
     <funcprototype>
      <funcdef>bool <function>pg_untrace</function></funcdef>
      <paramdef>resource
       <parameter><optional>connection</optional></parameter>
      </paramdef>
     </funcprototype>
    </funcsynopsis>
    <para>
     Stop tracing started by <function>pg_trace</function>.
     <parameter>connection</parameter> specifies the connection that was
     traced and defaults to the last one opened.
    </para>
    <para>
     Returns always &true;.
    </para>
    <para>
     See also <function>pg_trace</function>.
    </para>
   </refsect1>
  </refentry>

 </reference>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->