Postgres es una gran base de datos, y como sucede con Oracle, un poco peculiar. Sin embargo, la instalación no es muy complicada asi que vamos a ver cómo podemos Instalar Postgres sobre Solaris 10
UPDATED: Si quieres puedes ir a Cómo Instalar PostgreSQL 9.x en OpenIndiana, un post más actualizado sobre el proceso de instalación en el nuevo sistema operativo sucesor de OpenSolaris
Nota Sobre Solaris 10 y usuario Postgres
En Solaris 10 ya existe una instalación de Postgres en el sistema, y por lo tanto el usuario postgres está creado. Éste utiliza pfexec (el sudo de Solaris) y aunque es muy útil, en nuestro caso puede complicar un poco la instalación, así que he decidido eliminarlo y crearlo desde cero, pero es por un tema de simplificación del post
Creación del Usuario postgres
Como hemos comentado, en Solaris 10, existe un usuario y grupo llamado postgres así que primero eliminaremos el usuario y lo crearemos de forma normal
# userdel postgresCreación del project
# useradd -g postgres -s /bin/bash -d /export/home/postgres -m postgres
# passwd postgres
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: la contraseña se ha cambiado para postgres satisfactoriamente
Como en Oracle, es necesario definir las dimensiones de max-shm-memory y max-sem-ids, max-shm-ids en un project (Los valores de max-shm-memory puedes ajustarlos a tu necesidad)
# projadd -c "Postgres Database" -G postgres group.postgresPreparación del Profile
# projmod -sK "process.max-sem-nsems=(priv,256,deny)" group.postgres
# projmod -sK "project.max-sem-ids=(priv,100,deny)" group.postgres
# projmod -sK "project.max-shm-ids=(priv,100,deny)" group.postgres
# projmod -sK "project.max-shm-memory=(priv,8G,deny)" group.postgres
Una vez creado el nuevo usuario, vamos a crear un profile (al estilo de Oracle) para que nos precarge las diferentes variables de entorno. En postgres la variable PGDATA
es la que indica dónde se encuentran los archivos de datos (datafiles) en nuestro caso en /var/postgres/8.4/data y aunque no es necesario, voy a utilizar POSTGRES_HOME para la ruta de instalación. En nuestro caso, vamos a instalar Postgres en 64bits en la ruta /u01/app/postgres/8.4/db
Ahora crearemos la estructura de directorios para nuestra instalación de Postgres, es decir, /u01/app/postgres/8.4/db para el motor y /var/postgres/8.4/data para los datos (Estas son mis configuraciones, puedes cambiarlas si no te gustan, pero recuerda que en el profile utilizo $LOGNAME para las instalaciones, en mi caso postgres)
# mkdir -p /u01/app/postgres/8.4/dbY Creamos en archivo .profile del usuario postgres
# chown -R postgres:postgres /u01/app/postgres
# chmod 750 /u01/app/postgres
# mkdir -p /var/postgres/8.4/data
# chown -R postgres:postgres /var/postgres
# chmod 750 /var/postgres
# mkdir -p /var/log/postgres
# chown -R postgres:postgres /var/log/postgres
# su - postgresInstalación de Postgres
$ vi $HOME/.profile
#!/bin/bash
#####################################
## POSTGRES PROFILE LIKE ORACLE ONE
#####################################
# Postgres Type(32bits/64bits)
POSTGRES_ARCH=64
POSTGRES_VERSION=8.4
POSTGRES_HOME=/u01/app/${LOGNAME}/${POSTGRES_VERSION}/db
export POSTGRES_HOME POSTGRES_VERSION
# Path
if [ $POSTGRES_ARCH -eq 32 ]; then
PATH=${POSTGRES_HOME}/bin:$PATH:/usr/sfw/bin:/usr/local/bin
else
PATH=${POSTGRES_HOME}/bin/64:${POSTGRES_HOME}/bin:$PATH:/usr/sfw/bin:/usr/local/bin
fi
export PATH
# PreLoad LD
# PGDATA
PGDATA_32=/var/postgres/${POSTGRES_VERSION}/data
PGDATA_64=/var/postgres/${POSTGRES_VERSION}/data
if [ $POSTGRES_ARCH -eq 32 ]; then
PGDATA=${PGDATA_32}
else
PGDATA=${PGDATA_64}
fi
export PGDATA
# Simple Log
banner postgres
echo ""
echo ""
echo "POSTGRES VERSION: ${POSTGRES_VERSION}"
echo "POSTGRES HOME : ${POSTGRES_HOME}"
echo "PGDATA : ${PGDATA}"
echo "PGARCH : ${POSTGRES_ARCH}"
echo ""
MAIL=/usr/mail/${LOGNAME:?}
:wq
Podemos obtener los binarios compilados para Solaris en la página principal de Postgres http://www.postgresql.org/download/, yo voy a descargarlos para Solaris SPARC en 32 y 64bits.
# su - postgresDescomprimimos los bz2 utilizando GNU tar (gtar) que se encuentra en /usr/sfw/bin, si no tenemos GNU tar, siempre podemos utilizar bunzip2 y tar
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
POSTGRES VERSION: 8.4
POSTGRES HOME : /u01/app/postgres/8.4/db
PGDATA : /var/postgres/8.4/data
PGARCH : 64
$ mkdir postgres-bin
$ cd postgres-bin/
$ wget http://wwwmaster.postgresql.org/redir/376/h/binary/v8.4.1/solaris/solaris10/sparc/postgresql-8.4.1-S10.sparc-32.tar.bz2
$ wget http://wwwmaster.postgresql.org/redir/376/h/binary/v8.4.1/solaris/solaris10/sparc/postgresql-8.4.1-S10.sparc-64.tar.bz2
$ ls -ltr
total 35184
-rw-r--r-- 1 postgres postgres 8842332 sep 8 13:58 postgresql-8.4.1-S10.sparc-32.tar.bz2
-rw-r--r-- 1 postgres postgres 9149287 sep 8 13:58 postgresql-8.4.1-S10.sparc-64.tar.bz2
$ gtar jxpf postgresql-8.4.1-S10.sparc-32.tar.bz2Movemos los binarios de postgres a nuestro POSTGRES_HOME
$ gtar jxpf postgresql-8.4.1-S10.sparc-64.tar.bz2
$ pwdRecargamos nuestro profile y ya tenemos nuestra instalación concluida ... al menos el primer paso.
/export/home/postgres/postgres-bin/postgres/8.4-community
$ mv * /u01/app/postgres/8.4/db/
$ . ~/.profileInicio de PGDATA
POSTGRES VERSION: 8.4
POSTGRES HOME : /u01/app/postgres/8.4/db
PGDATA : /var/postgres/8.4/data
PGARCH : 64
$ which psql
/u01/app/postgres/8.4/db/bin/64/psql
Una vez instalado nuestro POSTGRES_HOME, debemos iniciar nuestro PGDATA para ello, vamos a utilizar initdb ubicado en /u01/app/postgres/8.4/db/bin/64/initdb
Este binario nos va a crear toda las estructura necesaria para postgres y los archivos de configuración. Debemos tener en cuenta que esta estructura ha de iniciarse en un encoding específico, aunque mi recomendación es que sea siempre UTF8, por ello, debemos tener las variables LC_xxxx en formato compatible con UTF8 y como yo tengo mi instalación de Solaris en es_ES.ISO8859-15 tengo que hacer un cambio a UTF8@euro, vamos a ver un ejemplo de cómo iniciar PGDATA en UTF8
Cambiamos nuestras variables de entorno para hacerlo compatible con UTF8
$ export LC_COLLATE=es_ES.UTF-8@euroLlamamos a initdb con encoding utf8 (-E utf8) configuración regional por defecto (--locale es.UTF8) super-usuario postgres (-U postgres) y que me pida la contraseña para el superusuario (-W)
$ export LC_CTYPE=es_ES.UTF-8@euro
$ export LC_MESSAGES=es_ES.UTF-8@euro
$ export LC_MONETARY=es_ES.UTF-8@euro
$ export LC_NUMERIC=es_ES.UTF-8@euro
$ export LC_TIME=es_ES.UTF-8@euro
$ initdb -E utf8 --locale=es.UTF-8 -U postgres -WSi todo ha ido correctamente, podemos comprobar que ha creado una estructura parecida a la siguiente:
$ ls -l $PGDATAConfiguración de Postgres
total 62
drwx------ 7 postgres postgres 512 jul 2 11:23 base
drwx------ 2 postgres postgres 1024 jul 22 12:06 global
drwx------ 2 postgres postgres 512 jul 6 18:50 pg_clog
-rw------- 1 postgres postgres 541 jul 2 09:32 pg_hba.conf
-rw------- 1 postgres postgres 1631 jul 2 09:32 pg_ident.conf
drwx------ 4 postgres postgres 512 jul 2 09:32 pg_multixact
drwx------ 2 postgres postgres 512 jul 22 12:06 pg_stat_tmp
drwx------ 2 postgres postgres 512 jul 6 18:50 pg_subtrans
drwx------ 2 postgres postgres 512 jul 2 09:32 pg_tblspc
drwx------ 2 postgres postgres 512 jul 2 09:32 pg_twophase
-rw------- 1 postgres postgres 4 jul 2 09:32 PG_VERSION
drwx------ 3 postgres postgres 1024 jul 11 19:33 pg_xlog
-rw------- 1 postgres postgres 16701 jul 6 18:28 postgresql.conf
-rw------- 1 postgres postgres 41 jul 22 09:15 postmaster.opts
Postgres tiene dos archivos de configuración principales, postgresql.conf y pg_hba.conf.
pg_hba.conf, En este archivo definiremos qué hosts tienen acceso a nuestro postgres y cuál será el método de acceso y autenticación, por ejemplo, para permitir el acceso del host 192.168.1.201 a todas las bases de datos incluiremos la siguiente entrada:
###################################postgresql.conf, En este archivo se encuentra prácticamente la totalidad de parámetros de configuración de nuestro servidor, en esta primera parte vamos a modificar los siguientes parámetros, listen_address y vamos a poner
## CONNECT TO ALL DATABASE
###################################
host all all 192.168.1.201/32 md5
listen_addresses = '*'De esta forma, postgres escuchará en todos los interfaces, permitiendo conectarnos remotamente (si no queremos que haga bind en todos, podemos poner la IP en la que queremos que escuche)
Iniciar/Detener Postgres
Para iniciar/detener/recargar utilizaremos el comando pg_ctl con las opciones start, stop y reload en función de lo que queramos hacer, por ejemplo:
Para iniciar nuestro postgres haremos lo siguiente, -l hace que el log se escriba en /var/log/postgres
$ pg_ctl start -l /var/log/postgres/postgres.logPara ver si nuestro postgres está vivo utilizaremos el comando pg_ctl con la opción status
servidor iniciándose
$ pg_ctl statusPara detener nuestro servidor, utilizaremos la opción stop, con el argumento -m fast para un apagado correcto
pg_ctl: el servidor está en ejecución (PID: 19517)
/u01/app/postgres/8.4/db/bin/64/postgres
$ pg_ctl stop -m fastLas diferentes opciones del apagado son:
esperando que el servidor se detenga..... listo
servidor detenido
- smart, Salir después que todos los clientes se hayan desconectado
- fast, Salir directamente, con apagado apropiado
- immediate, Salir sin apagado completo; se ejecutará recuperación en el próximo inicio
Haciendo un poco de analogía de Oracle quedaría algo así:
- Posgres: smart, Oracle: normal
- Postgres: fast, Oracle: immediate
- Postgres: immediate, Oracle: abort
$ pg_ctl reloadConectarnos al Servidor
Ya tenemos nuestro servidor funcionando y vamos a conectarnos a él utilizando psql
$ psql -U postgresSistema de Backup
Contraseña para usuario postgres:
psql (8.4.1)
Digite «help» para obtener ayuda.
postgres=# help
Está usando psql, la interfaz de línea de órdenes de PostgreSQL.
Digite: \copyright para ver los términos de distribución
\h para ayuda de órdenes SQL
\? para ayuda de órdenes psql
\g o punto y coma («;») para ejecutar la consulta
\q para salir
postgres=# \q
Para nuestro sistema de backup, postgres nos proporciona una utilidad llamada pg_dump que nos permite hacer un volcado de nuestra base de datos, por ejemplo, si queremos exportar la base de datos postgres al archivo postgres-FULL.dump
$ pg_dump -U postgres posgres > /u07/backups/postgres/8.4/postgres-FULL.dump
Contraseña:
Hemos visto cómo la instalación de postgres sobre Solaris no tiene mayor problema, y cómo utilizando los project podemos optimizar al máximo el rendimiento de nuestro servidor.
Aunque no hemos entrado mucho en las opciones de postgres y sus comandos, es debido a que en esta primera parte el objetivo era la instalación y su inicio/parada, en las próximas entregas veremos cómo hacer de postgres una gran base de datos de producción.
Además veremos cómo hacer que postgres vuele en nuestra máquina y cómo proteger postgres, hasta entonces ... nos toca espera.
Referencias
No hay comentarios:
Publicar un comentario