---
name: "Pg"
section: "3pm"
platform: "linux"
package: "libpg-perl"
version: "1:2.1.1-11"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Pg"
---

# Pg(3pm)

Perl5 extension for PostgreSQL

## NAME

Pg - Perl5 extension for PostgreSQL

## SYNOPSIS

```
    use Pg;
    $conn = Pg::connectdb("dbname=template1");
    $res  = $conn->exec("SELECT * from pg_user");
    while (@row = $res->fetchrow) {
        print join(" ", @row);
    }
```

## DESCRIPTION

The Pg module permits you to access all functions of the  Libpq interface of PostgreSQL. Libpq is the programmer's  interface to PostgreSQL. For examples of how to  use this module, look at the file test.pl.

## GUIDELINES

This perl interface uses blessed references as objects.  After creating a new connection or result object,  the relevant Libpq functions serve as virtual methods.  You do not have to care about freeing the connection-  and result-structures. Perl calls the destructor whenever  the last reference to an object goes away.

The method fetchrow can be used to fetch the next row from  the server: while (@row = `$result`-\>fetchrow). Columns which have NULL as value will be set to `"undef"`.

Pg.pm contains one convenience function: doQuery. It fills a two-dimensional array with the result of your query. Usage:

```
    Pg::doQuery($conn, "select attr1, attr2 from tbl", \@ary);
    for $i ( 0 .. $#ary ) {
        for $j ( 0 .. $#{$ary[$i]} ) {
            print "$ary[$i][$j]\t";
        }
        print "\n";
    }
```

Notice the inner loop !

## FUNCTIONS

The functions have been divided into three sections:  Connection, Result, Large Objects. For details please  read libpq.

### 1. Connection

With these functions you can establish and close a connection to a  database. In Libpq a connection is represented by a structure called PGconn.

When opening a connection a given database name is always converted to  lower-case, unless it is surrounded by double quotes. All unspecified  parameters are replaced by environment variables or by hard coded defaults:

```
    parameter     environment variable  hard coded default
    ------------------------------------------------------
    host           PGHOST                localhost
    port           PGPORT                5432
    options        PGOPTIONS             ""
    tty            PGTTY                 ""
    dbname         PGDATABASE            current userid
    user           PGUSER                current userid
    password       PGPASSWORD            ""
    passwordfile   PGPASSWORDFILE        ""
```

Using appropriate methods you can access almost all fields of the  returned PGconn structure.

```
    $conn = Pg::setdbLogin($pghost, $pgport, $pgoptions, $pgtty, $dbname, $login, $pwd)
```

Opens a new connection to the backend. The connection identifier `$conn`  ( a pointer to the PGconn structure ) must be used in subsequent commands  for unique identification. Before using `$conn` you should call `$conn`-\>status  to ensure, that the connection was properly made.  Closing a connection is done by deleting the connection handle, eg 'undef `$conn`;'.

```
    $conn = Pg::setdb($pghost, $pgport, $pgoptions, $pgtty, $dbname)
```

The method setdb should be used when username/password authentication is  not needed.

```
    $conn = Pg::connectdb("option1=value option2=value ...")
```

Opens a new connection to the backend using connection information in a  string. Possible options are: host, port, options, tty, dbname, user, password.  The connection identifier `$conn` (a pointer to the PGconn structure)  must be used in subsequent commands for unique identification. Before using  `$conn` you should call `$conn`-\>status to ensure, that the connection was  properly made.

```
    $Option_ref = Pg::conndefaults()
    while(($key, $val) = each %$Option_ref) {
        print "$key, $val\n";
```

Returns a reference to a hash containing as keys all possible options for  **connectdb()**. The values are the current defaults. This function differs from  his C-counterpart, which returns the complete conninfoOption structure.

```
    $conn->reset
```

Resets the communication port with the backend and tries to establish a new connection.

```
    $ret = $conn->requestCancel
```

Abandon processing of the current query. Regardless  of the return value of  requestCancel, the application must continue with the normal result-reading  sequence using getResult. If the current query is part of a transaction,  cancellation will abort the whole transaction.

```
    $dbname = $conn->db
```

Returns the database name of the connection.

```
    $pguser = $conn->user
```

Returns the Postgres user name of the connection.

```
    $pguser = $conn->pass
```

Returns the Postgres password of the connection.

```
    $pghost = $conn->host
```

Returns the host name of the connection.

```
    $pgport = $conn->port
```

Returns the port of the connection.

```
    $pgtty = $conn->tty
```

Returns the tty of the connection.

```
    $pgoptions = $conn->options
```

Returns the options used in the connection.

