LEVANTAR EL SERVICIO POSTGRES EN LINUX
--------------------------------------
Cristián Fabres A.
Lo que se pretende con esta entrega es una noción básica de lo
que es trabajar con Postgres en Linux.
Específicamente se trabaja con una la versión de postgres 7.2.1
en un Red Hat 7.3
(psql -V)
La versión del Kernel es la 2.4.18-0.13.
(uname r)
Para los siguientes ejercicios se supone que ya se instalo Postgres
correctamente (para lo cual hay N manuales).
Lo primero que hay que hacer es subir el servicio de Postgres para
que podamos conectarnos a la base de datos (BdD).
Hay dos formas de levantar el servicio, una es levantarlo directamente
pero solo queda el servicio arriba hasta que apaguemos la maquina.
Para esto hacemos lo siguiente:
[root@localhost etc]# cd /etc/rc.d/init.d/postgresql Start
En el directorio anterior lo que se hace es correr un script en el
cual el primer parámetro es el script a ejecutar y el segundo parámetro
es lo que hace el script, si la opción es Start, inicia el servicio,
si la opción es stop se detiene el servicio, la opción restart detiene
e inicia el servicio.
La primera vez que ejecutemos este script se va a demorar un poco más
de lo normal, porque va a verificar que exista la BdD y va a crear una
serie de archivos en el siguiente path:
/var/lib/pgsql.
Estos archivos son creados siempre que no existan, si el servicio ya
fue levantado con anterioridad, los archivos ya fueron creados y el
servicio se levanta más rápido.
De hecho es una buena opción para limpiar todas las bases de datos
(por si hubiera habido algun problema), borrar todos los archivos de
la ruta /var/lib/pgsql para luego levantar el servicio y se crean los
archivos de nuevo con las opciones originales.
Ojo que si tomamos esta opción se van a borrar todas las instancias
de Bases de Datos que existen hasta ese momento.
La otra forma de levantar el servicio de postgres es que siempre
que prendamos nuestro linux, se levante como un servicio mas, lo que
resulta muy comodo, así se configura el script una vez y siempre queda
levantado como un servicio mas.
Para esto tenemos que hacer dos pasos, ver en que nivel se levanta
nuestro linux y poner el script en el directorio correspondiente
(o mejor dicho el link en el directorio correspondiente).
Para saber en que modo estamos arrancando nuestro linux tenemos que
editar el archivo /etc/inittab, y hay que ver un parámetro en una fila
en particular.
Un ejemplo de este archivo es el siguiente:
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if
you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:ini tdefault:
Las filas que comienzan con un #, casi siempre son comentarios
(por no decir siempre), por lo tanto si las modificamos no hacen
nada o ningún cambio contra este script.
La fila que no esta comentada (id:3:ini tdefault:) en el segundo
parámetro tiene un numero 3 y significa que el sistema Linux
arranca en este modo.
Los comentarios que están arriba nos indican todos los modos en los
cuales se puede levantar el sistema operativo,
0: es para apagar la maquina, 1 es el modo single user, y así
sucesivamente hasta el modo 6.
Por lo general el parámetro esta en 3 o en 5.
Para cada modo existe un directorio en particular en el cual dice
el orden y la cantidad de scripts que se tienen que subir.
Por ejemplo si estamos en el modo de arranque 3, el directorio que
contiene todos los script a subir es /etc/rc.d/rc3.d.
Si hacemos un cd /etc/rc.d/rc3.d y luego un "ls" para ver el
contenido nos vamos a dar cuenta que, básicamente, hay dos tipos de
archivos, los que comienzan con una S y los que comienzan con una
K, seguidos por dos caracteres que son unos números y luego el
nombre del script a ejecutar.
Los que comiencen con una S son los servicios que se van a subir para
el modo en cuestión. Por lo tanto si hacemos un "ls" en el directorio
/etc/rcd./rc3.d y nos da como resultado:
K12mysqld
K15httpd
.
.
S05kudzu
S06reconfig
S08ip6tables
.
La lista anterior nos dice que los servicios kudzu, reconfig y el
ip6tables se suben cuando el Linux se inicia en el servicio 3, ya
que el listado es del directorio /etc/rc.d/rc3.d .
El número sirve para indicar el orden de subida de los servicios,
o sea, el servicio kudzu sube primero, después el servicio reconfig
y luego el servicio ip6tables. Lo lógico seria que ahora busquemos
algún script que contenga o se llame *postgresql* para ver si existe
como S o como K.
Si el archivo que encontramos existe como K97postgresql lo que
tendremos que hacer es cambiarlo por S97postgresql para que se
cargue automáticamente cada vez que se inicie el linux
(se hace con el comando "mv").
El número no tiene porque ser 97, podría ser cualquier otro, pero
uno razonablemente alto para que otros servicios más básicos se
carguen, por lo tanto lo mejor es cargar el script con un número
alto.
La mejor opción es que encontremos el archivo como "S97postgresql",
en este caso no hacemos nada, porque el servicio ya fue cargado
para este modo (3).
Lo más probable es que si tratamos de buscar este script que tenga
algo con postgresql (find /etc/rc.d/rc3.d name *postgres*)
pero no lo vamos a encontrar ni como S o K, pero podemos crear
el script o mejor dicho, podemos crear el enlace donde se encuentra
el script.
Para esto, si estamos parados en el directorio /etc/rc.d/rc3.d/
podemos escribir lo siguiente:
ln -s ./../init.d/postgresql S97postgresql
Lo que hace el comando anterior es crear un link al archivo
/etc/rc.d/init.d/postgresql
y crea un archivo al directorio /etc/rc.d/rc3.d/ con el nombre
de archivo S97postgresql.
Por lo tanto ya tenemos nuestro script en el modo 3.
Cuando parta nuestro linux no tendremos que levantar el servicio;
porque como ya creamos el archivo con el link anterior se levantara
automáticamente.
Si queremos reiniciar nuestro servicio, parar o comenzar podremos
hacer lo siguiente:
/etc/rc.d/rc3.d/S97postgresql start (para hacer partir el servicio)
/etc/rc.d/rc3.d/S97postgresql stop (para detener el servicio)
/etc/rc.d/rc3.d/S97postgresql restart (para detener y hacer partir
el servicio)
Es básicamente lo mismo que hacíamos antes con el script original:
/etc/rc.d/init.d/S97postgresql start (para hacer partir el servicio)
/etc/rc.d/init.d/S97postgresql stop (para detener el servicio)
/etc/rc.d/init.d/S97postgresql restart (para detener y hacer partir
el servicio)
En estricto rigor el servicio esta arriba, y si digitamos "psql",
el programa va a responder, el punto esta en que postgres no ha
levantado ningún puerto o socket para hacer transmisiones vía TCP/IP.
La pregunta es ¿y bueno cual es el problema?:
el problema reside en que si queremos conectarnos desde PHP con Apache
por ejemplo, no vamos a poder porque en las funciones de conexión de
PHP pide el numero IP de la maquina en la cual hacemos la conexión al
servidor donde aloja Postgres.
Para resolver este tema hay que editar el script donde hicimos
anteriormente el link, o sea podemos editar el archivo que se
encuentra en:
/etc/rc.d/rc3.d/S97postgresql
o en
/etc/rc.d/INIT.d/postgresql
(cualquier camino que tomemos para editar el archivo da lo mismo
porque las dos rutas conducen al mismo archivo)
Por ultimo hay que editar una fila en particular la cual es:
su l postgres s /bin/sh c /usr/bin/pg_ctl D $PGDATA p /usr/bin/postmaster start > /dev/null 2>&1 < /dev/null
Y cambiarla por:
su l postgres s /bin/sh c /usr/bin/pg_ctl o -i D $PGDATA p /usr/bin/postmaster start > /dev/null 2>&1 < /dev/null
Se agregaron las opciones -o -i.
Con este cambio hay que reiniciar el servicio nuevamente para
que tenga efectos en Postgres:
/etc/rc.d/init.d/S97postgresql restart
para probar si el socket esta arriba escribimos el comando
netstat nat
el cual da como resultado:
Proto Recv-Q Send-Q Local Addres Foreign Address state
..
Tcp 0 0 0.0.0.0:5432 0.0.0.0:* listen
..
El servicio esta arriba y atiende en el Puerto 5432.
Y listo, nuestro servicio de postgres ya esta arriba y funcionando.
En las siguientes entregas comenzaremos con comandos SQL para crear
tablas, Ingresar, Eliminar y Modificar datos.