Escolar Documentos
Profissional Documentos
Cultura Documentos
PostgreSQL 8.4
Aldo Cristiá Alvarez, Yeni Morgado Sánchez, Ing. Marcos Luis Ortíz Valmaseda,
Ing. Yudisney Vazquez Ortíz
Junio de 2010
Tabla de contenidos
Prefacio........................................................................................................................... 3
Audiencia .................................................................................................................... 3
Convenciones ............................................................................................................. 3
4.- Procedimiento para la compilación de los módulos del contrib de PostgreSQL 8.4 54
2
Prefacio
- Audiencia.
- Convenciones.
- Secciones de la Guía.
Audiencia
Convenciones
Convención Significado
Cambria, 11 pto, negrita Indica los comandos que se deben escribir en el terminal
de Debian, directorios o cualquier referencia a comandos y
extensiones dentro del texto.
Cambria, 11 pto, itálica Indica los comentarios a los comandos, para que puedan
ser entendidos.
3
Secciones de la Guía
4
GNU readline: librería usada por defecto, permite al psql1 recordar cada
línea de comando escrita y usar las teclas de cursor para volver a
mostrar y editar comandos previamente escritos.
1
Intérprete de línea de comandos SQL de PostgreSQL.
5
1.- Descripción del sistema de gestión de bases de datos PostgreSQL
- Cuenta con una API sumamente flexible propia para el trabajo con varios
lenguajes de programación y procedurales como C, C++, .NET, Bash, Delphi,
PL/Java, PL/Perl, PL/Tcl, PL/pgSQL, PL/Ruby, PL/PHP, PL/Python,
PL/Scheme y PL/R.
2
Elemento que se utiliza para el almacenamiento de objetos temporales y para la organización física de
los objetos.
6
- Ofrece un control de acceso simultáneo a través de la gestión de múltiples
versiones de un mismo registro (MVCC).
La mayoría de los nuevos cambios con los que cuenta PostgreSQL 8.4 son
herramientas incorporadas, órdenes de administración y monitoreo. Entre las mejoras
más significativas que se le añadieron están:
- Nuevos métodos del ejecutor para anti joins y semijoins (EXISTS y NOT
EXISTS).
3
La recomendación es tener un número de jobs en dependencia de la cantidad de procesadores de la
computadora.
7
- Actualizaciones desde 8.3 a 8.4 con muy bajo tiempo de inactividad, gracias al
uso de pg-migrator beta.
- Nueva implementación del mapa de espacio libre para el uso de espacio físico
en disco y no en memoria.
Los pasos para instalar PostgreSQL 8.4.1 desde el código fuente son los siguientes:
8
Paso 1.- Instalar make, tar y gzip, para satisfacer los tres primeros requerimientos de
los paquetes (generalmente estos son instalados por defecto cuando se instala el
sistema operativo, pero para estar seguros, se ejecuta este paso); para ello se utilizará
el gestor de paquetes apt4 con el comando siguiente:
4
Advanced Package Tool, sistema de gestión para paquetes de software. El apt-get es una herramienta
de línea de comandos para el manejo de paquetes, puede ser considerada como la herramienta de
respaldo a otras que usan la librería apt.
9
Paso 2.- Instalar la herramienta build-essential, para satisfacer el requerimiento del
compilador; puede hacerse con el comando siguiente:
Paso 3.- Instalar las dependencias que necesita el PostgreSQL para su correcto
funcionamiento.
10
# libncurses, librería que provee una API al programador para escribir interfaces
basadas en texto; optimiza el refrescamiento de la pantalla, reduciendo la latencia
cuando se usan intérpretes de comandos remotos.
11
# Por ejemplo si la ubicación de la fuente de PostgreSQL fuera el Escritorio de
administrador el comando sería cp –r /home/administrador/Escritorio/postgresql-
8.4.1.tar.gz /usr/local/src.
cp -r [ubicación_paquete] usr/local/src
Paso 5.- Ubicar el directorio desde donde se ejecutarán los comandos del terminal en
src, que será donde se instalará el PostgreSQL; para ello se debe utilizar el comando
siguiente:
cd /usr/local/src/
Paso 6.- Descompactar el paquete PostgreSQL 8.4.1, puede hacerse con el comando
siguiente:
Paso 7.- Ubicar el directorio desde donde se ejecutarán los comandos del terminal en
PostgreSQL-8.4.1, paquete descompactado en el paso anterior; para ello puede
emplearse el comando:
cd /usr/local/src/PostgreSQL-8.4.1/
Paso 8.- Proceder a la instalación del gestor, para ello escribir los comandos
siguientes:
# Para configurar las fuentes e indicar al instalador dónde crear los directorio de
instalación. ./configure es un sript que ejecutará un conjunto de pruebas para
determinar el valor de varias variables dependientes del sistema y detectar cualquier
cosa extraña del sistema operativo; crea varios archivos en el árbol de construcción
para guardar lo que encontró. Todos los archivos serán instalados en
/usr/local/pgsql por defecto. La opción --prefix especifica que todos los archivos
serán instalados en subdirectorios dentro del directorio especificado
(/usr/local/pgsql). Las opciones --without-pam --without-ldap --without-krb5
especifican que será instalado el sistema sin soporte a PAM (Pluggable
12
Authentication Modules), LDAP para la autenticación y conexión y Kerberos 5 para la
autenticación. La opción --enable-thread-safety permite hilos concurrentes en libpq
para el control seguro en el manejo de conexiones privadas.
13
make
make install
14
Figura 6.- Ejecución del comando make install
make clean
15
Figura 7.- Ejecución del comando make clean
Una vez instalado el gestor, se deben realizar una serie de pasos para su
configuración.
Paso 1.- Crear usuario del sistema, a través del siguiente comando:
# El usuario del sistema será el dueño del sistema de ficheros generados por el gestor
y el encargado de ejecutar el motor de bases de datos. La herramienta adduser es
para añadir usuarios o grupos al sistema en /etc/adduser.conf, la opción --system
añade el usuario y el grupo al sistema, --quiet elimina mensajes informacionales, sólo
mostrando advertencias y errores, --home /var/lib/pgsql especifica que pgsql será el
directorio raíz del usuario, --shell /bin/bash especifica que se utilizará el directorio
dado como intérprete de autenticación de usuarios, --gecos “PostgreSQL
administrator” postgres cambia el campo gecos para la entrada especificada. El
16
usuario ha sido creado sin clave de acceso, por lo que la única forma de convertirse
en él, es siendo root.
Figura 8.- Ejecución del comando para crear el usuario del sistema
Paso 2.- Cambiar el usuario actual al usuario del sistema creado en el paso anterior,
para ello puede escribir el siguiente comando:
# su, comando usado para convertirse en otro usuario durante una sesión registrada
en el terminal. En este caso es utilizado para cambiar al usuario postgres.
su - postgres
Paso 3.- Crear el clúster de bases de datos, a través del siguiente comando:
/usr/local/pgsql/bin/initdb -D /var/lib/pgsql/data
17
Figura 9.- Ejecución del comando para crear el clúster de la base de datos
Paso 4.- Crear el directorio para los logs, necesario porque en caso de no hacerlo se
guardarían los logs del gestor dentro de la carpeta donde está instalado, ocupando
mucho espacio. Para ello se deben ejecutar los siguientes comandos:
exit
# Crear el directorio donde se almacenarán los logs, mkdir crea un nuevo directorio
en la dirección especificada.
mkdir /var/log/pgsql/
18
chown postgres.postgres /var/log/pgsql
19
cat > /etc/init.d/PostgreSQL << _EOF_
#!/bin/sh
case "\$1" in
start)
su - postgres -c "/usr/local/pgsql/bin/pg_ctl -
D /var/lib/pgsql/data -l
/var/log/pgsql/logfile.log start"
;;
stop)
su - postgres -c "/usr/local/pgsql/bin/pg_ctl -
D /var/lib/pgsql/data -l
/var/log/pgsql/logfile.log stop"
;;
restart)
su - postgres -c "/usr/local/pgsql/bin/pg_ctl -
D /var/lib/pgsql/data -l
/var/log/pgsql/logfile.log restart"
;;
*)
;;
esac
exit 0
_EOF_
20
Figura 10.- Ejecución del comando para crear el script de inicio
# chmod, cambia los permisos sobre el archivo especificado, en este caso da permisos
de lectura y ejecución al PostgreSQL para cualquiera y además permiso de escritura
para el propietario del fichero.
# Inicia el sistema PostgreSQL. Los números que aparecen, indican el orden en que se
va a iniciar y detener el dominio de PostgreSQL cuando inicie y se apague el servidor.
21
Figura 11.- Ejecución del comando para iniciar el sistema
Paso 8.- Iniciar PostgreSQL, para ello se pueden emplear los comandos siguientes:
/etc/init.d/PostgreSQL start
Paso 9.- Editar el fichero /etc/profile para que el gestor pueda ser encontrado por los
programas.
# Abre el fichero profile, donde se encuentran las variables de entorno del sistema,
conjunto de valores dinámicos que normalmente afectan el comportamiento de los
procesos en la computadora.
nano /etc/profile
# Añadir la línea al final del fichero, antes de la línea export PATH. PATH es una
variable de entorno donde se indican los caminos a los ejecutables del sistema (los
comandos). Por ejemplo cuando se pone en el terminal el comando “nano”, el sistema
busca en los diferentes caminos que están definidos en la variable PATH para
completar la ruta al fichero, que realmente es “/usr/bin/nano”. Cuando se pone en el
terminal un comando y el camino para llegar a él no está en el PATH, el sistema da
un error. EL siguiente comando añade el camino a los comandos de PostgreSQL en el
PATH, para poder ejecutar por ejemplo “psql” sin tener que poner
“/usr/local/pgsql/bin/psql”.
PATH=/usr/local/pgsql/bin:$PATH
22
Figura 12.- Ejecución del fichero donde se encuentran las variables de entorno del sistema
Para la descripción de los módulos se utilizará una plantilla definida con los elementos
que, a partir del estudio realizado, son difíciles de encontrar y son necesarios para la
selección de qué módulo utilizar según las necesidades del proyecto.
Elemento Descripción
23
dimensión de intervalo.
Lenguaje de desarrollo C
5
Los comandos y ubicación son los mismos para la mayoría de los módulos, de ahora en adelante se
prescindirá de estas filas en el resto de las descripciones, a no ser que sean diferentes.
24
otras con el nombre de cada módulo, para instalarlo
debe posicionarse en el terminal en la ubicación del
módulo y escribir los comandos siguientes:
make
make install
make installcheck
Elemento Descripción
25
cadenas de la serie se considerarán similares si
tienen los mismos códigos.
Lenguaje de desarrollo C
Elemento Descripción
26
Desarrolladores Joe Conway6.
Lenguaje de desarrollo C
Ubicación http://www.joeconway.com/plr/
Elemento Descripción
Lenguaje de desarrollo C
6
Ver en la Tabla 3 su breve reseña.
27
Fecha de última versión v 1.16, 11-06-2009
Elemento Descripción
Lenguaje de desarrollo C
Elemento Descripción
7
Ver en la Tabla 5 su breve reseña.
28
Descripción Proporciona un medio para el seguimiento de las
estadísticas de la ejecución de todas las sentencias
SQL ejecutadas por un servidor.
Lenguaje de desarrollo C
Elemento Descripción
8
Firma de telefonía japonesa Nippon Telegraph and Telephone, software de código abierto.
29
en la ventana principal del pgAdmin.
Lenguaje de desarrollo C
Elemento Descripción
30
Descripción Este módulo es una utilidad que ayuda a los
administradores a examinar la estructura de los archivos
utilizados por PostgreSQL.
Desarrolladores B. Palmer.
Lenguaje de desarrollo C
Elemento Descripción
31
sustitución de la secuencia de comandos
predeterminado de la transacción, con una secuencia de
comandos de transacción para leer de un archivo (-f
option), en este caso una transacción se considera
como una ejecución de un archivo de comandos. Incluso
se pueden especificar varias secuencias de comandos
(multiple -f options), en cuyo caso se escoge al azar y se
eligen las secuencias de comandos cada vez que se
inicia en la sesión de cliente una nueva transacción.
Lenguaje de desarrollo C
Elemento Descripción
9
Empresa dedicada principalmente a los productos de código abierto y tecnologías Linux, además de
ofrecer servicios de software japoneses.
32
un disparador lo_manage.
Lenguaje de desarrollo C
33
Tabla 12.- Descripción del módulo pg_standby de administración (EnterpriseDB Corporation,
2010), (PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
Lenguaje de desarrollo C
34
Fecha de última versión v 1.28, 26-02-2010
Elemento Descripción
Lenguaje de desarrollo C
Elemento Descripción
10
Ver en la Tabla 10 su breve reseña.
35
Desarrolladores Tatsuo Ishii.9
Lenguaje de desarrollo C
Elemento Descripción
Lenguaje de desarrollo C
11
Ver en la Tabla 6 su breve reseña.
36
Fecha de última versión v 1.14, 02-01-2010
Elemento Descripción
- auto_explain.log_min_duration (integer): es el
tiempo de ejecución mínimo de la instrucción, se
da en milisegundos, esta función hará que el plan
de la sentencia esté registrado.
37
ejecutada realmente, no sólo planeada y, da las
salidas para ser mostradas cuando se registra un
plan de la ejecución. Este parámetro está
desactivado por defecto. Solamente los
superusuarios pueden cambiar esta configuración.
Lenguaje de desarrollo C
Tabla 17.- Descripción del módulo hstore de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
12
Ver en la Tabla 7 su breve reseña.
38
Fecha de creación 05-09-2006
Lenguaje de desarrollo C
Elemento Descripción
39
El módulo ltree soporta diferentes tipos de datos como
son:
Oleg Bartunov.14
Lenguaje de desarrollo C
Tabla 19.- Descripción del módulo pg_trgm de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
13
Ver en la Tabla 17 para su breve reseña.
14
Ver en la Tabla 17 para su breve reseña.
40
Descripción El módulo de pg_trgm proporciona funciones y
operadores para determinar la similitud de texto basado
en la correspondencia trigrama, así como clases de
índices de operador que apoyan la búsqueda rápida por
cadenas similares.
Oleg Bartunov.16
Lenguaje de desarrollo C
Tabla 20.- Descripción del módulo seg de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
15
Ver en la Tabla 17 para su breve reseña.
16
Ver en la Tabla 17 para su breve reseña.
41
Fecha de creación 11-12-2000
Lenguaje de desarrollo C
Tabla 21.- Descripción del módulo tablefunc de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
Lenguaje de desarrollo C
17
Ver en la Tabla 2 para su breve reseña.
18
Ver en la Tabla 3 para su breve reseña.
42
Tabla 22.- Descripción del módulo uuid-ossp de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
Lenguaje de desarrollo C
Tabla 23.- Descripción del módulo citext de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
43
Lugar de origen Grupo Global de Desarrollo de PostgreSQL
Lenguaje de desarrollo C
Tabla 24.- Descripción del módulo dict_xsyn de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
19
Es un sistema de publicaciones Web, gestión de contenido de clase empresarial y de código abierto.
44
contiene la lista de sinónimos. Este archivo debe
estar almacenado en $SHAREDIR/tsearch_data/
donde $SHAREDIR mantiene la instalación de
PostgreSQL compartida en el directorio de datos.
Este nombre debe finalizar en .rules, las cuales no
deben ser incluidas en el parámetro de reglas.
Lenguaje de desarrollo C
Tabla 25.- Descripción del módulo spi de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
20
Ver en la Tabla 17 para su breve reseña.
45
Oleg Bartunov.21
Lenguaje de desarrollo C
Tabla 26.- Descripción del módulo test_parser de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
Lenguaje de desarrollo C
Tabla 27.- Descripción del módulo btree_gin de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
21
Ver en la Tabla 17 para su breve reseña.
22
Ver en la Tabla 24 para su breve reseña.
46
Descripción Proporciona una muestra de una clase de operador GIN
que implementa el comportamiento equivalente de B-
Tree23 para los tipos de datos int2, int4, int8, float4,
float8, timestamp con/sin zona horaria, time con/sin
zona horaria, fecha, intervalo, oid, moneda, char,
varchar, text, bytea, bit, varbit, macaddr, inet y cidr.
Oleg Bartunov.25
Lenguaje de desarrollo C
23
Estructuras de árbol que se encuentran comúnmente en las implementaciones de bases de datos y
sistemas de archivos.
24
Ver en la Tabla 17 para su breve reseña.
25
Ver en la Tabla 17 para su breve reseña.
47
Soporte Grupo de Desarrollo Global de PostgreSQL
Tabla 28.- Descripción del módulo btree_gist de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
Oleg Bartunov.27
26
Ver en la Tabla 17 para su breve reseña.
27
Ver en la Tabla 17 para su breve reseña.
48
Lenguaje de desarrollo C
Elemento Descripción
49
180/pi de modo que las distancias sean en grados.
Hal Snyder.
Lenguaje de desarrollo C
Tabla 30.- Descripción del módulo isn de desarrollo (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
50
Fecha de creación 09-09-2006
Lenguaje de desarrollo C
Elemento Descripción
51
los dos puntos (:) entonces se utiliza la función raw
(), esta función permite que se utilice el módulo tipo
Apache's Auth_PostgreSQL.
Lenguaje de desarrollo C
Tabla 32.- Descripción del módulo pgcrypto de seguridad (EnterpriseDB Corporation, 2010),
(PostgreSQL CVSweb, 2010), (PostgreSQL Global Development Group, 2010)
Elemento Descripción
28
Es un proyecto rápido, seguro, está disponible para una amplia gama de plataformas y el código fuente
está disponible libremente bajo una licencia de actividad empresarial.
52
SHA512, si pgcrypto está construido con
OpenSSL.
Lenguaje de desarrollo C
Tabla 33.- Descripción del módulo veil de seguridad (doxygen, 2010), (pgfoundry.org, 2010)
Elemento Descripción
53
proveedores de bases de datos describen esto como
una base de datos virtual privada.
Ubicación http://pgfoundry.org/frs/?group_id=1000139&release_id=
1597
Antes de compilar cualquier módulo es necesario realizar los pasos 1 y 2, que serán
hechos sólo una vez aun cuando se quieran compilar tantos módulos como se deseen
e incluso cuando dicha compilación no sea realizada en el mismo momento.
Paso 1.- Compilar el directorio port para que sean incluidas librerías necesarias para la
ejecución de los módulos, para ello se pueden emplear los comandos siguientes:
54
cd /usr/local/src/postgresql-8.4.1/src/port
make
make install
Paso 2.- Compilar los directorios interfaces para que sean incluidas librerías
necesarias para la ejecución de los módulos, para ello se pueden emplear los
comandos siguientes:
cd /usr/local/src/postgresql-8.4.1/src/interfaces
make
make install
Los pasos para la compilación de los módulos específicos son los siguientes:
Paso 1.- Ubicar el directorio desde donde se ejecutarán los comandos del terminal en
el módulo nombre_módulo que se desee compilar, para ello se debe utilizar el
comando siguiente:
cd /usr/local/src/postgresql-8.4.1/contrib/[nombre_módulo]
Paso 2.- Compilar el módulo seleccionado, para ello se deben emplear los comandos
siguientes:
make
55
Figura 13.- Ejecución del comando make en el módulo fuzzystrmatch
make install
# su, comando usado para convertirse en otro usuario durante una sesión registrada
en el terminal. En este caso es utilizado para cambiar para el usuario a postgres.
su - postgres
Paso 4.- Aplicar el módulo al template1 para que todas las bases de datos que se
creen a partir de él hereden sus funcionalidades, para ello escribir el comando
siguiente:
/usr/local/pgsql/bin/psql –f /usr/local/src/postgresql-
8.4.1/contrib/nombre_módulo/nombre_módulo.sql -d template1
56
Figura 15.- Ejecución del comando para aplicarles los cambios a la base de datos template1
Paso 1.- Instalar las headers (dependencias) de R para la compilación del lenguaje,
para ello se pueden emplear el comando siguiente:
57
Figura 16.- Ejecución de la instalación de las dependencias
Paso 2.- Definir la variable de entorno R_HOME en el profile del usuario postgres, para
ello se pueden emplear los comandos siguientes:
su - postgres
R_HOME=/usr/lib/R
export R_HOME
R_HOME=/usr/lib/R
export R_HOME
cp -R /usr/share/R/include /usr/lib/R
58
Paso 3.- Instalar plr, para ello se pueden emplear los comandos siguientes:
cd /usr/local/src/postgresql-8.4.1/contrib/plr
make
make install
59
Figura 18.- Ejecución del comando make install en el módulo plr
Paso 4.- Reiniciar PostgreSQL, para ello se pueden emplear los comandos siguientes:
/etc/init.d/PostgreSQL restart
# su, comando usado para convertirse en otro usuario durante una sesión registrada
en el terminal. En este caso es utilizado para cambiar para el usuario a postgres.
su - postgres
Paso 6.- Aplicar el módulo al template1 para que todas las bases de datos que se
creen a partir de él hereden sus funcionalidades, para ello escribir el comando
siguiente:
/usr/local/pgsql/bin/psql –f /usr/local/scr/postgresql-8.4.1/contrib/plr/
plr.sql -d template1
60
Figura 20.- Ejecución del comando para aplicarles los cambios a la base de datos template1
Al ser un gestor base, tiene pocas dependencias por esta misma razón, para que
cuando se vaya a usar no dependa de tantas librerías externas y pueda hacerse un
buen uso del mismo, instalando sólo las que hagan falta para ello.
Pero cuando se van a incluir varios módulos del contrib, hay que hacer una buena
gestión de todas las dependencias que se vayan a usar, por el hecho de que muchos
desarrolladores y usuarios instalan las mismas de una forma no muy organizada, por
61
lo que se recomienda conformar una lista completa de todas las dependencias para
así hacer un buen trabajo en este sentido.
Pero antes de que se vaya a incluir algún módulo en el gestor, primero se recomienda
compilar los contenidos de los directorios src/ports y src/interfaces en el árbol de
fuentes del gestor, los cuales proveen de librerías y cabeceras que se usarán en la
compilación de muchos de los módulos que se agregarán luego.
Cuando se están realizando muchas pruebas con el gestor y se necesitan tener varias
versiones del mismo en el servidor en el cual se están realizando dichas pruebas, lo
mejor sería desarrollar scripts personalizados para que el trabajo de compilación,
situado de los archivos, organización y creación del directorio de datos, etc; para que
no sea tan tedioso para los desarrolladores o los probadores. Un ejemplo práctico de
la construcción de un script de este tipo en Linux se muestra a continuación:
29
Las dependencias que se toman de R en este escrito están probadas en el sistema operativo Debian
GNU/Linux 5.0
62
#!/bin/bash
# Default "configure" args. They will be overridden with the contents of a
# CONFIGURE_ARGS file in the source directory.
CONFIGURE_ARGS="--enable-debug --enable-depend --enable-cassert --enable-nls -
-cache-file=/home/alvherre/tmp/pgconfig.@TREE@.cache --enable-thread-safety
--with-python --with-perl --with-tcl --with-openssl --with-libxml"
# The root directory, where everything lies. Defaults to $HOME/CVS/pgsql,
# but can be changed by the PGROOT environment variable.
ROOT=${PGROOT-/pgsql}
# do we have a diff coloring utility?
for prog in cdiff colordiff; do
which $prog >/dev/null 2>/dev/null
if [ $? == 0 ]; then
# COLORDIFF=`which $prog`
break
fi
done
# If the first argument is "_commands", return the list of known commands
if [ ! -z "$1" -a "$1" == '_commands' ]; then
for i in config build install init server client check pcheck tags
changelog rmderived update showdiff touchchanged edit; do
echo $i
done
exit
fi
# If the argument is a file, its contents is the real target. Useful to have
# a "default" build, pointing to whatever is the current development tree.
if [ -f $ROOT/source/$1 ]; then
DIR=`cat $ROOT/source/$1`
else
DIR=$1
fi
SRCDIR=$ROOT/source/$DIR
INSTDIR=$ROOT/install/$DIR
BUILDDIR=$ROOT/build/$DIR
PGDATADIR=$INSTDIR/data
export LD_LIBRARY_PATH=$INSTDIR/lib
63
if [ -z "$DIR" ]; then
LIST=`cd "$SRCDIR" ; find . -maxdepth 1 -mindepth 1 -type d`
echo "I need an argument -- one from:"
for i in $LIST; do
echo -n " "`basename $i`
done | (fmt 2>&1 || true)
echo ""
exit
fi
PGPORT=$((55432+$(echo $BUILDDIR | sed -e 's/^[^0-9]*\([0-9]*\).*$/\1/' -e 's/^0*//' -e
's/^$/0/' )))
# Miscelaneous functions
check_srcdir() {
if [ ! -d $SRCDIR ]; then
echo "The first argument must be a source directory" >&2
ls $ROOT/source >&2
exit
fi
}
check_blddir() {
if [ ! -d $BUILDDIR ]; then
echo "The first argument must be a VPATH build directory" >&2
ls $ROOT/build >&2
exit
fi
}
check_backend() {
backend=$BUILDDIR/src/backend/postgres
if [ ! -f $backend ]; then
echo "The backend must exist at $backend" >&2
exit
fi
}
check_instdir() {
if [ ! -x $INSTDIR/bin/postmaster ]; then
echo "$DIR debe ser un directorio de instalación" >&2
exit
fi
}
64
runpg_config() {
check_srcdir
if [ -d $BUILDDIR ]; then
echo -n "Desea eliminar $BUILDDIR (y/n)? "
unset removed
read answer
if [ ! -z "$answer" ]; then
if [ "$answer" = 's' -o "$answer" = 'y' ]; then
rm -fr $BUILDDIR
removed=t
fi
fi
if [ -z "$removed" ]; then
exit
fi
fi
mkdir $BUILDDIR
if [ -f $SRCDIR/CONFIGURE_ARGS ]; then
CONFIGURE_ARGS=`cat $SRCDIR/CONFIGURE_ARGS`
fi
CONFIGURE_ARGS=${CONFIGURE_ARGS//@TREE@/$DIR}
cd $BUILDDIR
echo $SRCDIR/configure $CONFIGURE_ARGS --prefix=$INSTDIR --with-
pgport=$PGPORT
$SRCDIR/configure $CONFIGURE_ARGS --prefix=$INSTDIR --with-
pgport=$PGPORT
make -C src -s distprep
cd "$OLDPWD"
}
runpg_build() {
check_srcdir
check_blddir
cd $BUILDDIR
LC_ALL=C make -j3 2>&1 >> $BUILDDIR/build.out | tee -a
$BUILDDIR/build.err
LC_ALL=C make -j3 -C contrib 2>&1 >> $BUILDDIR/build.out | tee -a
$BUILDDIR/build.err
cd "$OLDPWD"
}
65
runpg_install() {
check_backend
cd $BUILDDIR
LC_ALL=C make -j3 install 2>&1 >> $BUILDDIR/build.out | tee -a
$BUILDDIR/build.err
LC_ALL=C make -j3 -C contrib install 2>&1 >> $BUILDDIR/build.out | tee
-a $BUILDDIR/build.err
cd "$OLDPWD"
}
build)
runpg_build
exit $?
;;
install)
runpg_install
exit $?
;;
init)
check_instdir
rm -fr $PGDATADIR
$INSTDIR/bin/initdb -D $PGDATADIR
exit $?
;;
server)
check_instdir
if [ ! -z $DISPLAY ]; then
echo -ne "\033]0;$1 server\007"
fi
ulimit -c unlimited
PGDATA=$PGDATADIR exec $INSTDIR/bin/postmaster
exit
;;
66
client)
check_instdir
export PATH=$INSTDIR/bin:$PATH
export PGDATA=$PGDATADIR
if [ ! -f $PGDATA/db_created ]; then
createdb &&
createlang plpgsql &&
createlang plperl &&
createlang pltcl &&
createlang plpythonu &&
touch $PGDATA/db_created
fi
PGCMD=psql
if [ ! -z "$DISPLAY" ]; then
echo -ne "\033]0;$1 client\007"
fi
psql
exit
;;
check)
check_instdir
make -C $BUILDDIR/src/test/regress installcheck
;;
contribcheck)
check_instdir
make -s -C $BUILDDIR/contrib installcheck
;;
pcheck)
check_instdir
cd $BUILDDIR/src/test/regress
make -C $BUILDDIR/src/test/regress installcheck-parallel
;;
tags)
check_srcdir
cd "$SRCDIR"
echo "getting file list for cscope ..."
find $SRCDIR $BUILDDIR \( -name "*.[chly]" -o -iname "*makefile*" -o
-name "*.mk" -o -name "*.in" -o -name "*.sgml" -o -name "*.sh" -o -name
"*.sql" \) -type f > $SRCDIR/cscope.files
echo "building cscope database ..."
67
cscope -b
echo "building tags file ..."
ctags -R
echo "done"
;;
changelog)
check_srcdir
cd "$SRCDIR"
if [ ! -d CVS ]; then
echo "operation is valid only on CVS trees" 1>&2
exit -1
fi
common_args="--revisions --no-indent --no-wrap --separate-header"
branch_arg=""
branch=$(cvs status configure.in | grep 'Sticky Tag' | awk '{print $3}')
if [ $branch != "(none)" ]; then
branch_arg="--follow $branch"
fi
if [ ! -f ChangeLog ]; then
cvs2cl $common_args $branch_arg
else
cvs2cl $common_args $branch_arg --accum
fi
;;
rmderived)
check_srcdir
cd "$SRCDIR"
find . -name .cvsignore | while read line
do
dir=$(dirname $line)
cd $dir
rm -fv `cat .cvsignore`
cd "$OLDPWD"
done
;;
update)
check_srcdir
cd "$SRCDIR"
if [ -d CVS ]; then
;;
68
cvs update -Pd
elif [ -d .svn ]; then
svn update
elif [ -d .git ]; then
echo "not supported for git trees" >&2
exit -1
fi
;;
showdiff)
check_srcdir
cd "$SRCDIR"
if [ ! -z "$COLORDIFF" ]; then
pipe="$COLORDIFF"
else
pipe=cat
fi
if [ -d CVS ]; then
cvs -q diff | $pipe | less -r
elif [ -d .svn ]; then
svn diff | $pipe | less -r
elif [ -d .git ]; then
git diff
fi
;;
touchchanged)
check_srcdir
cd "$SRCDIR"
if [ -d CVS ]; then
cvs -q diff | grep ^Index | cut -d" " -f2 | xargs touch
elif [ -d .svn ]; then
svn diff | grep ^Index | cut -d" " -f2 | xargs touch
fi
;;
edit)
check_srcdir
cd "$SRCDIR"
vi -g &
;;
*)
check_instdir
echo "export PATH=$INSTDIR/bin:$PATH"
echo "export MANPATH=$INSTDIR/share/man"
echo "export PGDATA=`echo $PGDATADIR`"
echo "export PGPORT=$PGPORT"
echo "export PGLIBS=$INSTDIR/lib"
echo "export PGINCLUDE=$INSTDIR/include"
;;
esac
69
A continuación se explicarán algunas de las opciones del script:
- commands: da una lista de órdenes que conoce. Esto es útil para el “bash
completion”.
Notas acerca de la utilización del script: El primer parámetro debe ser el nombre de un
"cvs checkout" de una rama, y el nombre debe empezar con un número, el cual se
suma a 5432 para obtener el nombre de puerto base que se pasa a --with-pgport. El
script creado usa nombres como "84_rel", de manera que cada nombre es fácil de
recordar y quedan en puertos distintos, por lo que se pueden tener los servidores
70
corriendo simultáneamente.
Si uno le da el nombre de la rama pero ninguna otra opción, emite una serie de
definiciones de variables de ambiente. Eso se puede agregar al ambiente existente.
Por ejemplo yo uso `runpg 84_rel` y define PGDATA, PGPORT, y otras cosas útiles.
pgsql/
source/
84_rel
83_rel
etc
build/
84_rel
etc
install
Esto se ubica en /pgsql normalmente, pero uno puede definir la variable de ambiente
PGROOT para cambiar esto. Por ejemplo se pudiera tener "export
PGROOT=~/Code/pgsql" o algo por el estilo. Cuando se hace "config" de una rama del
código, se crea el directorio dentro de build y se ejecuta configure; los ficheros .so
quedan en ese otro directorio, lo que se conoce como una construcción VPATH.
Los pasos para desinstalar algún módulo desde el código fuente son los siguientes:
Paso 1.- Cambiar el usuario actual al usuario del sistema, para ello puede escribir el
siguiente comando:
# su, comando usado para convertirse en otro usuario durante una sesión registrada
en el terminal. En este caso es utilizado para cambiar para el usuario a postgres.
su - postgres
Paso 2.- Ejecutar el desinstalador del módulo dentro de la template1, para ello escribir
el comando siguiente:
71
/usr/local/pgsql/bin/psql –f
/usr/local/pgsql/share/contrib/uninstall_[nombre del módulo].sql -d
template1
Paso 3.- Desconectarse como postgres, para ello escribir el comando siguiente:
exit
Paso 4.- Borrar el fichero [nombre del fichero].so que es generado por la compilación,
para ello escribir el comando siguiente:
72