```
    $status = $conn->status
```

Returns the status of the connection. For comparing the status  you may use the following constants:

```
  - PGRES_CONNECTION_OK
  - PGRES_CONNECTION_BAD
    $errorMessage = $conn->errorMessage
```

Returns the last error message associated with this connection.

```
    $fd = $conn->socket
```

Obtain the file descriptor number for the backend connection socket.  A result of -1 indicates that no backend connection is currently open.

```
    $pid = $conn->backendPID
```

Returns the process-id of the corresponding backend proceess.

```
    $conn->trace(debug_port)
```

Messages passed between frontend and backend are echoed to the  debug\_port file stream.

```
    $conn->untrace
```

Disables tracing.

```
    $result = $conn->exec($query)
```

Submits a query to the backend. The return value is a pointer to  the PGresult structure, which contains the complete query-result  returned by the backend. In case of failure, the pointer points  to an empty structure. Before using `$result` you should call  resultStatus to ensure, that the query was properly executed.

```
    ($table, $pid) = $conn->notifies
```

Checks for asynchronous notifications. This functions differs from  the C-counterpart which returns a pointer to a new allocated structure,  whereas the perl implementation returns a list. `$table` is the table  which has been listened to and `$pid` is the process id of the backend.

```
    $ret = $conn->sendQuery($string, $query)
```

Submit a query to Postgres without waiting for the result(s). After  successfully calling PQsendQuery, call PQgetResult one or more times  to obtain the query results.  PQsendQuery may not be called again until  getResult has returned NULL, indicating that the query is done.

```
    $result = $conn->getResult
```

Wait for the next result from a prior PQsendQuery, and return it.  NULL  is returned when the query is complete and there will be no more results.  getResult  will block only if a query is active and the necessary response  data has not yet been read by PQconsumeInput.

```
    $ret = $conn->isBusy
```

Returns TRUE if a query is busy, that is, PQgetResult would block waiting  for input.  A FALSE  return indicates that PQgetResult can be called with  assurance of not blocking.

```
    $result = $conn->consumeInput
```

If input is available from the backend, consume it. After calling consumeInput,  the application may check isBusy and/or notifies to see if their state has changed.

```
    $ret = $conn->getline($string, $length)
```

Reads a string up to `$length` - 1 characters from the backend.  getline returns EOF at EOF, 0 if the entire line has been read,  and 1 if the buffer is full. If a line consists of the two  characters "\\." the backend has finished sending the results of  the copy command.

```
    $ret = $conn->putline($string)
```

Sends a string to the backend. The application must explicitly  send the two characters "\\." to indicate to the backend that  it has finished sending its data.

```
    $ret = $conn->getlineAsync($buffer, $bufsize)
```

Non-blocking version of getline. It reads up to `$bufsize`  characters from the backend. getlineAsync returns -1 if  the end-of-copy-marker has been recognized, 0 if no data  is avilable, and \>0 the number of bytes returned.

```
    $ret = $conn->putnbytes($buffer, $nbytes)
```

Sends n bytes to the backend. Returns 0 if OK, EOF if not.

```
    $ret = $conn->endcopy
```

This function waits  until the backend has finished the copy.  It should either be issued when the last string has been sent  to  the  backend  using  putline or when the last string has  been received from the backend using getline. endcopy returns  0 on success, 1 on failure.

```
    $result = $conn->makeEmptyPGresult($status);
```

Returns a newly allocated, initialized result with given status.

### 2. Result

With these functions you can send commands to a database and investigate the results. In Libpq the result of a command is  represented by a structure called PGresult. Using the appropriate  methods you can access almost all fields of this structure.

```
    $result_status = $result->resultStatus
```

Returns the status of the result. For comparing the status you  may use one of the following constants depending upon the  command executed:

```
  - PGRES_EMPTY_QUERY
  - PGRES_COMMAND_OK
  - PGRES_TUPLES_OK
  - PGRES_COPY_OUT
  - PGRES_COPY_IN
  - PGRES_BAD_RESPONSE
  - PGRES_NONFATAL_ERROR
  - PGRES_FATAL_ERROR
```

Use the functions below to access the contents of the PGresult structure.

```
    $ntuples = $result->ntuples
```

Returns the number of tuples in the query result.

```
    $nfields = $result->nfields
```

Returns the number of fields in the query result.

```
    $ret = $result->binaryTuples
```

Returns 1 if the tuples in the query result are bianry.

```
    $fname = $result->fname($field_num)
```

Returns the field name associated with the given field number.

```
    $fnumber = $result->fnumber($field_name)
```

Returns the field number associated with the given field name.

