Guión de las prácticas de Bases de Datos y Perl

Índice

I.Familiarización con el shell de PostgreSQL, psql
II.Manipulación de datos. Transacciones
III.Acceso mediante programa a la base de datos
IV.Selección de datos. Consultas de agregación.
V.Creación de nuevas tablas. Creación de nuevos scripts.
VI.Instalación de PostgreSQL en un sistema Unix
VII.Creación de la primera base de datos PostgreSQL, y puesta en ejecución del gestor de bases de datos
VIII.Instalación fácil de los paquetes de Perl para PostgreSQL

I Familiarización con el shell de PostgreSQL, psql

1.- Creación de una base de datos. Creación de usuarios.

2.- Ver las tablas que hay en una base de datos.

3.- Describir una tabla

4.- Cómo ejecutar un script de SQL

5.- Cómo guardar los resultados en un fichero

6.- Cómo salir de psql

II Manipulación de datos. Transacciones

Para esta práctica, la base de datos va a almacenar entradas de SWISSPROT, junto con parte de la información disponible en sus entradas. Se almacenarán todos los accession numbers de la entrada, tomando como representativo el primer accession number; el identificador; la fecha de la última modificación de la entrada; la descripción; la secuencia y el peso molecular.

El fichero SQL con los comandos de creación de las tablas es initial.sql, y lo ejecutaremos como se ha visto en la práctica anterior.

En la estructura inicial vamos a introducir manualmente datos inventados, para posteriormente comprobar las restricciones de integridad referencial, etc, etc... Para ello, vamos a tomar un par de entradas al azar de SWISSPROT, y vamos a insertarlas. Las entradas aleatorias se pueden obtener de:

http://www.expasy.org/cgi-bin/get-random-entry.pl?S

III Acceso mediante programa a la base de datos

Mediante el script de ejemplo de inserción (swinsert.pl), vamos a insertar 12 nuevas entradas en la base de datos, existentes en un fichero con formato SW (SW-sample.sw).

A continuación, vamos a generar a partir del contenido de la base de datos un fichero FASTA con todas las secuencias, mediante el script fastawrite.pl.

IV Selección de datos. Consultas de agregación.

Mediante consulta vamos a:

Mediante consultas de agregación, vamos a obtener los siguientes valores:

V Creación de nuevas tablas. Creación de nuevos scripts.

En esta práctica hay que añadir a la estructura existente de la base de datos las tablas necesarias para poder guardar parte de la información existente en las entradas de la base de datos PDB, y relacionar cada entrada de PDB con las entradas de SWISSPROT que aparecen reseñadas en su interior. En extended.sql podeis encontrar las sentencias SQL necesarias para crear las tablas necesarias.

De la entrada de PDB hay que guardar el identificador, la fecha en la que se creó la entrada, el título, las moléculas que contiene junto con el nombre de la molécula, las cadenas de cada molécula, las secuencias de cada cadena, su longitud y las referencias de cada cadena a las correspondientes entradas de SWISSPROT.

Hay 5 ficheros PDB en el directorio samples2, relacionados con las entradas SWISSPROT de las prácticas anteriores. Esto ficheros os servirán para que escribais un script en Perl que extraiga de ellos los campos que queremos guardar. Los ficheros están comprimidos con compress, así que tendreis que descomprimirlos previamente a su uso en Perl. Otra posibilidad es que los abrais de una forma especial en el propio script, para que se vayan descomprimiendo sobre la marcha, con una línea como la siguiente

open(INFILE,"gunzip -c fichero |");

Esta línea especial hace que se ejecute el comando gunzip para descomprimir. El parámetro '-c' hace que el resultado de la descompresión salga por la salida estándar de gunzip. La barra vertical final indica a la sentencia open de Perl que recoja esa salida, y nos la vaya proporcionando a través del manejador de fichero INFILE.

VI Instalación de PostgreSQL en un sistema Unix

1.- Hay que descargar el paquete del código fuente de PostgreSQL (por ejemplo, con wget) de un mirror cercano:

wget http://ftp.rediris.es/mirror/postgresql/src/v7.4.1/postgresql-7.4.1.tar.bz2
o bien
wget http://ftp.rediris.es/mirror/postgresql/src/v7.4.1/postgresql-7.4.1.tar.gz

2.- A continuación, se descomprime el paquete:

