Hoy vamos a aprender a instalar PostgreSQL en CentOS 7 y lo vamos a compilar manualmente. Este tutorial lo he realizado en una maquina virtual CentOS 7 y usando siempre root. Vamos a instalar la última versión estable, la v9.5.0. Como siempre vamos a usar SSH para conectarnos al servidor, y si habéis estado atentos al blog, os digo que usaré la misma maquina que usé en su día para hacer la entrada Instalación de un LAMP en CentOS 7.0 [Linux Apache MariaDB PHP]. ¡A trabajar!

Descargar PostgreSQL v9.5.0

Una vez nos hemos conectado a la maquina virtual (que puede ser la de la entrada anterior o una maquina virtual virgen) lo primero que haremos será instalar el paquete FTP para conectarnos al FTP de PostgreSQL:

# yum install ftp

Y nos conectaremos:

[postgres@localhost ~]$ ftp
ftp> open  ftp.postgresql.org
Trying 87.238.57.227...
Connected to ftp.postgresql.org (87.238.57.227).

Nos pedirá usuario y contraseña, usaremos anonymous y contraseña en blanco. Una vez conectados al FTP, nos moveremos al siguiente directorio:

ftp> cd /pub/source/v9.5.0
250 Directory successfully changed.

Y descargamos el paquete comprimido:

ftp> get postgresql-9.5.0.tar.gz
local: postgresql-9.5.0.tar.gz remote: postgresql-9.5.0.tar.gz
227 Entering Passive Mode (217,196,149,55,223,107).
150 Opening BINARY mode data connection for postgresql-9.5.0.tar.gz
(22755540 bytes).
226 Transfer complete.
22755540 bytes received in 7,4 secs (3074,32 Kbytes/sec)
ftp> bye
221 Goodbye.

Instalación de PostgreSQL desde las fuentes

Lo primero que tendremos que hacer es extraer el contenido del fichero que nos hemos descargado anteriormente del FTP:

# tar zxf postgresql-9.5.0.tar.gz

Después instalaremos unas dependencias necesarias para instalar PostgreSQL:

# yum install gcc readline-devel zlib-debel

Una vez instaladas, entramos dentro de la carpeta de postgresql y compilamos las fuentes con:

# cd postgre*
# ./configure
# gmake
# gmake install

Una vez acabado:

postgesql

Verificar directorios de PostgreSQL

Después de la instalación, nos aseguraremos de que los directorios bin, include, lib y share se han creado correctamente dentro del directorio /usr/local/pgsql como se muestra a continuación:

[postgres@localhost ~]$ ls -l /usr/local/pgsql/
total 20
drwxr-xr-x  2 root     root 4096  8 mar 21:33 bin
drwx------ 19 postgres root 4096  8 mar 21:36 data
drwxr-xr-x  6 root     root 4096  8 mar 21:33 include
drwxr-xr-x  4 root     root 4096  8 mar 21:33 lib
drwxr-xr-x  6 root     root 4096  8 mar 21:33 share

Configuración PostgreSQL

A continuación explicaremos como tenemos que configurar PostgreSQL en CentOS 7. Tendremos que crear un usuario, crear un directorio de datos, iniciar el servidor y para acabar iniciar una base de datos con PostgreSQL.

Crear usuario PostgreSQL

Crearemos un usuario local llamado postgres:

# adduser postgres

Le configuraremos una contraseña al usuario:

# passwd postgres
Changing password for user postgres.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Crear directorio data

Crearemos el directorio data y añadiremos como propietario al usuario creado anteriormente y pondremos los permisos correspondientes:

# mkdir /usr/local/pgsql/data
# chown postgres /usr/local/pgsql/data
# chmod 755 /usr/local/pgsql/data

Iniciar el servidor

Accederemos al usuario postgres:

# su - postgres

Ahora iniciaremos PostgreSQL con el directorio data creado anteriormente:

# /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Una vez ejecutado esto, comprobaremos que se han creado los ficheros dentro del directorio data:

[postgres@localhost ~]$ ls /usr/local/pgsql/data/
base     pg_commit_ts  pg_ident.conf  pg_notify    pg_snapshots  pg_subtrans  PG_VERSION            postgresql.conf
global   pg_dynshmem   pg_logical     pg_replslot  pg_stat       pg_tblspc    pg_xlog               postmaster.opts
pg_clog  pg_hba.conf   pg_multixact   pg_serial    pg_stat_tmp   pg_twophase  postgresql.auto.conf  postmaster.pid
[postgres@localhost ~]$ 

Iniciar base de datos con PostgreSLQ

Iniciamos con el usuario postgres:

# su - postgres

Una vez iniciado, ejecutamos el siguiente comando en segundo plano:

# /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &

Crear base de datos

Para crear una base de datos ejecutamos:

# /usr/local/pgsql/bin/createdb test

Y podremos acceder dentro de la base de datos test haciendo:

[postgres@localhost ~]$ /usr/local/pgsql/bin/psql test
psql (9.5.0)
Type "help" for help.
test=#

Esto puede ser algo complicado, así, que optamos por la opción de instalar una aplicación web para administrar nuestras bases de datos.

Instalación de phpPgAdmin

Para instalar phpPgAdmin, primero tenemos que tener instalado los repositorios epel-release, si ya los tienes instalado salta este paso, si no, instálalos:

# yum install epel-release

Actualizamos repositorios:

# yum update

Instalamos phpPgAdmin, y en caso de no tener un servidor web instalado, también instalamos Apache:

# yum install phpPgAdmin httpd

Configuración básica de phpPgAdmin

Editamos el fichero que se ha creado en el directorio de configuración de HTTPD, /etc/httpd/conf.d/phpPgAdmin.conf y lo dejaremos como se muestra a continuación:

Alias /phpPgAdmin /usr/share/phpPgAdmin

<Location /phpPgAdmin>
   <IfModule mod_authz_core.c>
      # Apache 2.4
      Require all granted
      #Require host example.com
   </IfModule>
   <IfModule !mod_authz_core.c>
      # Apache 2.2
      Order deny,allow
      Allow from all
      # Allow from .example.com
   </IfModule>
</Location>

Luego editamos el fichero de configuración de phpPgAdmin en /etc/phpPgAdmin/config.inc.php y buscamos las siguientes líneas y hacemos las modificaciones indicadas:

$conf['servers'][0]['host'] = '';

Y lo cambiamos por:

$conf['servers'][0]['host'] = 'localhost';

Buscamos la siguiente línea:

$conf['extra_login_security'] = true;

Y lo cambiamos por:

$conf['extra_login_security'] = false;

Buscamos la siguiente línea:

$conf['owned_only'] = false;

Y la cambiamos por:

$conf['owned_only'] = true;

Una vez realizadas dichas modificaciones, reiniciamos el servicio web y postgreSQL:

# systemctl restart httpd

# su - postgres
# /usr/local/pgsql/bin/pg_ctl restart

Ahora vamos al navegador y en la barra de navegación ponemos: IP_Servidor/phpPgAdmin/:

phppgadminIniciamos sesión haciendo clic en Servers > Localhost (el usuario y contraseña son las credenciales del usuario local postgres que hemos configurado durante la el proceso). Una vez iniciamos veremos que tenemos la base de datos que hemos creado anteriormente para probar que funciona:

testpgsql