```
    $ftype = $result->ftype($field_num)
```

Returns the oid of the type of the given field number.

```
    $fsize = $result->fsize($field_num)
```

Returns the size in bytes of the type of the given field number.  It returns -1 if the field has a variable length.

```
    $fmod = $result->fmod($field_num)
```

Returns the type-specific modification data of the field associated   with the given field index. Field indices start at 0.

```
    $cmdStatus = $result->cmdStatus
```

Returns the command status of the last query command.  In case of DELETE it returns also the number of deleted tuples.  In case of INSERT it returns also the OID of the inserted  tuple followed by 1 (the number of affected tuples).

```
    $oid = $result->oidStatus
```

In case the last query was an INSERT command it returns the oid of the  inserted tuple.

```
    $oid = $result->cmdTuples
```

In case the last query was an INSERT or DELETE command it returns the  number of affected tuples.

```
    $value = $result->getvalue($tup_num, $field_num)
```

Returns the value of the given tuple and field. This is  a null-terminated ASCII string. Binary cursors will not work.

```
    $length = $result->getlength($tup_num, $field_num)
```

Returns the length of the value for a given tuple and field.

```
    $null_status = $result->getisnull($tup_num, $field_num)
```

Returns the NULL status for a given tuple and field.

```
    $res->fetchrow
```

Fetches the next row from the server and returns NULL if all rows  have been processed. Columns which have NULL as value will be set to `"undef"`.

```
    $result->print($fout, $header, $align, $standard, $html3, $expanded, $pager, $fieldSep, $tableOpt, $caption, ...)
```

Prints out all the tuples in an intelligent  manner. This function  differs from the C-counterpart. The struct PQprintOpt has been  implemented with a list. This list is of variable length, in order  to care for the character array fieldName in PQprintOpt.  The arguments `$header`, `$align`, `$standard`, `$html3`, `$expanded`, `$pager` are boolean flags. The arguments `$fieldSep`, `$tableOpt`, `$caption` are strings. You may append additional strings, which will be  taken as replacement for the field names.

```
    $result->displayTuples($fp, $fillAlign, $fieldSep, $printHeader, qiet)
```

Kept for backward compatibility. Use print.

```
    $result->printTuples($fout, $printAttName, $terseOutput, $width)
```

Kept for backward compatibility. Use print.

### 3. Large Objects

These functions provide file-oriented access to user data.  The large object interface is modeled after the Unix file  system interface with analogies of open, close, read, write,  lseek, tell.

Starting with postgresql-6.5 it is required to use large objects  only inside a transaction ! See eg/lo\_demo.pl for an example,  how to handle large objects.

```
    $lobj_fd = $conn->lo_open($lobjId, $mode)
```

Opens an existing large object and returns an object id.  For the mode bits see lo\_create. Returns -1 upon failure.

```
    $ret = $conn->lo_close($lobj_fd)
```

Closes an existing large object. Returns 0 upon success  and -1 upon failure.

```
    $nbytes = $conn->lo_read($lobj_fd, $buf, $len)
```

Reads `$len` bytes into `$buf` from large object `$lobj_fd`.  Returns the number of bytes read and -1 upon failure.

```
    $nbytes = $conn->lo_write($lobj_fd, $buf, $len)
```

Writes `$len` bytes of `$buf` into the large object `$lobj_fd`.  Returns the number of bytes written and -1 upon failure.

```
    $ret = $conn->lo_lseek($lobj_fd, $offset, $whence)
```

Change the current read or write location on the large object  `$obj_id`. Currently `$whence` can only be 0 (L\_SET).

```
    $lobjId = $conn->lo_creat($mode)
```

Creates a new large object. `$mode` is a bit-mask describing  different attributes of the new object. Use the following constants:

```
  - PGRES_INV_SMGRMASK
  - PGRES_INV_WRITE
  - PGRES_INV_READ
```

Upon failure it returns PGRES\_InvalidOid.

```
    $location = $conn->lo_tell($lobj_fd)
```

Returns the current read or write location on the large object  `$lobj_fd`.

```
    $ret = $conn->lo_unlink($lobjId)
```

Deletes a large object. Returns -1 upon failure.

```
    $lobjId = $conn->lo_import($filename)
```

Imports a Unix file as large object and returns  the object id of the new object.

```
    $ret = $conn->lo_export($lobjId, $filename)
```

Exports a large object into a Unix file.  Returns -1 upon failure, 1 otherwise.

## AUTHOR

```
    Edmund Mergl <E.Mergl@bawue.de>
```

## SEE ALSO

PostgreSQL Programmer's Guide, Large Objects and libpq
