Inicio > Tecnología, Ubuntu > Ejecutar multiples instancias de PostgreSql en Ubuntu 10.04

Ejecutar multiples instancias de PostgreSql en Ubuntu 10.04

Recientemente por motivos de trabajo me he visto obligado a ejecutar en la misma máquina y bajo ubuntu 10.04 dos versiones de PostgreSql. En concreto para mi nuevo proyecto necesitaba ejecutar la versión 9.0 de este RDBMS y la versión 8.4 que ya tenía instalada y funcionando para dar soporte a los proyectos más antiguos.

El proceso es el siguiente:

1.- Instalar la nueva versón de la base de datos a través de los repositorios:

Este primer paquete nos facilitará la tarea de añadir nuevos repositorios.

#aptitude install python-software-properties

A continuación añadimos el nuevo repositorio para obtener la versión 9.0:

#add-apt-repository ppa:pitti/postgresql

Actualizamos el gestor de paquetes:

#aptitude update

Instalamos la nueva versión de la Base de datos:

#aptitude install postgresql-9.0 libpq-dev pgadmin3

2.- Configurar la ejecución simultanea:

Si llegados a este punto intentamos acceder a la nueva instancia del RBDMS nos encontraremos con que el típico comando:

$sudo -u postgres plsl postgres

nos devuelve un error.
Por otra parte, el instalador nos configura la nueva instancia del RDBMS en el puerto 5433, con lo que no tendríamos problemas por ese lado.
El problema esta en la versión de las herramientas de configuración que se usan, ya que al estar configurada por defecto la versión 8.4, el sistema usará por defecto esta versión. En particular el ejecutable de psql es un script de perl que en teoría redirige a la versión correcta de la herramienta en función del contenido de los ficheros :

  • ~/.postgresqlrc : Donde se define que cluster se usará, que versión, que usuario, que base de datos etc.. a nivel del usuario logueado.
  • /etc/postgresql-common/user_clusters : Donde se define que cluster se usará, que versión, que usuario, que base de datos etc.. a nivel del sistema.

El script perl buscará primero en ~/.postgresqlrc y dentro de este fichero usará los datos definidos en la primera línea que encuentre. Si este fichero no existiese o no tuviese ninguna línea, el script perl usará los datos definidos en la primera línea del fichero /etc/postgresql-common/user_clusters

Si finalmente este fichero no existiese o no existiera ninguna línea en él, el script perl nos dirigirá al cluster que este escuchando en el puerto 5432 y a la base de datos cuyo nombre coincida con el nombre del usuario logueado.

Con esto en mente, y en mi caso particular decidí definir el fichero /etc/postgresql-common/user_clusters dejándolo de la siguiente manera:

# This file maps users against the database clusters to which they
# will connect by default.  Any user may create ~/.postgresqlrc which
# will supersede the defaults stored here.  If a database is
# specified, that will be the one connected to by client tools if none
# is specified on the command line.  If the database specified here is
# "*", this is interpreted as the database whose name is the same as
# the user's login.  (Setting the database to "*" will provide the
# current default upstream behaviour for command line tools.)
#
# When pg_wrapper scans this file, the first matching line is used.
# It is a good idea to provide a default explicitly, with a final line
# where both user and group are set to "*".  If there is no default,
# the implicit default is to connect to the cluster whose postmaster
# is listening on port 5432 and to the database matching the user's
# login name.
#
# In the context of this file, user and group refer to the Unix login
# or group, not to PostgreSQL users and groups.
#
# Please see user_clusters(5) and postgresqlrc(5) for more information.
#
# USER	GROUP	VERSION	CLUSTER	DATABASE
*     *    9.0     main      *
*     *    8.4     main      *

3.- Conectar a los diferentes clústeres

Finalmente ya podemos conectarnos a los diferentes clústeres.
Para conectar con el clúster de la versión 8.4 escribiremos:

#psql template1 postgres -h localhost -o 5432 --cluster "8.4/main"

y para hacerlo con la versión 9.0 usaremos algo similar a :

#psql template1 postgres -h localhost -o 5433 --cluster "9.0/main"

4.- Anexo: Contenido del fichero ~/.postgresqlrc


8.2 192.168.0.3:55514 alvherre
8.1 192.168.0.3:55513 alvherre

Anuncios
Categorías:Tecnología, Ubuntu Etiquetas: ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: