La base de datos PostrgeSQL es un producto Open Source y
disponible sin costo. Postgres, desarrollado originalmente en el
Deportamento de Ciencias de Computación de UC Berkeley,
fue pionero en muchos de los conceptos de objetos y relacionales
que ahora están apareciendo en algunas bases de datos
comerciales. Provee soporte para lenguajes SQL92/SQL99,
transacciones, integridad referencial, procedimientos almacenados
y extensibilidad de tipos. PostgreSQL es un descendiente de
código abierto de su código original de Berkeley.
Para hacer uso del soporte PostgreSQL, necesita PostgreSQL 6.5 o
posterior, PostgreSQL 7.0 o posterior para habilitar todas las
características del módulo. PostgreSQL soporta
varias codificaciones de caracteres, incluyendo
codificación de caracteres multibyte. Su versión
actual, asi como más información sobre PostgreSQL
se encuentra disponible en http://www.postgresql.org/ y
http://techdocs.postgresql.org/.
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.
El comportamiento de estas
funciones está afectado por los valores definidos en
php.ini.
Tabla 1. PostgreSQL configuration options
| Name | Default | Changeable |
|---|
| 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 |
| pgsql.ignore_notice | "0" | PHP_INI_ALL |
| pgsql.log_notice | "0" | PHP_INI_ALL |
For further details and definition of the PHP_INI_* constants see
ini_set().
A continuación se
presenta una corta explicación de las directivas de
configuración.
- 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.
| Aviso |
El uso del módulo PostgreSQL con PHP 4.0.6 no se
recomienda debido a un fallo en el código de
gestión de mensajes tipo noticia. Use la versión
4.1.0 o posterior.
|
| Aviso |
Los nombres de funciones PostgreSQL serán modificados en
el lanzamiento 4.2.0 para adoptar los estándares de
código actuales. La mayoría de nombres nuevos
tendrán signos de subrayado adicionales,
p.ej. pg_lo_open(). Algunas funciones son renombradas a nuevos
nombres por razones de consistencia, p.ej. pg_exec() a
pg_query(). Los nombres antiguos pueden ser usados en 4.2.0 y
algunas versiones subsiguientes, pero pueden ser eliminados en
el futuro.
Tabla 2. Nombres de función modificados
La vieja
sintaxis pg_connect()/pg_pconnect()
será marcada como obsoleta para dar soporte a conexiones
asincrónicas en el futuro. Por favor use una cadena de
conexión para pg_connect()
y pg_pconnect().
|
No todas las funciones son soportadas en todas las
instalaciones. Depende de su versión de libpq (la interfaz
C de Cliente PostrgeSQL) y de cómo fue compilado libpq. Si
hace falta alguna función, libpq no soporta la
característica requerida para la función.
También es importante que no use una versión de
libpq más antigua que la del Servidor PostgreSQL al que se
conectará. Si usa una versión de libpq más
antigua que la que el Servidor PostgreSQL espera, puede tener
problemas.
A partir de la versión 6.3 (03/02/1998) PostgreSQL usa
sockets de dominio unix por defecto. El puerto TCP NO será
abierto por defecto. A continuación se presenta una tabla
que describe estas posibilidades de conexión nuevas. Este
socket se encontrará
en /tmp/.s.PGSQL.5432. Esta opción
puede habilitarse con la bandera '-i'
a postmaster y su significado es: "escuche en
sockets TCP/IP asi como en sockets de dominio Unix".
Tabla 3. Postmaster y PHP
| Postmaster | PHP | Status |
|---|
| postmaster & | pg_connect("dbname=NombreDeMiBD"); | OK |
| postmaster -i & | pg_connect("dbname=NombreDeMiBD"); | OK |
| postmaster & | pg_connect("host=localhost dbname=NombreDeMiBD"); |
No fue posible conectarse con el servidor PostgreSQL:
connectDB() falló: ¿Está corriendo
postmaster y acepta conexiones TCP/IP (con -i) en 'localhost'
en el puerto '5432'? en /ruta/hacia/archivo.php en la
línea 20.
|
| postmaster -i & | pg_connect("host=localhost dbname=NombreDeMiBD"); | OK |
Puede establecerse una conexión con el servidor PostgreSQL
con el siguiente juego de pares de valores en la cadena de
comando:
$con = pg_connect("host=miHost port=miPuerto tty=miTTY
options=misOpciones dbname=miBD user=miUsuario
password=miContrasenya ");
La sintaxis previa de:
$conn = pg_connect ("host", "port", "options", "tty", "dbname")
ha sido marcada como obsoleta.
Las variables de entorno afectan el comportamiente de
servidor/cliente de PostgreSQL. Por ejemplo, el módulo
PostgreSQL buscará la variable de entorno PGHOSN cuando el
nombre de host sea omitido en la cadena de conexión. Las
variables de entorno soportadas son diferentes entre
versión y versión. Refiérase el Manual de
Programador de PostgreSQL (libpq - Variables de Entorno) para
más detalles.
Asegúrese de establecer las variables de entorno para el
usuario apropiado. Use $_ENV
o getenv() para chequear cuáles
variables de entorno están disponibles en el proceso
actual.
Ejemplo 1. Definición de parámetros
predeterminados PGHOST=pgsql.example.com
PGPORT=7890
PGDATABASE=sistema-web
PGUSER=usuario-web
PGPASSWORD=secreto
PGDATESTYLE=ISO
PGTZ=JST
PGCLIENTENCODING=EUC-JP
export PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD PGDATESTYLE PGTZ PGCLIENTENCODING |
|
Estas constantes están
definidas por esta extensión y estarán disponibles
solamente cuando la extensión ha sido o bien compilada dentro
de PHP o grabada dinámicamente en tiempo de ejecución.
A partir de PostgreSQL 7.1.0, puede almacenar hasta 1GB en un
campo de tipo texto. En versiones anteriores, éste se
encontraba limitado al tamaño de bloque (por defecto 8KB,
el máximo era 32KB, definido en tiempo de
compilación)
Para usar la interfaz de objetos grandes (lo), es necesario
ubicar las funciones de objetos grandes en el interior de un
bloque de transacción. Un bloque de transacción
comienza con una sentencia SQL BEGIN y, si la
transacción fue válida, termina
con COMMIT o END. Si la
transacción falla, ésta debe ser cerrada
con ROLLBACK o
ABORT.
Ejemplo 2. Uso de Objetos Grandes
<?php $base_de_datos = pg_connect("dbname=jacarta"); pg_query($base_de_datos, "begin"); $oid = pg_lo_create($base_de_datos); echo "$oid\n"; $gestor = pg_lo_open($base_de_datos, $oid, "w"); echo "$gestor\n"; pg_lo_write($gestor, "datos de objeto grande"); pg_lo_close($gestor); pg_query($base_de_datos, "commit"); ?>
|
|
Usted no debe cerrar la conexión con el servidor PostgreSQL
antes de cerrar el objeto grande.