SafeChildren Banner

Havoc Oracle Solaris Experts

domingo, 16 de enero de 2011

Actualización a PostgreSQL 9.0.2 en OpenIndiana b148

Introducción
En anteriores post hemos hablado de Cómo Instalar PostgreSQL 9.x en OpenIndiana, así que este será un revisión mínima, por ello os animos a revisarlo.

La nueva versión de PostgreSQL 9.0.2 corrige algunos problemas de memory leak y por ello, es muy recomendable su actualización. Podéis encontrar todos los cambios en el ChangeLog de PostgreSQL

En este post veremos cómo actualizar PostgreSQL 9.0 64bits a la versión PostgreSQL 9.0.2 64bits.

Antes de Comenzar
Bueno, la actualización a PostgreSQL 9.0.2 no requiere hacer un "dump/restore" siempre que nos encontremos en la línea PostgreSQL 9.x, sin embargo, yo recomiendo SIEMPRE hacer un backup antes de comenzar.

Si nos encontramos en una versión diferente, deberemos realizar un "dump/restore" obligatoriamente, así como una instalación "limpia" de PostgreSQL 9.x y, por lo tanto, deberemos iniciar la estrucutra de PGDATA.

Lo cierto, es que cuando comencé a escribir el post, hice una pequeña prueba de actualización "ahí a lo bruto" sin copia de seguridad ni nada, Pensé ¿total por qué va a fallar? Pues ... falló! y me quedé sin mi DB, menos mal que teneía copia de seguridad del día anterior y, que siendo sinceros, es una PostgreSQL de pruebas y no supone mayor problema.

Por eso, antes de comenzar, ya sabéis, si tenéis alguna duda de cómo se hacen, aquí os dejo un post de Cómo Realizar Copias de Seguridad en PostgreSQL.


Para versiones anteriores a PostgreSQL 9.x
Para aquellos que estéis en una versión anterior, os recomiendo primero Instalar PostgreSQL 9.0 en OpenIndiana, y que luego continueis con este post. Recordar además, que es necesario realizar un "dump/restore"

Para versiones PostgreSQL 9.x
Para los demás, comenzamos ... podéis realizar la actualización desde el código fuente, o instalar directamente los binarios.

Obtener el Codigo Fuente
Lo primero que debemos hacer es obtener el código fuente de PostgreSQL 9.0.2 que descargaremos de su página oficial, aquí os dejo un enlace a la página de descargas de PosgreSQL.


Instalar desde el Binario
Para aquellos que o bien no tenéis la posibilidad de compilarlo, o no os apetece :D, aquí os dejo la version compilada para x86 en 64bits de PostgreSQL que he realizado.
Una vez descargado podéis ir al paso "Instalar PostgreSQL" para completar la actualización.

Preparar el Entorno
Debemos comprobar que tenemos  todos los binarios necesarios para poder compilar, es decir, compilador, make,  etc.

Si activamos la opción <--enable-dtrace> deberemos tener el directorio </usr/sbin> en nuestro PATH.
itily@openzooey:~/postgres/postgresql-9.0.2$ export PATH=$PATH:/usr/sbin:/sbin:/usr/ccs/bin/
itily@openzooey:~/postgres/postgresql-9.0.2$ which dtrace
/usr/sbin/dtrace
itily@openzooey:~/postgres/postgresql-9.0.2$ which cc
/usr/bin/cc
itily@openzooey:~/postgres/postgresql-9.0.2$ which make
/usr/bin/make
itily@openzooey:~/postgres/postgresql-9.0.2$ which ar
/usr/bin/ar
itily@openzooey:~/postgres/postgresql-9.0.2$ which python
/usr/bin/python
Compilar PostgreSQL
Para compilar esta versión de PostgreSQL utilizaremos las mismas opciones que antes, por lo tanto, podemos hacer un <copy and paste>, de nuestro archivo <config.log>. Para aquellos que no tenéis el <config.log>, aquí os dejo los pasos.

Recordar que, yo utilizo como $POSTGRES_HOME siempre el directorio </u01/app/postgres/> al puro estilo OFA, ...
$ export CC=cc  
$ export CFLAGS="-xO3  -xspace -Xa  -xildoff  -m64  -xc99=none -xCC -fast -native"
$ export LDFLAGS="-R/usr/sfw/lib/64 -R/usr/lib/64"
$ ./configure \
--prefix=/u01/app/postgres/9.0/db \
--exec-prefix=/u01/app/postgres/9.0/db \
--bindir=/u01/app/postgres/9.0/db/bin/64 \
--libexecdir=/u01/app/postgres/9.0/db/bin/64 \
--sbindir=/u01/app/postgres/9.0/db/bin/64 \
--datadir=/u01/app/postgres/9.0/db/share \
--sysconfdir=/u01/app/postgres/9.0/db/etc \
--mandir=/u01/app/postgres/9.0/db/man \
--libdir=/u01/app/postgres/9.0/db/lib/64 \
--includedir=/u01/app/postgres/9.0/db/include \
--sharedstatedir=/var/postgres/9.0 \
--localstatedir=/var/postgres/9.0 \
--enable-nls \
--docdir=/u01/app/postgres/9.0/db/doc \
--with-system-tzdata=/usr/share/lib/zoneinfo \
--with-python \
--with-pam \
--with-openssl \
--with-libedit-preferred \
--with-libxml \
--with-libxslt \
--with-gssapi \
--enable-thread-safety \
--enable-dtrace \
--disable-integer-datetimes \
--with-includes=/usr/include:/usr/sfw/include \
--with-libs=/lib/64:/usr/lib/64:/usr/sfw/lib/64 \
$ make

Instalación de PostgreSQL
Como es una actualización, antes de lanzar nuestro <make install> -o descomprimir el <tar.gz>- debemos realizar una copia de seguridad y detener nuestra PostgreSQL de forma correcta, para ello, deberemos asumir el <role> de <postgres> o uno que tengan privilegios para detenerlo e iniciarlo.

En mi caso, utilizaré el <role postgres> para realizar las tareas.

Si es la primera vez que oyes hablar de roles y privilegios, te animo a que leas RBAC, Roles y Privilegios de Solaris antes de continuar.

Comprobamos que nuestro servicio de PostgreSQL está activo, hacemos un backup y lo desactivamos.
postgres@openzooey:~$ pfexec svcs postgresql_9:default_64bit
STATE          STIME    FMRI
online         11:26:07 svc:/application/database/postgresql_9:default_64bit
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/pg_dump -C -Z9 -f /export/home/postgres/backups-pre-upgrade.dump.gz mydatabase
postgres@openzooey:~$ gzip -dc /export/home/postgres/backups-pre-upgrade.dump.gz |head -3
--
-- PostgreSQL database dump
--
postgres@openzooey:~$ pfexec /usr/sbin/svcadm disable postgresql_9:default_64bit
postgres@openzooey:~$ pfexec svcs postgresql_9:default_64bit
STATE          STIME    FMRI
disabled       11:33:19 svc:/application/database/postgresql_9:default_64bit
Ahora ya estamos en disposición de realizar nuestro <make install> y proceder a la instalación de PostgreSQL en nuestro sistema o, si has optado por actualizar desde el binario, a descomprimirlo.

Lanzar &lt:make install>
itily@openzooey:~/postgres/postgresql-9.0.2$ pfexec make install
O descargarlo y descromprimirlo -hay que hacerlo como <root> o con un usuario con permisos suficientes-
root@openzooey:/# cd /
root@openzooey:/# wget http://blog.sfchildren.com/blogger/postgres/9.0.2/openindiana/postgresql-9.0.2-x86-64bits.tar.gz
root@openzooey:/# gzip -dc postgresql-9.0.2-x86-64bits.tar.gz | tar xpf -
root@openzooey:/# chown -R postgres:postgres /u01
root@openzooey:/# rm postgresql-9.0.2-x86-64bits.tar.gz

Activamos el Servicio
Vamos a utilizar SMF para gestionar nuestro servicio, por lo tanto, sólo nos queda hacer un <enable> del mismo
root@openzooey:/# svcadm enable postgresql_9:default_64bit
root@openzooey:/# svcs postgresql_9:default_64bit
STATE          STIME    FMRI
online         13:05:36 svc:/application/database/postgresql_9:default_64bit
Comprobamos nuestro PostgreSQL
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/psql -U postgres
psql (9.0.2)
Type "help" for help.

postgres=# select count(1) from pg_index;
 count
-------
   101
(1 row)

postgres=# \q

Conclusiones
Bueno, como hemos visto, la actualización de PostgreSQL no supone mayores problemas, siempre que estemos en el mismo nivel de versión, es decir, 9.x. Hemos dejado en el tintero las diferentes formas de actualización desde otras versiones, ya que eso requiere todo un post para ello.

Recordar que las buenas práticas de SysAdmin nos obligan a realizar copias de seguridad, y, que si por agún momento se nos pasa, entonces aparecerá nuestro querido amigo "Murphy" y nos dará algún susto.


Referencias

No hay comentarios:

Publicar un comentario en la entrada