mi d.Espacio

domingo, marzo 18, 2007

Instalando postgresql en ubuntu

Bueno, estoy que no paro.
Ahora estoy haciendo un curso online, que espero me de tiempo a hacer. El caso es que:
  1. El curso está orientado a windows y a iexplorer. No funcionan algunas características en firefox. Y no se pueden hacer los test y los exámenes
  2. Utiliza una base de datos un tanto desconocida para mi: ibaccess. No pude hacer funcionar el cliente para linux
  3. Como es un curso especifico y en el que no tienen que entrar la SGBD para nada y solo se usa ese como "ejemplo" pués me voy a instalar postgres
  4. Necesitaba un driver jdbc que según el tutorial era fácil de encontrar pero que no me molesté en buscar porque no logré que funcionara el ibaccess y que por el contrario ya había manejado para postgresql


Así que voy a partir de que tenemos instalados con el synaptic o haciendo apt-get install desde la linea de comandos el postgresql-8.1 y el postgresql-client-8.1 (ya luego podremos instalar el pgadmin3 que es más gonito)

He seguido una guía que había en la wiki de ubuntu. Aunque aquí solo voy a comentar los pasos sin entrar en mucho detalle para tener una versión más ligera y que me sea más útil para la próxima vez que quiera trabajar con postgresql en ubuntu (que siempre me pasa lo mismo y luego tengo que buscarlo en internet)

Preconfiguración
Establecemos la nueva contraseña al usuario de sistema creado por postgresql:
$ sudo passwd postgres


Verificamos la instalación y accedemos a la shell del servidor de base de datos como usuario postgres:
$ sudo su postgres -c "psql template1"


Cambiamos la contraseña al usuario predeterminado (postgres) del servidor de base de datos:
template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

Yo, como siempre, pués le puse postgres por simplicidad.

Configuración - Permitir conexiones remotas
Esto siempre nos pasaba en el trabajo. La primera vez que trabajamos con postgresql queriamos tener una base de datos para todos los desarrolladores y por defecto la instalación de postgres no permite conexiones remotas. Tuvimos que cambiar el postgresql.conf y pg_hba.conf del servidor.

En mi caso, no lo voy a hacer porque solo me voy a conectar yo de manera local para las pruebas pero las pongo aquí por si me hicieran falta en otro momento.

En ubuntu, como bien dice la guía, editamos el archivo de configuracion:
$sudo gedit /etc/postgresql/8.1/main/postgresql.conf


Buscamos la línea (comentada)
#listen_addreses = 'localhost'

Y la substituimos por la siguiente línea:
listen_addreses = '*'

Posteriormente buscamos la línea y le quitamos la marca de comentario:
#password_encryption=true

quedandonos como:
password_encryption=true

para requerir password encriptadas al conectar con el cliente.

En el pgadmin3 se puede indicar al crear una conexión en el campo SSL si el servidor requiere, prefiere, permite o no permite conexiones seguras. Aunque yo por defecto lo dejo en blanco y pgadmin3 utiliza la mejor opción al conectarse al servidor.

Ahora guardamos los cambios y reiniciamos el demonio para que los cambios surtan efecto:
$ sudo /etc/init.d/postgresql-8.1 restart


Configurar la lista de acceso
Como dice la guía que miré, la configuración de la lista de acceso permite decirle a PostgreSQL qué método de autenticación usar y establecer relaciones de confianza para ciertas máquinas y redes.
Yo por ejemplo en el trabajo le dabamos confianza a toda la red local sin requerir password.

Primero editamos el pg_hba.conf
$ sudo gedit /etc/postgresql/8.1/main pg_hba.conf


Por ejemplo:
  • Si necesitamos que cualquier usuario se conecte por medio de una dirección IP especiífico, agregamos

host all all 192.168.1.1 255.255.255.0 md5

Así permitimos el acceso a todos los hosts de la red 192.168.1.0.

También me encontré otra manera de poner la máscara de red y es poniendo por ejemplo:
host all all 192.168.1.1/24 md5

Esta y la anterior son equivalentes.

  • Si necesitamos que cualquier usuario se conecte por medio de una ip determinada sin importar el password (confiaza en dicha IP), la línea es:

host all all 192.168.1.18 255.255.255.255 trust

Aquí solo confiamos en una máquina pero podríamos haber confiado en toda una red si la máscara hubiese sido otra. Así lo haciamos en el curro para quitarnos de complicaciones, ya que nuestros equipos obtenian ips por dchp.

  • Si lo que necesitamos es que cualquier usuario se conecte por medio de cualquier ip, pero verificando el password agregamos

host all all 0.0.0.0 0.0.0.0 md5


Para especificar que determinado usuario tiene acceso solo a determinada base de datos desde determinada red usamos:
host miBaseDeDatos miUsuario 192.168.1.1 255.255.255.0 md5


Siempre que queramos que tengan enfecto los cambios hay que reinciar el demonio posgres
$ sudo /etc/init.d/postgresql-8.1 restart

Algo de Administración
Ya de paso pondré algunos comandos que venían en la guía para completar y que a mi también me fueron de utilidad alguna vez que otra.

Para crear un usuario, usamos el comando createuser.
$ createuser -A -d -P -h host -U usuario nuevo_usuario
Enter password for user "nuevo_usuario":
Enter it again:


Eliminar usuario con dropuser
$ dropuser -h host -U usuario usuario_borrar


Volcado (dump) para backup de seguridad:
$ pg_dump -h host -U usuario nombre_bd > nombre_bd.sql


Para hacer una copia de seguridad de todas las bases de datos PostgreSQL de un servidor, usa este script:
#!/bin/bash

## BEGIN CONFIG ##
HOST=localhost
BACKUP_DIR=tmp
## END CONFIG ##

if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi

POSTGRE_DBS=$(psql -h $HOST -U postgres -l | awk ' (NR > 2) (/[a-zA-Z0-9]+[ ]+[|]/) ( $0 !~ /template[0-9]/) { print $1 }');

for DB in $POSTGRE_DBS ; do
echo "* Backuping PostgreSQL data from $DB@$HOST..."
pg_dump -h $HOST -U postgres $DB > $BACKUP_DIR/pg_$DB.sql
done


En fin, y creo que con esto ya tengo suficiente para la próxima vez :)

powered by performancing firefox