jueves, 27 de junio de 2013

Compilar PostgreSQL en Debian


Llevo trabajando unos años con PostgreSQL y no he tenido problemas, pero tenía la necesidad de utilizar funcionalidades de PostgreSQL 9 en un sistema que aún no lo incorporaba en su repositorio de paquetes y me aventuré a compilarlo. Descubrí que es bastante simple y adquiere aún más robustez si es posible. 

Para poder compilar el código fuente de postgresql necesitamos descargar de http://www.postgresql.org/ftp/source/  el paquete de postgresql que quieras instalar en tu sistema. En principio todos deben seguir el mismo procedimiento de instalación. Pero este manual lo he realizado con la versión 9.2.2 y probado con versiones posteriores (9.2.3 y 9.2.4).

Requisitos


Antes de comenzar con la instalación de PostgreSQL compilando el código fuente, es necesario instalar algunos paquetes.
aptitude install bison
aptitude install libreadline-dev libreadline5-dev libreadline6-dev
aptitude install flex
aptitude install zlib1g-dev

 Configurar, compilar e instalar

Simplemente con estos comandos ya tendremos nuestro postgres listo para comenzar a funcionar. Obiamente es necesario crear el directorio "/opt/postgresql-9.2.2" para ubicar ahí nuestro motor de base de datos.
./configure --prefix=/opt/postgresql-9.2.2
make
make install

Puesta en explotación

Creamos el usuario postgres que será el encargado de iniciar el sistema, así como el directorio contenedor de la instancia de la base de datos y le asignamos como propietario al usuario postgres.

adduser postgres --home /opt/postgresql-9.2.2
mkdir /opt/postgresql-9.2.2/data
chown -R postgres:postgres /opt/postgresql-9.2.2

Inicializar la base de datos.

Para iniciar la base de datos utilizaremos el usuario postgres, antes hay que inicializar la instancia de la base de datos.
su postgres
/opt/postgresql-9.2.2/bin/initdb -D /opt/postgresql-9.2.2/data
/opt/postgresql-9.2.2/bin/initdb --pgdata=/opt/postgresql-9.2.2/data

Iniciar la base de datos.

su postgres 
/opt/postgresql-9.2.2/bin/pg_ctl -D /opt/postgresql-9.2.2/data -l logfile start

Test de funcionamiento

Ya tenemos funcionando el motor de base de datos y probamos a crear una base de datos y conectarnos a ella.
/opt/postgresql-9.2.2/bin/createdb test
/opt/postgresql-9.2.2/bin/psql test

Script iniciar/parar/recargar

Un script bastante simple para el inicio y paro del sistema.
#!/bin/bash
### BEGIN INIT INFO
# Provides:             postgresql
# Required-Start:       $local_fs $remote_fs $network $time
# Required-Stop:        $local_fs $remote_fs $network $time
# Should-Start:         $syslog
# Should-Stop:          $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    PostgreSQL RDBMS server
### END INIT INFO

case "$1" in
    start)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl --pgdata /opt/postgresql-9.2.2/data --log /opt/postgresql-9.2.2/logfile start"
        ;;
    stop)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl stop --pgdata /opt/postgresql-9.2.2/data -m fast"
        ;;
    status)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl status --pgdata /opt/postgresql-9.2.2/data"
        ;;
    restart)
        $0 stop
        sleep 2
        $0 start
        ;;
    reload)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl reload --pgdata /opt/postgresql-9.2.2/data"
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload|status} "
        exit 1

        ;;
esac

exit 0

Primeros pasos


Ya podemos utilizar nuestra nueva instalación de postgres, aquí os dejo como crear vuestro primer usuario.
postgres@miequipo:/opt/postgresql-9.2.2$ echo "create user miusuario with password 'miclave' " | bin/psql template1
CREATE ROLE

Rotado de log

Escribí un artículo sobre el rotado de log para un xampp, basándome en ese artículo; recomiendo encarecidamente meter el fichero de log dentro del sistema de rotación de log. Es muy simple, únicamente tardarás unos minutos y puede quitarte quebraderos de cabeza posteriores.

Simplemente crea el fichero "/etc/logrotate.d/postgres" con el contenido:
/opt/postgresql-9.2.2/logfile {
    copytruncate
    compress
    dateext
    rotate 365
    size=+100M
    olddir /opt/postgresql-9.2.2/log/
    notifempty
    missingok
}
Tendrás que crear el directorio "/opt/postgresql-9.2.2/log/" donde se almacenará el histórico de log comprimidos. Para terminar solo nos falta ejecutar el procesado del fichero por primera vez para ver que todo está correcto.
logrotate --force /etc/logrotate.d/postgres