Documentos de Académico
Documentos de Profesional
Documentos de Cultura
html
Contenido
Copyright
Prefacio
A quin va dirigido este Libro?
Estructura de este Libro
Plataforma y Versin Utilizada
Qu se incluye en el CD?
Convenciones usadas en este Libro
Agradecimientos
Comentarios y Cuestiones
I. Introduccin e Instalacin
1. Qu es PostgreSQL?
1.1 Versin Gratuita de Cdigo Abierto (Open Source)
1.2 Productos Comerciales de PostgreSQL
1.3 Cdigo Abierto contra Versiones Comerciales
1.4 Tomar una Decisin
1.5 Soporte Comercial
1.6 Soporte de la Comunidad
1.7 Caractersticas de PostgreSQL
1.8 Por dnde proceder a partir de aqu
2. Instalando PostgreSQL
2.1 Preparndonos para la Instalacin
2.2 Paquetes de Software Requeridos
2.3 Paquetes Opcionales
2.4 10 Pasos para Instalar PostgreSQL
2.4.1 Paso 1: Crear al Usuario 'postgres'
2.4.2 Paso 2: Instalar el Paquete Fuente de PostgreSQL
2.4.3 Paso 3: Configurar el rbol de Fuentes
2.4.4 Paso 4: Compilando el Fuente
2.4.5 Paso 5: Test de Regresin
2.4.6 Paso 6: Instalando los Programas y Libreras Compilados
2.4.7 Paso 7: Estableciendo las Variables de Entorno
2.4.8 Paso 8: Inicializando y Arrancando PostgreSQL
2.4.9 Paso 9: Configurando el script PostgreSQL SysV
2.4.10 Paso 10: Creando una Base de Datos
2. Instalando PostgreSQL
Este capitulo se centra en los requisitos y pasos necesarios para instalar y configurar
PostgreSQL. La mayoría de las capacidades de PostgreSQL no están activas por
defecto. Por ejemplo, el soporte para el lenguaje TCL es una característica que debe ser
explícitamente especificada durante el tiempo de compilación. Como hay muchas otras
características que no están configuradas por defecto, cubriremos los distintos flags y
opciones que puede usar para activarlos cuando compile PostgreSQL. Es importante que
ponga cuidado en la lectura de todos los pasos a seguir en este proceso antes de iniciar
la instalación.
Este capítulo habla de la instalación sobre una plataforma del tipo Linux/UNIX. Nuestra
plataforma de instalacin es Linux, pero estas instrucciones deberan ser compatibles con
la mayora de las plataformas UNIX.
Nota: Aunque PostgreSQL es capaz de correr sobre plataformas Win32, este libro no
cubre la instalacin sobre Windows. La versin Win32 de PostgreSQL requiere el entorno
Cygwin y no operar independientemente dentro de Win32. Aunque Cygwin puede ser til
en muchas situaciones, el uso de PostgreSQL en un entorno Cygwin no est
recomendado.
--------------------------------------------------------------------------------
2.1 Preparndonos para la Instalacin
La instalacin de PostgreSQL no es difcil. Sin embargo, existen unos requisitos de
software que necesitar para la compilacin de PostgreSQL. Todos los requisitos -aparte
del cdigo fuente de PostgreSQL- son herramientas GNU. Si est usando Linux, casi
seguro que todas las utilidades ya estn instaladas. Si est usando un derivado de BSD, tal
como FreeBSD o MacOS X, tendr que descargar las herramientas.
GNU make
GNU make es comnmente conocido como gmake en los sistemas no basados en GNU,
pero es normalmente conocido como make en sistemas basados en GNU, como en
Linux. Por consistencia, nos referiremos a l como gmake durante el resto del libro.
$ gmake --version
GNU Make version 3.79.1, by Richard Stallman and Roland McGrath.
Built for i386-redhat-linux-gnu
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
Free Software Foundation,
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Report bugs to <bug-make@gnu.org>.
Compilador ISO/ANSI C
Existen numerosos compiladores ISO/ANSI disponibles. El compilador recomendado
para PostgreSQL es el compilador GNU C, aunque PostgreSQL es compilable con
compiladores de diferentes vendedores. Al tiempo de la escritura de ste libro, las
versiones ms conocidas de GCC son la 2.95 y 2.96 (RedHat Linux 7.x y Mandrake
Linux 8.x). Si no tiene actualmente GCC instalado, puede descargarlo visitando el sitio
web de GNU en http://gcc.gnu.org.
$ gcc --version
2.95.3
GNU zip es tambin conocido como gzip. GNU zip es una utilidad de compresin que
puede comprimir y descomprimir archivos. Todos los archivos comprimidos creados
con gzip tienen la extensin .gz. Puede comprobar la existencia del programa gzip con el
comando gzip -version.
Adems de gzip, necesitar un comando copy o tar, una utilidad usada para agrupar varios
archivos y directorios en un nico archivo, as como para desempaquetar estos archivos
sobre el sistema de archivos. Un archivo creado a partir de tar tiene la extensin .tar. Los
archivos que son archivados por tar y comprimidos posteriormente con gzip tienen la
extensin compuesta .tar.gz, como es el caso del fuente de la distribucin PostgreSQL.
Puede comprbar la existencia de tar con el comando tar -version.
$ gzip --version
gzip 1.3
(1999-12-21)
Copyright 1999 Free Software Foundation
Copyright 1992-1993 Jean-loup Gailly
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Compilation options: DIRENT UTIME STDC_HEADERS HAVE_UNISTD_H
HAVE_MEMORY_H HAVE_STRING_H
Written by Jean-loup Gailly.
$ tar --version
tar (GNU tar) 1.13.17
Copyright 2000 Free Software Foundation, Inc.
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute it under the terms of the GNU General Public License;
see the file named COPYING for details.
Written by John Gilmore and Jay Fenlason.
Nota: Puede no necesitar este paquete si tiene NetBSD, ya que NetBSD tiene la librera
libedit, la cual proporciona compatibilidad con Readline.
OpenSSL
OpenSSL es una implementacin de cdigo abierto de los protocolos SSL/TLS. OpenSSL
es normalmente usado con utilidades como OpenSSH y Apache-SSL. PostgreSQL
puede hacer uso de OpenSSL para conectividad encriptada entre la aplicacin psql cliente
y el motor PostgreSQL. Tambin puede usar OpenSSL si desea utilizar Stunnel.
Encontrar ms informacin sobre OpenSSL en http://www.openssl.org. La instalacin y
configuracin de Stunnel para usarlo con PostgreSQL se discute en el Captulo 8.
Tcl/Tk
Tcl/Tk es una combinacin entre lenguaje de programacin y herramienta grfica. Aunque
no cubriremos el uso de Tcl con PostgreSQL, s cubriremos el uso de PgAccess, la cual
est escrita en Tcl. Si desea utilizar la aplicacin PgAccess necesitar instalar el software
Tcl/Tk. El sitio web de Tcl/Tk es http://tcl.activestate.com.
Ant/JDK
El JDK es el Java Development Kit (Kit de Desarrollo de Java). Se requiere para el
desarrollo con Java; adems, es necesario tambin por PostgreSQL si usted desea dar
soporte JDBC. Ant es una herramienta basada en Java (algo as como gmake) que tambin
es requerida para el soporte JDBC. El JDK puede ser desacargado desde
http://java.sun.com/j2se/index.html, y Ant desde
http://jakarta.apache.org/ant/index.html.
Espacio en Disco
PostgreSQL no necesita un usi intensivo de recursos de disco. De hecho, en comparacin
con otros productos tales como Oracle, PostgreSQL podra considerarse hasta liviano.
Sin embargo, PostgreSQL es una base de datos, y como cualquier base de datos, los
requerimientos crecern a medida que incremente el uso de PostgreSQL.
Sobre una mquina Linux media, necesitar aproximadamente 50 MB de disco duro para
desempaquetar el cdigo fuente, y otros 60 MB para compilarlo. Si selecciona ejecutar
los tests de regresin, necsitar 30 MB adicionales. Dependiendo de las opciones de
configuracin que elija, PostgreSQL puede tomar de 8 a 15 MB de espacio en disco, una
vez instalado.
Nota: Recuerde que los requisitos de espacio en disco de PostgreSQL crecern a medida
que usted use el sistema. Asegrese de planificar con anticipacin la cantidad de datos que
va a almacenar.
Intentar instalar sobre un sistema con evidentes carencias de espacio en disco es
potencialmente peligroso. Antes de instalar PostgreSQL, recomendamos que compruebe
su sistema de archivos para asegurarse de que tiene suficiente espacio en disco en la
particin sobre la cual pretende instalar (p.ej., /usr/local). Si tiene un sistema basado en
GNU, el comando df debera estar a su disposicin. El ejemplo 2-4 comprueba el espacio
libre en disco, reportando informacin en bloques de 1k.
Ejemplo 2-4. Verificando el Espacio en Disco.
$ df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 2355984 932660 1303644 42% /
/dev/hdb1 4142800 2133160 1799192 54% /home
/dev/hda6 1541680 272540 1190828 19% /usr/local
$ su - -c "useradd postgres"
Aviso: No intente usar al usuario root como superusuario de PostgreSQL. Hacer esto
representa un enorme riesgo de seguridad.
Recuerde que esta no ser la localizacin definitiva de los archivos de la base de datos. Es
una localizacin temporal para onfigurar y compilar el paquete con las fuentes. Si se ha
bajado el paquete PostgreSQL desde Internet, es muy probable que no se haya
almacenado en su directorio temporal de compilacin (a menos que lo haya especificado
explcitamente antes de la descarga). Una convencin comn para construir cdigo fuente en
mquinas UNIX y Linux es construir dentro de la ruta /usr/local/src. Seguramente
necesitar permisos de root para acceder a esta ruta. As, los restantes ejemplos en este
captulo implicarn al usuario root hasta que no especifiquemos lo contrario.
Para propsitos de referencia, la siguiente lista es una descripcin de las opciones de tar
usadas para extraer la distribucin fuente de PostgreSQL:
x (extraer)
tar extraer desde el el nombre de archivo especificado (en oposicin a la creacin de un
nuevo archivo).
v (verboso)
tar imprimir como salida los archivos que son extrados. Uste puede omitir esta opcin si
no desea ver la lista de archivos desempaquetados.
z (comprimido)
tar usar gunzip para descomprimir el fuente. Esta opcin asume que usted est usando las
herramientas GNU; otras versiones de tar pueden no soportar el flag z. En el caso de
que no est usando herramientas GNU, necesitar descomprimir manualmente el archivo
antes de que pueda desempaquetarlo con tar.
f (archivo)
tar usar el archivo que sigue a continuacin del parmetro f para determinar qu archivo
desempaquetar. En nuestros ejemplos, este archivo es postgresql-7.1.3.tar.gz.
Una vez haya completado la extraccin de los archivos, convirtase en el usuario postgres
y cambie al directorio recin creado (p.ej., /usr/local/src/postgres-7.1.3). El resto de pasos
de nuestra instalacin tendrn lugar en ese directorio.
El script configure se usa tambin para chequear dependencias del software requerido
para compilar PostgreSQL. Adems de comprobar las dependencias, l crear los archivos
necesarios para usarlos con el comando gmake.
Para usar el script de instalacin por defecto, utilice el siguiente comando: ./configure.
Para especificar las opciones que activarn ciertas caractersticas que no estn disponibles
por defecto, aada la opcin al comandop ./configure. Para una lista de todas las opciones
de configuracin disponibles, use ./configure -help.
Es muy posible que la configuracin que por defecto usa configure no sea la configuracin
que usted necesita. Para una correcta instalacin de PostgreSQL, le recomendamos que
use por lo menos las siguientes opciones:
-with-CXX
Le permite construir programas C++ para usarlos con PostgreSQL, construyendo la
librera libpq++.
-enable-odbc
Le permite conectar PostgreSQL con programas que tienen un driver ODBC compatible
(tal como Microsoft Access).
-enable-multibyte
Le permite usar caracteres multibyte, tales como los caracteres de lenguajes no
anglosajones (p.ej., Kanji).
-with-maxbackends=NMERO
Establece NMERO como el mximo nmero de conexiones admitidas (32, por defecto).
Tambin puede especificar cualquiera de las opciones de configuracin de la siguiente
lista:
-prefix=PREFIJO
Especifica que los archivos deberan ser instalado bajo el directorio especificado en
PREFIJO, en lugar del directorio de instalacin por defecto (/usr/local/pgsql).
-exec-prefix=PREFIJO-EJECUCIN
Especifica que los archivos ejecutables dependientes de la arquitectura deberan ser
instalados bajo el directorio especificado en PREFIJO-EJECUCIN.
-bindir=DIRECTORIO
Especifica que los archivos ejecutables (tales como psql) deberan ser instalador bajo el
directorio especificado en DIRECTORIO.
-datadir=DIRECTORIO
Especifica que los archivos de bases de datos usados por PostgreSQL (as como los
archivos de configuracin de ejemplo) deberan ser instalados en el directorio
especificado en DIRECTORIO. Advierta que el directorio aqu especificado no es
utilizado como un directorio de bases de datos alternativo; es el directorio donde los
archivos de slo lectura usados por el programa sern instalados.
-sysconfdir=DIRECTORIO
Especifica que los archivos de configuracin del sistema deberan ser instalados en el
directorio especificado por DIRECTORIO. Por defecto, estos son ubicados en el
directorio etc dentro del directorio base de instalacin especificado.
-libdir=DIRECTORIO
Especifica que los archivos de libreras deberan ser ubicados en el directorio
especificado por DIRECTORIO. Si usted est ejecutando Linux, este directorio tambin
debera ser especificado en el directorio ld.so.conf.
-includedir=DIRECTORIO
Especifica que los archivos de cabecera de C y C++ deberan ser instalados en el
directorio especificado por DIRECTORIO. Por defecto, los archivos include son
almacenados en el directorio include dentro del directorio base de instalacin.
-docdir=DIRECTORIO
Especifica que los archivos de documentacin deberan ser instalados en el directorio
especificado por DIRECTORIO. Esto no incluye a los archivos man de PostgreSQL.
-mandir=DIRECTORIO
Especifica que los archivos man deberan ser instalados en el directorio especificado por
DIRECTORIO.
-with-includes=DIRECTORIOS
Especifica que la lista de directorios separadas por comas especificados en
DIRECTORIOS deberan ser utilizados en la bsqueda de archivos de cabecera
adicionales.
-with-libraries=DIRECTORIOS
Especifica que la lista de directorios separados por coma especificados en
DIRECTORIOS debera ser utilizada con el propsito de localizar libreras adicionales.
-enable-locale
Activa el soporte local. El uso de soporte local implica una penalizacin en el
rendimiento y slo debera ser activado si usted est en una ubicacin de habla no
anglosajona.
-enable-recode
Activa la librera de traduccin recode.
-enable-multibyte
Activa la codificacin multibyte. Activar esta opcin permite soportar el uso de caracteres
no ASCII; esto es ms til con lenguajes tales como el japons, Koreano y and Chino, que
usan una codificacin no estandard.
-with-pgport=NMERO
Especifica que el nmero de puerto especificado en NMERO debera ser usado como
puerto por defecto para PostgreSQL. Esto puede ser cambiado cuando se inice la
aplicacin postmaster.
-with-maxbackends=NMERO
Establece NMERO como el mximo nmero de conexiones permitidas (32, por defecto).
-with-CXX
Especifica que la librera de la interfaz C++ debera ser compilada durante la instalacin.
Necesitar esta librera si planea desarrollar aplicaciones C++ para usarlas con
PostgreSQL.
-with-perl
Especifica que el mdulo de interfaz Perl para PostgreSQL debera ser compilado durante
la instalacin. Este mdulo necesitar ser instalado en un directorio que usualmente es
propiedad de root,as que necesitar logearse como usuario root para completar la
instalacin si ha escogido esta opcin. Esta opcin de configuracin slo se requiere si usted
planea utilizar el lenguaje procedural pl/Perl.
-with-python
Especifica que el mdulo de la interfaz Python para PostgreSQL debera ser compilado
durante la instalacin. Al igual que en el caso de la opcin -with-perl, necesitar logearse
como el usuario root para completar la instalacin con sta opcin. Esta opcin slo se
requiere si usted planea usar el lenguaje procedural pl/Python.
-with-tcl
Especifica que el soporte Tcl debera ser includo en la instalacin. Esta opcin instalar
aplicaciones PostgreSQL y aplicaciones que requieren Tcl, tales pgaccess (un popular
cliente grfico de bases de datos) y el lenguaje procedural pl/Tcl.
-without-tk
Especifica que el soporte Tcl debera ser compilado sin soporte adicional para Tk, la
herramienta grfica de Tcl. El uso de esta opcin junto con la opcin -with-tcl especifica
que las aplicaciones Tcl de PostgreSQLque requieran Tk (tales como pgtksh y pgaccess)
no deberan ser instaladas.
-with-tclconfig=DIRECTORIO, -with-tkconfig=DIRECTORIO
Especifica que el archivo de configuracin de Tcl o Tk (dependiendo de la opcin)
(tclConfig.sh o tkConfig.sh) estn localizados en el directorio especificado por
DIRECTORIO, en vez de en el directorio por defecto. Estos dos archivos son instalados
por Tcl/Tk, y la informacin dentro de ellos es requerida por los mdulos Tcl/Tk de
PostgreSQL.
-enable-odbc
Activa el soporte para ODBC.
-with-odbcinst=DIRECTORIO
Especifica que el driver ODBC debera buscar en el directorio especificado por
DIRECTORIO para localizar su archivo odbcinst.ini. Por defecto, este archivo se
mantiene en el directorio etc, el cual est localizado en el directorio de la instalacin.
-with-krb4=DIRECTORIO, -with-krb5=DIRECTORIO
Activa el soporte para el sistema de autenticacin Kerberos. El uso de Kerberos no est
cubierto en ste libro.
-with-krb-srvnam=NOMBRE
Especifica el nombre del servicio principal de Kerberos. Por defecto, postgres se
configura como el nombre del servicio principal.
-with-openssl=DIRECTORIO
Activa el uso de SSL para soportar conexiones encriptadas de bases de datos. Para
construir el soporte para SSL, OpenSSL debe ser configurado correctamente e instalado
en el directorio especificado por DIRECTORIO. Esta opcin es requerida si usted planea
usar la herramienta stunnel.
-with-java
Activa el soporte Java/JDBC support. Los paquetes Ant y JDK son requeridos por
PostgreSQL para compilarse correctamente con esta caracterstica activada.
-enable-syslog
Activa el uso del demonio syslog para registro. Necesitar especificar que usted quiere
usar syslog para registro en tiempo de ejecucin si quiere usarlo.
-enable-debug
Activa la compilacin de todas las libreras y aplicaciones de PostgreSQL con smbolos de
depuracin. Esto ralentizar el rendimiento e incrementar el tamao del archivo binario,
pero los smbolos de depuracin son tiles para los desarrolladores a la hora de ayudarles a
diagnosticar errores (bugs) y problemas con los que puedan encontrarse con
PostgreSQL.
-enable-cassert
Activa el chequeo de afirmacin. Esta caracterstica reduce el rendimiento y slo debra ser
utilizada durante el desarrollo de PostgreSQL.
Si usted compila PostgreSQL y se encuentra con que se ha olvidado alguna
caracterstica, puede volver a este paso, reconfigurar, y continuar con los siguientes
pasos para contruir e instalar PostgreSQL. Si selecciona regresar a este paso y
reconfigurar el fuente de PostgreSQL antes de la instalacin, asegrese de ejecutar el
comando gmake clean desde el directorio raz de la instalacin (normalmente,
/usr/local/src/postgresql-[versin]). Esto eliminar cualesquiera archivos objeto y
cualesquiera archivos parcialmente compilados.
Nota: En mquinas Linux, debera usar make en vez de gmake. Los usuarios de BSD
deberan usar gnumake.
Ejemplo 2-7. Compilando el Fuente con GNU make
Si decide ejecutar los tests de regresin, hgalo usando el siguiente comando: gmake
check, tal como se muestra en el Ejemplo 2-8.
El comando gmake check construir una instalacin de testeo de PostgreSQL dentro del
rbol de fuentes, y displayar una lista de todos los chequeos que est realizando. Cuando
cada uno de los tests termine, ser reportado el xito o el fracaso del mismo. Los
elementos que fallen en el chequeo tendrn un mensaje de fallo impreso, en vez del
mensaje de xito ok. Si alguno de los tests falla, gmake check displayar una salida
similar a la encontrada en el Ejemplo 2-9, aunque el nmero de tests que fallen puede ser
mayor en su sistema que el que aparece en el ejemplo.
=======================
1 of 76 tests failed.
=======================
The differences that caused some tests to fail can be viewed in the
file ./regression.diffs'. A copy of the test summary that you see
above is saved in the file ./regression.out'.
Los archivos referenciados en el Ejemplo 2-9 (regression.diffs y regression.out) estan
ubicados dentro del directorio raz en src/test/regress. Si el rbol raz est ubicado en
/usr/local/src, la ruta completa a los archivos del directorio sera
/usr/local/src/postgresql-[version]/src/test/regress.
Los tests de regresin no siempre informan de cada posible error. Esto puede ser debido a
inconsistencias en configuraciones de los locales (tales como el soporte de zona de
tiempo), o caractersticas especficas del hardware (tales como resultados de coma
flotante). Como en cualquier aplicacin, asegrese de realizar su propio test de
requerimientos mientras desarrolla con PostgreSQL.
Aviso: No puede ejecutar tests de regresin como el usuario root. Asegrese de ejecutar
gmake check como el usuario postgres.
$ su -c "gmake install"
Password:
gmake -C doc install
gmake[1]: Entering directory /usr/local/src/postgresql-7.1.3/doc'
mkdir /usr/local/pgsql
mkdir /usr/local/pgsql/man
mkdir /usr/local/pgsql/doc
mkdir /usr/local/pgsql/doc/html
[...]
Tambin querr instalar los archivos de cabecera para PostgreSQL. Esto es importante,
porque la instalacin por defecto slo instalar los archivos de cabecera para el desarrollo
de aplicaciones cliente. Si va a utilizar alguna de las funcionalidades avanzadas de
PostgreSQL, tales como funciones definidas por el usuario o desarrollo de aplicaciones
en C que utilizan la librera libpq, necesitar esta funcionalidad. Para instalar los archivos
de cabecera requeridos, use los comandos mostrados en el Ejemplo 2-12.
$ su -c "gmake install-all-headers"
Password:
gmake -C src install-all-headers
gmake[1]: Entering directory /usr/local/src/postgresql-7.1.3/src'
gmake -C include install-all-headers
[...]
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
export PATH MANPATH
Nota: Debe logearse de nuevo en el sistema para una vez haya actualizado el archivo
/etc/profile para que la shell las utilice.
Dependiendo de cmo maneja su sistema las libreras compartidas, puede que necesite
informar al sistema operativo sobre dnde se encuentran las libreras compartidas de su
instalacin de PostgreSQL. Sistemas como Linux, FreeBSD, NetBSD, OpenBSD, Irix,
HP/UX, y Solaris no lo necesitarn.
En una instalacin por defecto, las libreras compartidas se ubican en /usr/local/pgsql/lib
(esto puede ser diferente, dependiendo de que estableciese un cambio con la opcin de
configuracin -prefix). Una de las formas ms comunes de hacer esto es configurar la
variable de entorno LD_LIBRARY_PATH a /usr/local/pgsql/lib. Vea el Ejemplo 2-13
para un ejemplo sobre cmo hacer esto en shells del tipo Bourne, y el Ejemplo 2-14 para
una demostracin sobre cmo hacer esto con csh y tcsh.
$ LD_LIBRARY_PATH=/usr/local/pgsql/lib
$ export LD_LIBRARY_PATH
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
This database system will be initialized with username "postgres." This user will own
all the data files and must also own the server process.
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
\end{verbtaim}
\begin{verbatim}
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
Nota: Puede indicar que PostgreSQL debera usar un directorio distinto especificandi la
localizacin del directorio con la opcin -D. Esta ruta debe ser inicializada a travs de
initdb.
Cuando el comando initdb se haya completado, le proporcionar informacin sobre el
arranque del servidor PostgreSQL. El primer comando displayado iniciar al postmaster
en segundo plano. Una vez introducido el comando como se muestra en el Ejemplo 2-
17, el prompt ser inaccesible hasta que presione CTRL-C en el teclado para parar el
proceso postmaster.
Ejemplo 2-17. Ejecutando postmaster en segundo plano.
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
DEBUG: database system was shut down at 2001-10-12 23:11:00 PST
DEBUG: CheckPoint record at (0, 1522064)
DEBUG: Redo record at (0, 1522064); Undo record at (0, 0); Shutdown TRUE
DEBUG: NextTransactionId: 615; NextOid: 18720
DEBUG: database system is in production state
Nota: La aplicacin pg_ctl puede ser utilizad para arrancar y parar el servidor
PostgreSQL. Vea el Captulo 9 para ms informacin sobre ste comando.
$ cd /usr/local/src/postgresql-7.1.3/
$ su -c "cp contrib/start-scripts/linux /etc/rc.d/init.d/postgresql"
Necesitar convertir en ejecutable el script tras copiarlo. Para hacer esto, use el comando
que se muestra en el Ejemplo 2-20.
No existen requisitos adicionales para usar el script SysV con Red Hat, si no va a usarlo
para arrancar PostgreSQL automticamente (p.ej., si desea usar el script manualmente).
Sin embargo, si desea que el script arranque PostgreSQL automticamente cuando el
ordenador arranque (o cambie niveles de ejecucin), necesitar tener el programa
chkconfig instalado. Si chkconfig est instalado, tambin necesitar aadir las siguientes dos
lneas, incluyendo el smbolo almohadilla (#) al principio del archivo
/etc/rc.d/init.d/postgresql:
# chkconfig: 345 85 15
# description: PostgreSQL RDBMS
Una vez que estas dos lneas hayan sido aadidas al script, puede usar los comandos
mostrados en el Ejemplo 2-21 sobre distribuciones Red Hat y Mandrake Linux para
arrancar la base de datos PostgreSQL. Asegrese de ejecutarlo como el usuario root.
Nota: Los logs del script SysV redirigen toda la salida de depuracin de PostgreSQL a
/usr/local/pgsql/data/serverlog, por defecto.
El siguiente paso ser crear una nueva base de datos. Esta ser una simple base de datos de
testeo. No recomendamos usar la base de datos por defecto template1 para propsitos de
testeo. Como no ha creado ningn usuario con permisos de creacin de bases de datos,
tendr que asegurarse de haberse logeado como el usuario postgres cuando aada una
nueva base de datos. Tambin puede crear usuarios que puedan aadir bases de datos, lo
cual es discutido en el Captulo 10. Para crear una nueva base de datos llamada testdb,
introduzca el comando que muestra el Ejemplo 2-22.
$ createdb testdb
CREATE DATABASE
Debera recibir un mensaje que diga CREATE DATABASE, indicando que la creacin de
la base de datos ha sido exitosa. Ahora puede usar la interfaz de lnea de comandos de
PostgreSQL, psql, para acceder a la recin creada base de datos. Para hacer esto,
introduzca el comando mostrado en el Ejemplo 2-23.
Para verificar que la base de datos est funcionando correctamente, puede usar el
comando mostrado en el Ejemplo 2-24, el cual debera darle la lista de los lenguajes
instalados en la base de datos.
3. Autenticacin y Encriptacin
Este captulo documenta los conceptos fundamentales envueltos en la autenticacin y la
encriptacin de una sesin cliente con el servidor PostgreSQL. Esto incluye cmo
configurar correctamente el archivo pg_hba.conf para una variedad de escenarios de
autenticacin, as como unas cuantas formas comunes apra encriptar sus conexiones
clientes.
Columna Tipo
usename name
usesysid integer
usecreatedb boolean
usetrace boolean
usesuper boolean
usecatupd boolean
passwd text
valuntil abstime
La tabla pg_shadow es una tabla del sistema, y por tanto es accesible desde cualquier
base de datos. Esto significa que los usuarios no estn adscritos a una base de datos
especfica. Si un usuario existe en la tabla pg_shadow, ese usuario estar habilitado para
conectar a cualquier base de datos en el servidor, aunque no necesariamente desde
cualquier mquina remota (depender de su configuracin).
Si una contrasea no es definida, el valor por defecto para el campo contrasea (passwd)
del usuario en la tabla es NULL. Si la autenticacin basada en contrasea es activada en el
archivo pg_hba.conf, los intentos de conexin siempre fallarn para ese usuario user. A la
inversa, si la mquina que establece la conexin es una mquina autorizada (tal como
localhost, por ejemplo), cualquiera desde la mquina autorizada puede conectar como
usuario con una clave NULL. De hecho, las contraseas son ignoradas completamente
para las mquinas autorizadas.
Nota: El comando GRANT le permite restringir o permitir una gran variedad de tipos de
acceso a tablas dentro de una base de datos. Vea el Captulo 10 para ms informacin.
A menos que sus necesidades de seguridad sean muy pequeas, usted no querr usar slo
autenticacin basada en contrasea en su servidor PostgreSQL. Usar ste mtodo para
autenticar usuarios permitir a cualquier usuario vlido acceder a cualquier base de datos
del sistema, y la autenticacin con una clave de texto plano puede resultar en que
usuarios no autorizados adquieran contraseas de usuarios. Si desea conectar a su base de
datos desde Internet de alguna forma, le sugerimos que lea las siguientes secciones.
Cubre el uso del archivo pg_hba.conf y la encriptacin de sesin.
Cuando una aplicacin solicita una conexin, la peticin especificar un nombre de usuario
PostgreSQL y de base de datos a la cual intenta conectar. Opcionalmente, puede ser
proporcionada una contrasea, dependiendo de la configuracin esperada para la mquina
que conecta.
Nota: PostgreSQL tiene sus propias tablas de usuario y contrseas, las cuales estn
separadas de las cuentas del sistema (operativo). No se requiere que su usuario
PostgreSQL coincida con los usuarios definidos a nivel de sistema operativo.
Cuando PostgreSQL recibe una peticin de conexin chequear el archivo pg_hba.conf
para verificar que la mquina desde la cual la aplicacin est solicitando la conexin tiene
permiso para conectar a la base de datos especificada. Si la mquina que solicita el
acceso tiene permisos de conexin, PostgreSQL comprobar las condiciones que la
aplicacin debe cumplir en orden a una correcta autenticacin. Esto afecta a las
conexiones que son iniciadas localmente as como a las remotas.
PostgreSQL comprobar el mtodo de autenticacin a travs del archivo pg_hba.conf para
cada peticin de conexin. Esta comprobacin es realizada cada vez que una nueva conexin
es solicitada desde el servidor PostgreSQL, as que no necesita reiniciar PostgreSQL tras
aadir, modificar o eliminar una entrada en el archivo pg_hba.conf. El Ejemplo 8-1 es un
ejemplo simple del archivo pg_hba.conf.
\begin{verbatim}
# PostgreSQL HOST ACCESS CONTROL FILE
#
Los permisos a nivel de tabla todava se aplican a la base de datos, un en el caso de que
un usuario tenga permisos para conectar a la base de datos. Si usted puede conectar,
pero no puede seleccionar datos de una tabla, puede que tenga que verificar que el
usuario conectado tenga permisos para usar SELECT sobre esa tabla. Usando la
aplicacin de lnea de comando psql, puede comprobar los permisos de las tablas de una
base de datos usando en comando \z. Para cualquier otra interfaz para PostgreSQL, use
la consulta que se muestra en el Ejemplo 8-2 para ver la misma informacin que la
proporcionada por el comando \z.
Dentro de este archivo, usted puede asociar una direccin de mquina TCP/IP (o un rango
de direcciones) conuna base de datos en particular (o todas las bases de datos), y uno o
varios mtodos de autenticacin. Tambin puede especificar el acceso para conexiones
locales usando el trmino localhost, o 127.0.0.1, en vez de usar la direccin IP externa del
sistema.
Varias reglas sintcticas se aplican al archivo pg_hba.conf. Primero, usted slo puede
ubicar un registro de mquina por lnea en el archivo. Consecuentemente, los registros de
mquinas no pueden extenderse a varias lneas. Segundo, cada registro de mquina debe
contener mltiples campos, los cuales deben estar separados bien por tabulaciones o bien
por espacios. El nmero de campos en un registro de mquina est directamente
relacionado con el tipo de entrada que est siendo definida. El Ejemplo 8-3 muestra dos
registros de mquina, el primero con los campos separados por espacios, y el segundo
separado mediante tabulaciones.
Aparte del actual formato para cada registro de mquina, hay tres tipos generales
disponibles en el archivo pg_hba.conf (el tipo keyword es siempre la primera palabra en
el registro de mquina):
host
Una entrada host es usada para especificar mquinas remotas que estn autorizadas para
conectar al servidor PostgreSQL. El postmaster de PostgreSQL debe ser ejecutado con
la opcin -i (TCP/IP) para que una entrada de mquina funcione correctamente.
local
Una entrada local es semnticamente lo mismo que una entrada host. Sin embargo, no
necesita especificar una mquina a la que le est permitido conectar. La entrada local es
usada para conexiones de clientes que son iniciadas desde la misma mquina en la que
est operando el servidor PostgreSQL
hostssl
Una entrada hostssl es usada para especificar mquinas (remotas o locales) que estn
autorizadas para conectar al servidor PostgreSQL usando SSL. El uso de SSL le
garantiza que todas las comunicaciones entre el cliente y el servidor estn encriptadas.
Para que esto funcione, tanto el cliente como el servidor deben soportar SSL. El proceso
postmaster debe ser ejecutado con las opciones -l (SSL) y -i (TCP/IP).
Nota: Vea el Captulo 9 para ms informacin sobre cmo iniciar el proceso postmaster con
las apropiadas opciones de tiempo de ejecucin.
El Ejemplo 8-5 ilustra la sintaxis general de cada tipo de registro de mquina disponible
dentro del archivo pg_hba.conf. Advierta que el formato es esencialmente idntico para
cada registro, con la excepcin de que un registro local no requiere una direccin IP o
mscara de red, ya que se asume que la conexin se realiza desde la misma mquina donde
se encuentra en servidor PostgreSQL.
# Un registro "local".
local database auth_method [ auth_option ]
# un registro "host".
host database ip_addr netmask auth_method [ auth_option ]
# Un registro "hostssl".
hostssl database ip_addr netmask auth_method [ auth_option ]
Nota: Recuerde que cada entrada en el archivo pg_hba.conf debe ser una lnea simple.
No puede usar varias lneas o lneas divididas.
La siguiente lista es una descripcin de las palabras clave para las entradas en el archivo
pg_hba.conf mencionadas anteriormente:
database
Este es el nombre de la base de datos a la que la mquina especificada est autorizada a
conectar. La palabra clave database tiene tres posibles valores:
all
La palabra clave all especifica que el cliente puede conectar a cualquier base de datos
alojada en el servidor PostgreSQL.
sameuser
Especifica que el cliente slo puede conectar a una base de datos en la que coinciden los
nombre de usuarios autenticados de los clientes.
name
Un nombre determinado puede ser especificado, de forma que el cliente slo puede
conectar a la base de datos especificada por ese nombre.
ip_addr, netmask
Los campos ip_addr y netmask especifican una direccin IP, o rango de direcciones, que
estn autorizadas a conectar al servidor PostgreSQL. Dicho rango puede ser especificado
describiendo una red IP con su mscara de red asociada. De lo contrario, para una nica
direccin IP, el campo netmask debera ser establecido a 255.255.255.255.
Si no est seguro sobre cmo especificar una mscara de red, vea el documento Redes en
Linux Como (Previamente Net-3 Como), en la direccin
http://lucas.hispalinux.es/COMO-INSFLUG/COMOs/Redes-En-Linux-Como/, o
consulte con su administrador del sistema.
auth_method
El mtodo de autenticacin especifica el tipo de autenticacin que el servidor debera usar
para un usuario que intenta conectar a PostgreSQL. Lo siguiente es una lista de
opciones disponible para el mtodo auth_method:
trust
El mtodo trust permite a cualquier usuario del host (mquina) definido conectar a una
base de datos PostgreSQL sin el uso de una contrasea, como cualquier usuario
PostgreSQL. Usted est autorizando la autenticacin basada en mquina con el uso de ste
mtodo, y para cualquier usuario de la mquina especificada. Esta es una condicin
insegura si la mquina especificada no es una mquina segura, o proporciona acceso a
usuarios desconocidos para usted.
reject
El mtodo reject automticamente deniega el acceso a PostgreSQL para esa mquina o
usuario. Esta puede ser una configuracin prudente para sitios en los que nadie est
autorizado a conectar a su servidor de bases de datos.
password
El mtodo password especifica que debe existir una contrasea para una conexin de
usuario. El uso de ste mtodo requerir que el usuario que conecta proporcione una
contrasea que coincida con la contrasea encontrada en la tabla global de sistema
pg_shadow para ese nombre de usuario. Si usted usa ste mtodo, la contrasea ser enviada
en texto plano.
crypt
El mtodo crypt es similar al mtodo password. Cuando se usa crypt, la contrasea no es
enviada en texto plano, sino a travs de un formato simple de encriptacin. El uso de ste
mtodo no es muy seguro, pero es mejor que usar el mtodo de contraseas planas.
krb4, krb5
Los mtodos krb4 y krb5 son usados para especificar la versin 4 5 del sistema de
autenticacin Kerberos. La instalacin y configuracin de Kerberos queda fuera del mbito
de ste libro, pero si desea autenticar va Kerberos, estos mtodos estn disponibles.
ident
El mtodo ident especifica que un mapa de identidad debera ser usado cuando una
mquina est solicitando conexiones desde una IP vlida listada en el archivo pg_hba.conf.
ste mtodo requiere una opcin.
La opcin requerida puede ser tanto el trmino especial sameuser, o un mapa nombrado
que es definido dentro del archivo pg_ident.conf. Para ms informacin sobre definicin de
un mapa de identificacin, vea la seccin nominada ``El Archivo pg_ident.conf''.
auth_option
El campo auth_option puede o no ser requerido, en funcin del tipo de mtodo de
autenticacin que sea usado; a partir de PostgreSQL 7.1.x, slo el mtodo ident requiere
una opcin.
Aviso: No le aconsejamos el uso ni de password ni de crypt sin el uso de un mecanismo
externo de encriptacin. Vea la seccin nominada ``Sesiones Encriptadas'' en ste captulo
para ms informacin sobre cmo instalar un mecanismo central de encriptacin para todo su
trfico PostgreSQL.
3.1.4 Ejemplos de entradas pg_hba.conf
Esta seccin contiene una serie de ejemplos que pueden ser usados dentro del archivo
pg_hba.conf. Para empezar, el registro de mquina del Ejemplo 8-6 permite a una nica
mquina con la IP 192.168.1.10 conectarse a cualquier base de datos con cualquier
nombre de usuario, sin el uso de contrasea. Esto se debe a que se ha configurado con los
trminos all y trust, respectivamente.
El Ejemplo 8-7 muestra un registro de mquina que rechazar a todos los usuarios desde
la mquina 192.168.1.10, para cualquier base de datos. Esto es as configurando mediante
el uso de los trminos all y reject la base de datos objeto y el mtodo de autenticacin,
respectivamente.
Ejemplo 8-8. Una sla mquina, una sla entrada de base de datos.
Ampliando el uso de las subredes, el registro de mquinas del Ejemplo 8-10 permite a
cualquier mquina del bloque 192.168.1 conectar a la base de datos booktown, sin el uso
de contraseas.
Recuerde, como ya vimos en sta seccin, que cada lnea de registro de mquina es leda
secuencialmente desde la primera hasta la ltima. El primer registro que coincida con la
mquina que intenta conectar ser usado. Si no hay coincidencias, la conexin es denegada.
Cada miembro del mapa de identificacin es definido en una nica lnea, la cual asocia un
nombre mapeado con un nombre de identifiacin de usuario y su traslacin a un nombre
de usuario PostgreSQL.
El archivo pg_ident.conf puede contener mltiples nombres de mapas. Cada grupo de
lneas simples con el mismo nombre de mapa asociativo es considerado como un nico
mapa.
El archivo pg_hba.conf determina los tipos de conexiones que relacionan a los usuarios
en este archivo.
Una nica lnea para definir un mapa de identificacin consiste en tres elementos: el
nombre del mapa, el nombre de usuario que se identifica, y su traslacin a nombre de
usuario en PostgreSQL. Esta sintaxis es introducida como sigue, donde cada elemento
est separado por espacios o tabulaciones:
nombre_mapa
El nombre de mapa usdo en el archivo pg_hba.conf para referirse al mapa de
identificacin.
nombre_identidad
El nombre identificativo de usuario, el cual es generalmente el nombre de usuario del
sistema que intenta establecer una conexin a la base de datos. Este es el nombre
proporcionado por el demonio identd, el cual debe ser ejecutado en el sistema al cual se
intenta conectar.
nombre_postgresql
El nombre de usuario de la base de datos que est autorizado para nombre identificativo
de usuario. Usted puede especificar varias lneas con el mismo nombre de identidad,
pero con diferentes nombres postgresql, en orden a permitir a un mismo usuario del
sistema acceder a varias cuentas, lo cual no necesariamente ha de estar referido a la
misma base de datos.
Como ejemplo, suponga que el servidor de la Ciudad del Libro (Book Town) tiene una
serie de cuentas de sistema denominadas jdrake, jworsley y auditor, usadas por dos
vendedores y por un auditor interno, respectivamente.
Puede que desee crear un par de mapas de identidad para estos dos grupos de usuarios.
Suponga que la estacin detrabajo del departamento de ventas tiene la direccin IP
192.168.1.3, y que slo necesita acceso a la base de datos booktown, mientras que la
estacin de trabajo del departamento de auditora tiene la direccin IP 192.168.1.4, y
requiere acceso a todas las bases de datos. Este escenario podra resultar en un archivo
pga_hba.conf, tal como el mostrado en el Ejemplo 8-11.
El registro de mquina del Ejemplo 8-13 permite a cualquier mquina en el bloque de red
192.168.1 conectar a la base de datos booktown, usando el nombre de usuario
PostgreSQL que coincide con el nombre de usuario proporcionado por identd. El trmino
sameuser causa que PostgreSQL implcitamente compare el solicitado nombre de
usuario PostgreSQL contra el nombre proporcionado por identd.