bunzip2 -c postgresql-7.4.1.tar.bz2 | tar xf -
o bien
gunzip -c postgresql-7.4.1.tar.gz | tar xf -
y entramos en el directorio.
cd postgresql-7.4.1

3.- Hoy en día, dentro de casi todos los programas que se distribuyen en código fuente se usa un script tipo configure. Este script comprueba si el sistema dispone de todos los programas y librerías necesarios para compilar y usar el programa. Al ejecutar lo siguiente:

./configure --help
obtendremos los parámetros de configuración del paquete. Todos los configure proporcionan la opción --prefix, que indica el directorio de instalación del software. En concreto, el configure de PostgreSQL tendrá al final del todo unas opciones similares a las siguientes:
  --with-pgport=PORTNUM   change default port number 5432
  --with-tcl              build Tcl and Tk interfaces
  --without-tk            do not build Tk interfaces if Tcl is enabled
  --with-tclconfig=DIR    tclConfig.sh and tkConfig.sh are in DIR
  --with-tkconfig=DIR     tkConfig.sh is in DIR
  --with-perl             build Perl modules (PL/Perl)
  --with-python           build Python modules (PL/Python)
  --with-java             build JDBC interface and Java tools
  --with-krb4[=DIR]       build with Kerberos 4 support [/usr/athena]
  --with-krb5[=DIR]       build with Kerberos 5 support [/usr/athena]
  --with-krb-srvnam=NAME  name of the service principal in Kerberos postgres
  --with-pam              build with PAM support
  --with-rendezvous       build with Rendezvous support
  --with-openssl[=DIR]    build with OpenSSL support [/usr/local/ssl]
  --without-readline      do not use Readline
  --without-zlib          do not use Zlib
Salvo que necesitemos algo adicional, ejecutaremos:
./configure --prefix=${HOME}/pgsql
En caso de que la librería readline no esté completa o bien instalada, tendremos que ejecutar:
./configure --prefix=${HOME}/pgsql --without-readline

4.- Una vez que configure haya funcionado, simplemente ejecutaremos

make
y esperaremos a que el programa se termine de compilar (tarda unos cuantos minutos). El comando make toma las acciones a realizar de una serie de ficheros, entre ellos el fichero Makefile. Estos ficheros son creados por configure cuando termina sus chequeos sin problemas. Cuando termine de compilar, si no ha dado errores, comprobaremos si el gestor de bases de datos está bien compilado, ejecutando:
make check
Este comando crea una base de datos temporal, en la que se comprueba el buen funcionamiento de todas las características de PostgreSQL.

5.- Por último, la instalación del software se termina ejecutando:

make install
y añadiendo las siguientes líneas al final de vuestro fichero .bashrc (si usais bash) o .profile (si usais sh):
# Dónde está instalado PostgreSQL
POSTGRES_HOME=${HOME}/pgsql
export POSTGRES_HOME

# Hacer que PostgreSQL sea ejecutable
PATH=${POSTGRES_HOME}/bin:${PATH}
LD_LIBRARY_PATH=${POSTGRES_HOME}/lib:${LD_LIBRARY_PATH}
export PATH LD_LIBRARY_PATH

# Dónde instalar los paquetes locales de Perl
PERL5LIB=${HOME}/perllib:${PERL5LIB}
export PERL5LIB
Si sois usuarios de csh (fichero .cshrc) ó tcsh (fichero .tcshrc) los comandos a añadir serán:
# Dónde está instalado PostgreSQL
setenv POSTGRES_HOME ${HOME}/pgsql

# Hacer que PostgreSQL sea ejecutable
setenv PATH ${POSTGRES_HOME}/bin:${PATH}
setenv LDTMP ${POSTGRES_HOME}/lib
if( $?LD_LIBRARY_PATH ) then
	setenv LD_LIBRARY_PATH ${LDTMP}:${LD_LIBRARY_PATH}
else
	setenv LD_LIBRARY_PATH ${LDTMP}
endif
unsetenv LDTMP

# Dónde instalar los paquetes locales de Perl
setenv PERL5LIBTMP ${HOME}/perllib
if( $?PERL5LIB ) then
	setenv PERL5LIB ${PERL5LIBTMP}:${PERL5LIB}
else
	setenv PERL5LIB ${PERL5LIBTMP}
