El día de hoy he decidido crear este post referente a cómo podemos instalar PostgreSQL en una de nuestras distribuciones GNU/Linux.
Una de las razones por las cuales me decidí ha realizar este artículo, es para ayudar a una amiga del trabajo, el cual espero le sea de utilidad.
Pues manos a la obra. Como primer paso ha realizar, será descargar PostgreSQL. En el momento en que realizé este post, la versión vigente de PostgreSQL es la 8.3.1. Para lo cual, descargaremos el archivo postgresql-8.3.1.tar.bz2.
Una vez descargado el archivo, procederemos a instalarlo. Para ejemplificar ésto, realizaremos la instalación en el directorio /opt/pgsql.
Nos convertiremos en usuario root y crearemos el directorio /opt/src.
javoaxian@darthmaul:~$ su -
root@darthmaul:~$ mkdir /opt/src
Una vez que ya somos
root, copiaremos el archivo que descargamos al directorio
/opt/src y nos moveremos a dicho directorio:
root@darthmaul:~# cp /ruta/de/descarga/archivo/postgresql-8.3.1.tar.bz2 /opt/src/
root@darthmaul:~# cd /opt/src
Descomprimiremos el archivo y entraremos al directorio creado:
root@darthmaul:~# tar -jxvf postgresql-8.3.1.tar.bz2
root@darthmaul:~# cd postgresql-8.3.1
Iniciaremos el proceso de configuración:
root@darthmaul:~# ./configure --prefix=/opt/pgsql
Si aparece un error semejante a éste:
configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.
Deberán instalar el paquete
libreadline5-dev, ésto es en el caso de cualquier distribución basada en
Debian como
Ubuntu. En otras distribuciones deberán buscar este paquete o su correspondiente.
Para instalarlo en distribuciones basadas en
Debian:
root@darthmaul:~# apt-get install libreadline5-dev
Una vez instalado, volvemos a ejecutar el comando
configure:
root@darthmaul:~# ./configure --prefix=/opt/pgsql
Puede que nos aparezca el siguiente mensaje de error:
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.
Para resolver ésto, deberemos instalar el paquete
zlib1g-dev en cualquier distribución basada en
Debian como
Ubuntu y su equivalente en otras distribuciones.
Para instalarlo en distribuciones basadas en
Debian:
root@darthmaul:~# apt-get install zlib1g-dev
Volvemos a ejecutar el comando
configure:
root@darthmaul:~# ./configure --prefix=/opt/pgsql
Si pasó la configuración, ejecutaremos los siguientes comandos:
root@darthmaul:~# make
root@darthmaul:~# make install
Crearemos el usuario
postgres junto con el grupo
postgres, además de asignarle como
HOME, el directorio donde instalamos
Postgresql.
root@darthmaul:~# adduser --home /opt/pgsql postgres
El comando anterior nos dirá que ya existe el directorio para el HOME y que no pertenece al usuario que estamos creando, además nos pedirá que ingresemos la contraseña del usuario, así cómo alguna información extra de la cuenta
postgres y pondremos lo que queramos.
Cambiaremos el dueño y grupo al directorio donde realizamos la instalación:
root@darthmaul:~# chown -R postgres.postgres /opt/pgsql/
Ahora en el archivo
/etc/profile agregaremos lo siguiente antes de la línea
umask 022.
export PGSQL=/opt/pgsql
export PGLIB=$PGSQL/lib
export MANPATH=$MANPATH:$PGSQL/man
export LD_LIBRARY_PATH=$PGLIB
export PATH=$PATH:$PGSQL/bin
umask 022
La última 3 líneas que colocamos, puede que ya las téngamos configuradas con algunas otras rutas. Por ejemplo, en este momento, la línea de la variable
PATH la tengo compuesta de la siguiente manera:
export PATH=$PATH:$PGSQL/bin:$MYSQL/bin:$ORACLE_HOME/bin:$SYBASE/bin:$JAVA_HOME/bin
Como se puede ver, tengo configuradas más rutas para mi variable
PATH, ustedes también pueden ir agregando las rutas concatenando con
: las rutas.
Para que surtan efecto los cambios en la variable
PATH, deberemos reiniciar nuestra máquina o en la consola donde estemos trabajando ejecutar el siguiente comando (
SOLO FUNCIONA EN LA CONSOLA EN QUE SE EJEUCTA EL COMANDO):
root@darthmaul:~# source /etc/profile
En otra consola nos convertiremos en el usuario
postgres e inicializaremos la base de datos de
Postgresql.
javoaxian@darthmaul:~$ su - postgres
postgres@darthmaul:~$ mkdir /opt/pgsql/data
postgres@darthmaul:~$ /opt/pgsql/bin/initdb -D /opt/pgsql/data/
Donde nos aparecerá algo semejante a ésto:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale es_MX.
The default database encoding has accordingly been set to LATIN1.
The default text search configuration will be set to "spanish".
fixing permissions on existing directory /opt/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 24MB/153600
creating configuration files ... ok
creating template1 database in /opt/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.
Success. You can now start the database server using:
/opt/pgsql/bin/postgres -D /opt/pgsql/data
or
/opt/pgsql/bin/pg_ctl -D /opt/pgsql/data -l logfile start
Ha quedado instalado
Postgres, ahora para arrancarlo ejecutaremos lo siguiente como usuario
postgres:
postgres@darthmaul:~$ /opt/pgsql/bin/postgres -D /opt/pgsql/data&
o también:
postgres@darthmaul:~$ /opt/pgsql/bin/postmaster -D /opt/pgsql/data&
Si queremos que arranque desde que iniciamos la máquina en una distribución basada en
Debian,
deberemos seguir las instrucciones que puse en este post.
Para probar el script
postgresqld que acabamos de crear con
este post, podemos ejecutar el siguiente comando como usuario
root para levantar el servicio de
postgres:
root@darthmaul:~# /etc/init.d/postgresqld start
Ahora ejecutaremos el siguiente comando para ver si se levantó el proceso:
root@darthmaul:~# ps -fea |grep postgres
Y nos aparecerá algo similar a ésto:
postgres 26543 1 0 17:52 pts/0 00:00:00 /opt/pgsql/bin/postmaster -i -D /opt/pgsql/data
postgres 26545 26543 0 17:52 ? 00:00:00 postgres: writer process
postgres 26546 26543 0 17:52 ? 00:00:00 postgres: wal writer process
postgres 26547 26543 0 17:52 ? 00:00:00 postgres: autovacuum launcher process
postgres 26548 26543 0 17:52 ? 00:00:00 postgres: stats collector process
Para detenerlo podemos ejecutar lo siguiente:
root@darthmaul:~# /etc/init.d/postgresqld stop
Para ingresar al manejador, podemos acceder como usuario
postgres a la base de datos
template1. Recuerda que deberá estar arriba el servicio de
Postgres, ya sea usando el script que hicimos o ejecutando el comando
postgres o
postmaster como se indicó parrafos antes.
javoaxian@darthmaul:~$ psql -U postgres -d template1
Donde nos aparecerá algo similar a ésto:
Welcome to psql 8.3.1, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
template1=#
PONER CONTRASEÑA AL USUARIO POSTGRESComo podemos ver, cuando nos conectamos a la base de datos
template1 no se nos pidió contraseña, si deseamos que se nos pida una contraseña podemos realizar lo siguiente:
Dentro del prompt de postgres y como usuario postgres, le asignaremos una contraseña a este usuario:
template1=# ALTER USER postgres WITH PASSWORD 'CONTRASEÑADELUSUARIO';
Ya le creamos la contraseña al usuario
postgres, pero ahora deberemos configurar el archivo
pg_hba.conf, este archivo se encuentra en el directorio
/opt/pgsql/data.
Abriremos el archivo
/opt/pgsql/data/pg_hba.conf como usuario
postgres y con el editor de nuestro agrado y buscaremos la siguientes líneas:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
Y cambiaremos las palabras
trust por
md5. Lo cual nos quedará de la siguiente manera:
# 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
Guardaremos los cambios y si tenemos arriba el servicio de
Postgres lo deberemos de matar ya sea usando el script que hicimos o matando el proceso ejecutando el siguiente comando como usuario
postgres:
postgres@darthmaul:~$ kill -INT `head -1 /opt/pgsql/data/postmaster.pid`
Y volvemos arrancarlo con el script o con los comandos
postgres o
postmaster.
En este caso voy a usar
postmaster:
postgres@darthmaul:~$ /opt/pgsql/bin/postmaster -D /opt/pgsql/data&
Ahora volvemos a entrar al prompt de
Postgres como usuario
postgres y nos deberá solicitar la contraseña que ingresamos con el comando
ALTER USER:
postgres@darthmaul:~$ psql -U postgres -d template1
Password for user postgres:
Welcome to psql 8.3.1, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
template1=#
Bueno, con ésto finalizo este artículo.
Saludos!!!