Toca cambiar el servidor donde tengo el postgresql y como se trata de unas base de datos pequeñitas y tal no hay ni replicación ni nada complicado. He aquí como lo he hecho en ubuntu server aunque me he cargado las configuraciones de la distribución y sigo el manual de la web de postgres
Antes que nada: http://www.postgresql.org/docs/ :)
Primero "arreglo" (o estropeo) el environment del usuario postgres
Al reiniciar el servidor, veo que no me arranca, joder. Al intentar arrancar manualmente me dice que no puede crear el pidfile en /var/run/postgresql/. Veo que el directorio no esta creado, pos nada, se crea y se le hace un chown postgres.postgres al directorio y a funcionaaaaaaaarrr pero al reiniciar estamos igual (por algun motivo el /var/run/postgresql no se crea. Solución:
Antes que nada: http://www.postgresql.org/docs/ :)
Primero "arreglo" (o estropeo) el environment del usuario postgres
- apt-get install postgresql
- por lo que veo te instala el postgres tal que los datos estan en /var/lib/postgresql/version/main y los programas en /usr/lib/postgresql/blabla/bin y las configuraciones en /etc/postgresql. De hecho esto esta muy bien, pero yo me aclaro mas siguiendo el manualillo por lo que:
- mkdir -p /home/postgres/data ; chown -R postgres.postgres /home/postgres ;; chmod -R 0700 /home/postgres
- edito /etc/passwd para que la home del usuario postgres sea /home/postgres
- copio el /etc/skel a /home/postgres, chown again
- edito el .profile de /home/postgres para incluir en el path del usuario los programas de postgres que están (para mi versión) /usr/lib/postgresql/9.1/bin
- su - postgres y compruebo que tenga los programas en el path y los pueda ejecutar
- initdb -D /home/postgres/data
- edito /home/postgres/data/postgresql.conf para modificar la directiva listen_address = '*' y aceptar conexiones tcp
- Entro a postgres via psql
- Modifico el password del super user (postgres) para conocerlo: ALTER ROLE postgres encrypt password 'password' y salgo con \q
- Creo el usuario de una futura base de datos: createuser -E -l -P usuario de manera que no sea ni superusuario ni pueda crear roles ni añadir mas bases de datos
- Creo una base de datos para ese usuario: createdb db1 -O usuario
- Ahora solo queda recuperar un dump del servidor viejo con psql db1 < db1.dump
- Repetimos los pasos 6 y 7 para todas las bases de datos (del usuario del punto 5, claro)
- No se si es necesario pero al final hago un vacuumdb -a -e -f -v
Ahora ya tenemos el postgres con las bases de datos y usuarios creados y restaurados. Nos encargamos de la autentificacion de los clientes. Para ello hay que modificar el /home/postgres/data/pg_hba.conf
Añado o modifico tal que queda así:
local all all md5
# IPv4 local connections:
#host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 md5
host db1 usuario 10.0.0.0/16 md5
host postgres all 10.0.0.0/24 md5
de esta manera tengo:
- Incluso las conexiones desde consola pide password
- Acepta conexiones a db1 para el usuario usuario de la red 10.0.0.0/16
- Pongo que la base de datos postgres sea accesible para el programa pgAdmin.
Pos ala, pongo los programas para que accedan a este servidor y funcionan sin problems!
Ahora solo queda modificar el /etc/init.d/postgres para controlar el inicio/detención del servidor:
Ahora solo queda modificar el /etc/init.d/postgres para controlar el inicio/detención del servidor:
- cp /etc/init.d/postgresql /etc/init.d/postgresql.orig
- start) su - -c 'pg_ctl start -D /home/postgres/data' postgres
- stop) su - -c 'pg_ctl stop -m f -D /home/postgres/data' postgres
ale. (el -m f es para desconectar los clientes activos, sino, el servidor no para hasta que todos los clientes se han desconectado).
Al reiniciar el servidor, veo que no me arranca, joder. Al intentar arrancar manualmente me dice que no puede crear el pidfile en /var/run/postgresql/. Veo que el directorio no esta creado, pos nada, se crea y se le hace un chown postgres.postgres al directorio y a funcionaaaaaaaarrr pero al reiniciar estamos igual (por algun motivo el /var/run/postgresql no se crea. Solución:
- en /home/postgres/data/postgresql.conf editar las directivas external_pid_file y unix_socket_directory para que apunten a /home/postgres/data
- O, podriamos editar el /etc/init.d/postgresql para que el start cree el directorio /var/run/postgresql y le haga el chown postgres.postgres
RUNDIR="/var/run/postgresql"ahora si....
start)
if [ ! -e $RUNDIR ]
then
mkdir $RUNDIR
chown postgres.postgres $RUNDIR
fi
su - -c 'pg_ctl start -D /home/postgres/data' postgres
;;
Comentarios