Veamos un ejemplo de cómo trabajar con bases de datos PostgreSQL, para ello en la base de datos template1 crea la siguiente tabla que utilizaremos en el ejemplo:
create table tbl_personas (
id integer not null check (id > 0),
nombre varchar(50) not null,
primary key (id)
)
NOTA: a día de hoy, la última versión disponible (PostgreSQL 9) no soporta unsigned, en su lugar podemos usar la cláusula check.
Creamos una función usando pg_connect() para conectar con PostgreSQL, y pg_last_error() que nos devolverá un mensaje de error si se produjo alguno (lo detectamos con or die, que detendrá la ejecución):
<?php
function conectar_PostgreSQL( $usuario, $pass, $host, $bd )
{
$conexion = pg_connect( "user=".$usuario." ".
"password=".$pass." ".
"host=".$host." ".
"dbname=".$bd
) or die( "Error al conectar: ".pg_last_error() );
return $conexion;
}
?>
Creamos otra función para borrar todos los registros de la tabla o sólo el especificado. Para procesar una consulta (tanto de selección como de actualización) usaremos la función pg_query():
<?php
function borrarPersona( $conexion, $id )
{
$sql = "DELETE FROM tbl_personas";
// Si 'id' es diferente de 'null' sólo se borra la persona con el 'id' especificado:
if( $id != null )
$sql .= " WHERE id=".$id;
// Ejecutamos la consulta (se devolverá true o false):
return pg_query( $conexion, $sql );
}
?>
Función para insertar un registro en la tabla:
<?php
function insertarPersona( $conexion, $id, $nombre )
{
$sql = "INSERT INTO tbl_personas VALUES (".$id.", '".$nombre."')";
// Ejecutamos la consulta (se devolverá true o false):
return pg_query( $conexion, $sql );
}
?>
Otra función para modificar un registro:
<?php
function modificarPersona( $conexion, $id, $nombre )
{
$sql = "UPDATE tbl_personas SET nombre='".$nombre."' WHERE id=".$id;
// Ejecutamos la consulta (se devolverá true o false):
return pg_query( $conexion, $sql );
}
?>
Creamos una función más para listar la tabla completa, en la cual utilizamos pg_num_rows() (devuelve el número de registros encontrados) y pg_fetch_object() (devuelve los valores de los campos en un Objeto de PHP):
<?php
function listarPersonas( $conexion )
{
$sql = "SELECT * FROM tbl_personas ORDER BY id";
$ok = true;
// Ejecutar la consulta:
$rs = pg_query( $conexion, $sql );
if( $rs )
{
// Obtener el número de filas:
if( pg_num_rows($rs) > 0 )
{
echo "<p/>LISTADO DE PERSONAS<br/>";
echo "===================<p />";
// Recorrer el resource y mostrar los datos:
while( $obj = pg_fetch_object($rs) )
echo $obj->id." - ".$obj->nombre."<br />";
}
else
echo "<p>No se encontraron personas</p>";
}
else
$ok = false;
return $ok;
}
?>
Por último, creamos una función que procesará una consulta y nos devolverá un Objeto en PHP con los datos del registro encontrado:
<?php
function buscarPersona( $conexion, $id )
{
$sql = "SELECT * FROM tbl_personas WHERE id=".$id."";
$devolver = null;
// Ejecutar la consulta:
$rs = pg_query( $conexion, $sql );
if( $rs )
{
// Si se encontró el registro, se obtiene un objeto en PHP con los datos de los campos:
if( pg_num_rows($rs) > 0 )
$devolver = pg_fetch_object( $rs, 0 );
}
return $devolver;
}
?>
A continuación, el código fuente principal del programa. Observa que debemos introducir los datos de acceso (usuario, contraseña, dirección IP y nombre de la base de datos) para conectar con PostgreSQL:
<?php
// Conectar (se detendrá la ejecución si se produce un error):
$conexion = conectar_PostgreSQL( "TU_USUARIO", "TU_PASSWORD", "IP_DEL_SERVIDOR", "template1" );
// Borrar todos los datos de la tabla:
$ok = borrarPersona( $conexion, null );
if( $ok == false )
echo "Error al borrar los datos.<br/>";
else
echo "Datos borrados correctamente.<br/>";
// insertar una persona:
$ok = insertarPersona( $conexion, 1, 'Juan Rodríguez P.' );
if( $ok == false )
echo "Error al insertar los datos.<br/>";
else
echo "Datos insertados correctamente.<br/>";
// insertar una persona:
$ok = insertarPersona( $conexion, 2, 'Juan Rodríguez P.' );
// insertar una persona:
$ok = insertarPersona( $conexion, 3, 'Roberta Amador H.' );
// Modificar la persona número 2:
$ok = modificarPersona( $conexion, 1, "Alfredo Ramírez E." );
if( $ok == false )
echo "Error al modificar los datos.<br/>";
else
echo "Datos modificados correctamente.<br/>";
// Modificar la persona:
$ok = listarPersonas( $conexion );
if( $ok == false )
echo "<p>Error al listar los datos.</p>";
else
echo "<p>Datos listados correctamente.</p>";
// Buscar los datos de la persona con 'id=2'
$obj = buscarPersona( $conexion, 2 );
if( $obj == null )
echo "No se encontró la persona";
else
echo "El nombre de la persona con el código: [".$obj->id."] es [".$obj->nombre."]";
// Cerrar la conexión a PostgreSQL
pg_close( $conexion );
?>
También disponemos de la función pg_send_query() que permite enviar una consulta de forma asíncrona, pudiendo así enviar varias a la vez e irlas obteniendo de una en una con pg_result().

Vea también: [ Funciones de PostgreSQL ] - [ Configurar PHP para acceder a Bases de Datos ]

Vea también: [ pg_connect() ] - [ pg_query() ] - [ pg_num_rows() ] - [ pg_fetch_object() ] - [ pg_close() ]

Vea también: [ pg_send_query() ] - [ pg_result() ]
La función de PHP pg_connect() devuelve false si ocurre un error, aunque puede resultar interesante usar la siguiente que arrojará una excepción caso de producirse alguno:
<?php
function conectar_PostgreSQL( $usuario, $pass, $host, $bd )
{
$conexion = null;
try
{
$conexion = pg_connect( "user=".$usuario." ".
"password=".$pass." ".
"host=".$host." ".
"dbname=".$bd
);
if( $conexion == false )
throw new Exception( "Error PostgreSQL ".pg_last_error() );
}
catch( Exception $e )
{
throw $e;
}
return $conexion;
}
?>
La siguiente función también nos resultará útil puesto que pg_query() tampoco devuelve una excepción, sino únicamente false:
<?php
function my_pg_query( $conexion=null, $sql )
{
$rs = @pg_query( $conexion, $sql );
if( $rs == false )
throw new Exception( "Error PostgreSQL ".pg_last_error() );
return $rs;
}
?>
NOTA: La arroba @ se utiliza antes del nombre de una función para que no se muestren por pantalla mensajes de aviso o error (en caso de que se produzcan).

Vea también: [ Excepciones en PHP ] - [ Control de Excepciones en PHP ] - [ Exception ]
Las fechas en MySQL y PostgreSQL se almacenan en formato yyyy-mm-dd así como también en formato UNIX.
Para convertir una cadena de texto en formato de fecha dd/mm/yyyy a yyyy-mm-dd podemos usar la siguiente función:
<?php
function DMY_to_YMD( $fecha_dmy )
{
$fecha_formateada = null;
$aFecha = explode("/", $fecha_dmy);
// Comprobar si la fecha es válida
if( checkdate( $aFecha[1], $aFecha[0], $aFecha[2]) === true )
$fecha_formateada = $aFecha[2]."-".$aFecha[1]."-".$aFecha[0];
return $fecha_formateada;
}
// -------------------------------------------------------------------
$fecha1 = DMY_to_YMD("20/10/2011"); // Devuelve: "10-20-2011"
if( $fecha1 != "" )
echo $fecha1."<br />";
else
echo "La primera fecha no es válida";
$fecha2 = DMY_to_YMD("30/02/2011"); // Devuelve una cadena vacía
if( $fecha2 != "" )
echo $fecha2."<br />";
else
echo "La segunda fecha no es válida";
?>