endif
unsetenv PERL5LIBTMP

VII Creación de la primera base de datos PostgreSQL, y puesta en ejecución del gestor de bases de datos:

1.- Primero elegiremos dónde se van a almacenar los ficheros de la base de datos (por ejemplo, ${HOME}/PGDATA). El siguiente comando hay que ejecutarlo SÓLO UNA VEZ:

initdb -D ${HOME}/PGDATA

¡¡¡CUIDADO!!! ¡Si borrais el directorio ${HOME}/PGDATA, se perderán TODAS LAS BASES DE DATOS Y USUARIOS QUE HAYAIS CREADO!.

Para permitir las conexiones desde otra máquina entraremos en el directorio de la base de datos, y CON MUCHO CUIDADO (haciendo copia de seguridad de los ficheros originales) editaremos los siguientes ficheros:

La dirección IP de la máquina la necesitaremos para permitir, por ejemplo, que los ordenadores de la red local puedan acceder a la base de datos. En Linux, mediante el siguiente comando obtendremos dicha IP:
hostname -i
Si por ejemplo dicho valor devuelto es 150.244.85.85, para el fichero anterior usaremos 150.244.85.0.

2.- Para arrancar el gestor de bases de datos, tendreis que ejecutar el siguiente comando:

pg_ctl start -D ${HOME}/PGDATA
Recordad que hay que volver a arrancar el gestor de bases de datos DESPUÉS DE CADA REINICIO DEL ORDENADOR. En los manuales de PostgreSQL vienen las instrucciones de cómo hacer que Linux/Unix realice esta tarea de forma automática.

3.- Todo gestor PostgreSQL tiene una base de datos template1, que se sólo se debe usar para tareas administrativas (crear y borrar usuarios y bases de datos). Para entrar dentro, hay que ejecutar:

psql template1 {nombre de usuario de quien compiló postgres}
Ya podeis ejecutar cualquier comando SQL soportado por PostgreSQL. Lo primero que vamos a hacer es crear un usuario de base de datos, y una base de datos:
CREATE USER masteruser WITH ENCRYPTED PASSWORD 'masterpass';

CREATE DATABASE masterdb WITH OWNER = masteruser;

4.- Para probar la diferencia entre conectarse en local y conectarse por red, haremos lo siguiente:

psql masterdb masteruser
psql -h localhost masterdb masteruser
La primera sentencia permite entrar directamente, sin preguntar password. La segunda sentencia sólo permite entrar en la base de datos con la password.

VIII Instalación fácil de los paquetes de Perl para PostgreSQL:

1.- Desde línea de comandos, vamos a ejecutar CPAN, un shell de instalación de paquetes de Perl:

perl -MCPAN -e shell

2.- Si es la primera vez que se ejecuta, preguntará algo como lo siguiente:

Are you ready for manual configuration? [yes]
Normalmente, salvo configuraciones especializadas, es mejor responder no.

3.- Dado que vamos a instalar en nuestro propio directorio, lo primero que vamos a hacer es establecer el directorio de instalación:

cpan> o conf makepl_arg LIB=~/perllib
y vamos a grabar la configuración mediante el siguiente comando:
cpan> o conf commit

4.- Para instalar el paquete de Perl DBD::Pg, sólo hay que hacer:

cpan> install DBD::Pg
Si no está instalado, el paquete se descargará de internet, se compilará e instalará. Y si es necesario algún paquete adicional, automáticamente se añadirá éste al proceso de instalación.

Como vereis, ha fallado el proceso de instalación porque no se ha podido verificar que DBD::Pg está bien compilado. Para pasar estas pruebas de instalación, DBD::Pg necesita que exista una base de datos. Para ello, usaremos la base de datos que hemos creado en las prácticas anteriores.

5.- Establecemos las siguientes variables de entorno desde línea de comandos:

bash$ DBI_DSN=dbi:Pg:dbname=masterdb
bash$ DBI_USER=masteruser
bash$ DBI_PASS=masterpass
bash$ export DBI_DSN DBI_USER DBI_PASS

Sustituyendo lo que está en cursiva por los valores de lo que hayais hecho. Desde este mismo terminal, ejecutaremos de nuevo CPAN para volver a instalar DBD::Pg.

6.- Fin (por ahora)


Created by José María Fernández González
email address: jmfernandez@ gredos.cnb.uam.es