miércoles, 17 de agosto de 2011

Instalar PostgreSQL en CentOS 6

PostgreSQL es un sistema de gestión de bases de datos relacional orientada a objetos, es un proyecto de código abierto dirigido por una comunidad de desarrolladores, publicada bajo la licencia BSD. Aquí es donde PostgreSQL saca amplia ventaja frente a MySQL, que es patrocinado por una empresa privada, que posee el copyright de la mayor parte del código.

Es multiplataforma, PostgreSQL corre en prácticamente cualquier sistema operativo y arquitectura actual.

Pero nosotros lo instalaremos en nuestro CentOS 6, donde encontraremos en los repositorios oficiales la versión 8.4, mas específicamente al día de hoy, la versión 8.4.7.


Instalar PostgreSQL
yum install postgresql-server
Inicializar la base de datos
service postgresql initdb
Iniciar PostgreSQL
service postgresql start
Configurar para que se ejecute al inicio del sistema
chkconfig postgresql on
Las bases se alojan en /var/lib/pgsql/data

Cuando inicializamos PostgreSQL se crean los ficheros de configuración postgresql.con y pg_hba.conf que lo editaremos mas adelante

El usuario administrador de PostgreSQL es posgres y no posee contraseña, por seguridad le asignamos uno. Primeros nos logueamos con el usuario postgres
su - postgres
psql -c "ALTER user postgres WITH password 'contraseña'"
Crear una base de datos.
createdb midb
Para listar las bases existentes
psql -l
                                Listado de base de datos
  Nombre   |  Dueño   | Codificación |  Collation  |    Ctype    |      Privilegios      
-----------+----------+--------------+-------------+-------------+-----------------------
 midb      | postgres | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 | 
 postgres  | postgres | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 | 
 template0 | postgres | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 | =c/postgres
                                                                 : postgres=CTc/postgres
 template1 | postgres | UTF8         | es_ES.UTF-8 | es_ES.UTF-8 | =c/postgres
                                                                 : postgres=CTc/postgres
(4 filas)
Para acceder a la base de datos
psql midb
psql (8.4.7)
Digite «help» para obtener ayuda.

midb=#
Pruebe la siguiente consulta
midb=# SELECT version();
                                                      version                                                      
-------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.4.7 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13), 64-bit
(1 fila)
Para salir de psql
midb=# \q
Editamos el fichero /var/lib/pgsql/data/postgresql.conf en la sección Connection Settings. El puerto por defecto de PostgreSQL es 5432 y por defecto viene comentado así como el parámetro listen_addresses, que su opción por defecto es localhost, lo que significa que solo escuchará conexiones desde el propio servidor.
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
En nuestro caso queremos que se conecten los clientes desde cualquier lado, por lo tanto la opción es un asterico. Editamos para que quede de esta manera:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
port = 5432                            # (change requires restart)
Editamos el fichero pg_hba.conf para especificar el método de autenficación de los clientes. Por defecto solo se habilita al propio servidor con la opción ident.
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident
Agregamos nuestra red local para que cualquier usuario acceda a cualquiera de las bases con autentificación md5. También cambiamos ident por md5 para el propio servidor
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5
# Red Local
host    all         all         192.168.0.0/16        md5
Debemos reiniciar PostgreSQL
service postgresql restart
Dependiendo del método que utilicemos para configurar nuestro firewall, debemos permitir el acceso al puerto 5432 a nuestro servidor.
iptables -A INPUT -m tcp -p tcp --dport 5432 -j ACCEPT
Para acceder desde una maquina remota a la base de datos donde dbserver es el host (nombre del servidor o IP), postgres es el usuario y midb la base de datos al que quiero acceder.
psql -h dbserver -U postgres -d midb
Ya tenemos instalado PostgreSQL con una configuración básica donde podemos acceder remotamente a las bases de datos.

HOLA