Diferencia entre revisiones de «PostgreSQL»

De Guía Ubuntu
Saltar a: navegación, buscar
(actualización a pgAdmin III)
(Enlaces externos)
 
(No se muestran 23 ediciones intermedias realizadas por 12 usuarios)
Línea 1: Línea 1:
PostgreSQL es un potente motor de bases de datos, que tiene prestaciones y funcionalidades equivalentes a muchos gestores de bases de datos comerciales. Es más completo que [[MySQL]] ya que permite métodos almacenados, restricciones de integridad, vistas, etc. aunque en las últimas versiones de [[MySQL]] se han hecho grandes avances en ese sentido.
+
'''PostgreSQL'''  es un potente motor de bases de datos, que tiene prestaciones y funcionalidades equivalentes a muchos gestores de bases de datos comerciales. Es más completo que [[MySQL]] ya que permite métodos almacenados, restricciones de integridad, vistas, etc. aunque en las últimas versiones de [[MySQL]] se han hecho grandes avances en ese sentido.
  
 
== Instalación ==
 
== Instalación ==
En Ubuntu disponemos paquetes para varias versiones de PostgreSQL: 7.4, 8.0 y 8.1, de modo que instalaremos la última versión a no ser que necesitemos alguna anterior. Los paquetes necesarios para una instalación completa son los de la parte cliente ('''postgresql-client-8.1''') y los de la parte servidora ('''postgresql-8.1'''). En un ordenador que usemos como cliente sólo necesitamos los paquetes del cliente. También es recomentable instalar un cliente gráfico que nos facilitará la interacción con el servidor. Un cliente gráfico recomendable es [[pgAdmin III]], que funciona muy bien.
+
 
 +
En Ubuntu disponemos paquetes para varias versiones de PostgreSQL: 7.4, 8.0, 8.1 y 8.2 de modo que instalaremos la última versión a no ser que necesitemos alguna anterior. Los paquetes necesarios para una instalación completa son los de la parte cliente ('''postgresql-client-8.2''') y los de la parte servidora ('''postgresql-8.2'''). En un ordenador que usemos como cliente sólo necesitamos los paquetes del cliente. También es recomentable instalar un cliente gráfico que nos facilitará la interacción con el servidor. Un cliente gráfico recomendable es [[pgAdmin III]], que funciona muy bien.
 +
 
 +
Si tienes dudas sobre que necesitas, puedes instalar los tres paquetes:
 +
 
 +
  $ sudo aptitude install postgresql-8.2 postgresql-client-8.2 pgadmin3
 +
 
 +
{{Nota|Recuerda desinstalar cualquier versión de postgresql que no necesites para no afectar el rendimiento de tu sistema.}}
  
 
Por razones de seguridad estableceremos la nueva contraseña al usuario del sistema creado por PostgreSQL:
 
Por razones de seguridad estableceremos la nueva contraseña al usuario del sistema creado por PostgreSQL:
Línea 8: Línea 15:
 
   $ sudo passwd postgres
 
   $ sudo passwd postgres
  
 +
Cambiar los privilegios de acceso al shell del usuario postgres con el siguiente comando:
 +
 +
  $ sudo vipw
 +
 +
Y cambiamos el shell del usuario postgres de "/bin/false" a "/bin/bash". Luego salimos grabando con escape ":wq".
 
Para verificar si la instalación fue satisfactoria accedemos a la shell del servidor de bases de datos:
 
Para verificar si la instalación fue satisfactoria accedemos a la shell del servidor de bases de datos:
  
Línea 15: Línea 27:
  
 
   template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';
 
   template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';
 +
 +
Te saldrá el siguiente mensaje confirmando la operación:
 +
 +
  ALTER ROLE
 +
 +
Sal de la shell del servidor de bases de datos con el comando \q :
 +
 +
  template1=# \q
  
 
== Configuración ==
 
== Configuración ==
 +
 
=== Permitir conexiones remotas ===
 
=== Permitir conexiones remotas ===
Por motivos de seguridad, la configuración por defecto no admite conexiones externas. Para habilitarlas tenemos que editar el fichero ''/etc/postgresql/8.1/main/postgresql.conf''.
 
  
  $ sudo gedit /etc/postgresql/8.1/main/postgresql.conf
+
Por motivos de seguridad, la configuración por defecto no admite conexiones externas. Para habilitarlas tenemos que editar el fichero ''/etc/postgresql/8.2/main/postgresql.conf''.
 +
 
 +
  $ sudo gedit /etc/postgresql/8.2/main/postgresql.conf
  
 
Ahora buscamos las siguientes líneas que se encuentran comentadas:
 
Ahora buscamos las siguientes líneas que se encuentran comentadas:
Línea 32: Línea 54:
 
Posteriormente buscamos la siguiente línea y le quitamos la marca de comentario:
 
Posteriormente buscamos la siguiente línea y le quitamos la marca de comentario:
  
  #password_encryption = true
+
  #password_encryption = on
  
 
Y nos debe quedar lo siguiente:
 
Y nos debe quedar lo siguiente:
  
  password_encryption = true
+
  password_encryption = on
  
Guardamos los cambios y reiniciamos el demonio para que los cambios surjan efecto:
+
Guardamos los cambios y reiniciamos el dominio para que los cambios surjan efecto:
  
  $ sudo /etc/init.d/postgresql-8.1 restart
+
  $ sudo /etc/init.d/postgresql-8.2 restart
  
 
=== Configurar la lista de acceso ===
 
=== Configurar la lista de acceso ===
La configuración de la lista de acceso permite decirle a PostgreSQL qué método de autentificación usar y establecer relaciones de confianza para ciertas máquinas y redes. Hay que editar el fichero ''/etc/postgresql/8.1/main/pg_hba.conf'':
 
  
  $ sudo vi /etc/postgresql/8.1/main/pg_hba.conf
+
La configuración de la lista de acceso permite decirle a PostgreSQL qué método de autentificación usar y establecer relaciones de confianza para ciertas máquinas y redes. Hay que editar el fichero ''/etc/postgresql/8.2/main/pg_hba.conf'':
 +
 
 +
  $ sudo vi /etc/postgresql/8.2/main/pg_hba.conf
  
 
Al final del archivo se encuentra una lista de acceso predeterminada, ahora, dependiendo de su necesidad puedes hacer lo siguiente:
 
Al final del archivo se encuentra una lista de acceso predeterminada, ahora, dependiendo de su necesidad puedes hacer lo siguiente:
Línea 53: Línea 76:
 
  host all all 192.168.1.4 255.255.255.0 md5
 
  host all all 192.168.1.4 255.255.255.0 md5
  
{{Nota|La dirección IP y la SubMascara de Red son ejemplos, cámbielos por datos del usuario que requiera realizar la conexión.}}
+
{{Nota|La dirección IP y la SubMascara de Red son ejemplos, cámbielas por datos del usuario que requiera realizar la conexión.}}
  
* Si necesita que cualquier usuario se conecte por medio de cualquier dirección IP, agregue al final la siguiente línea:
+
* Si necesita que cualquier usuario se conecte por medio de una IP determinada sin importar el password (confiamos en dicha IP), la línea es:
 +
 
 +
host all all 192.168.1.4 255.255.255.255 trust
 +
 
 +
* Si necesita que cualquier usuario ''(usuario de base de datos autentificándose, claro)'' se conecte por medio de cualquier dirección IP, agregue al final la siguiente línea:
  
 
  host all all 0.0.0.0 0.0.0.0 md5
 
  host all all 0.0.0.0 0.0.0.0 md5
Línea 65: Línea 92:
 
* Guarda los cambios realizados en el archivo y reinicia el demonio para que los cambios surjan efecto:
 
* Guarda los cambios realizados en el archivo y reinicia el demonio para que los cambios surjan efecto:
  
  $ sudo /etc/init.d/postgresql-8.1 restart
+
  $ sudo /etc/init.d/postgresql-8.2 restart
 
+
{Nota|Para mayor información de la configuración de la lista de acceso, viste la pagina Web del proyecto de traducción del libro [http://www.sobl.org/traducciones/practical-postgres/node1.html PostgreSQL Práctico], y consulta el capitulo [http://www.sobl.org/traducciones/practical-postgres/node41.html Estructura del Archivo pg_hba.conf].}
+
  
 
== Gestión de usuarios ==
 
== Gestión de usuarios ==
 +
 
Los usuarios de PostgreSQL tienen un par de capacidades que definimos en su creación. Me explico: un usuario puede o no crear más usuarios y un usuario puede o no crear bases de datos. En el ejemplo que puedes ver a continuación creamos un usuario que no puede crear más usuarios (no es un administrador) pero puede crear más bases de datos. El modificador -P hace que nos pregunte por el password que le asignaremos al usuario. De otra manera el usuario se creará sin password.
 
Los usuarios de PostgreSQL tienen un par de capacidades que definimos en su creación. Me explico: un usuario puede o no crear más usuarios y un usuario puede o no crear bases de datos. En el ejemplo que puedes ver a continuación creamos un usuario que no puede crear más usuarios (no es un administrador) pero puede crear más bases de datos. El modificador -P hace que nos pregunte por el password que le asignaremos al usuario. De otra manera el usuario se creará sin password.
  
Línea 82: Línea 108:
 
  $ dropuser -h host -U usuario usuario_borrar
 
  $ dropuser -h host -U usuario usuario_borrar
  
== Backup ==
+
== Copia de seguridad ==
 +
 
 
Para hacer una copia de seguridad de una base de datos tiene el siguiente comando:
 
Para hacer una copia de seguridad de una base de datos tiene el siguiente comando:
  
Línea 90: Línea 117:
  
 
<bash>
 
<bash>
#!/bin/bash
+
#!/bin/bash
 
   
 
   
## BEGIN CONFIG ##
+
## BEGIN CONFIG ##
HOST=localhost
+
HOST=localhost
USER=usuario
+
BACKUP_DIR=tmp
PASS=secreto
+
## END CONFIG ##
BACKUP_DIR=Backup
+
## END CONFIG ##
+
 
   
 
   
if [ ! -d $BACKUP_DIR ]; then
+
if [ ! -d $BACKUP_DIR ]; then
  mkdir -p $BACKUP_DIR
+
  mkdir -p $BACKUP_DIR
fi
+
fi
 
   
 
   
# Backup de MySQL
+
POSTGRE_DBS=$(psql -h $HOST -U postgres -l | awk ' (NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) && ( $0 !~ /template[0-9]/) { print $1 }');
MYSQL_DBS=$(mysqlshow -h $HOST -u $USER -p$PASS | awk ' (NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) && ( $0 !~ /mysql/) { print $2 }');
+
 
   
 
   
for DB in $MYSQL_DBS ; do  
+
for DB in $POSTGRE_DBS ; do  
  echo "* Backuping MySQL data from $DB@$HOST..."
+
  echo "* Backuping PostgreSQL data from $DB@$HOST..."
  mysqldump -h $HOST -u $USER -p$PASS $DB > $BACKUP_DIR/mysql_$DB.sql
+
  pg_dump -h $HOST -U postgres $DB > $BACKUP_DIR/pg_$DB.sql
done
+
done
 
</bash>
 
</bash>
 +
 +
Para restaurar una copia de seguridad:
 +
psql -d nombre_base_datos -f archivo.pgdump
  
 
== Ver también ==
 
== Ver también ==
 +
 
* [[pgAdmin III]]
 
* [[pgAdmin III]]
 
* [[MySQL]]
 
* [[MySQL]]
  
 
== Enlaces externos ==
 
== Enlaces externos ==
* [http://www.sobl.org/traducciones/practical-postgres/node1.html PostgreSQL Práctico]
 
  
 +
* [http://lobotuerto.com/blog/2012/08/30/como-instalar-postgresql-en-ubuntu/ Cómo instalar PostgreSQL 9.1 en Ubuntu 12.04] {{es}}
 +
* [http://www.sobl.org/traducciones/practical-postgres/node1.html PostgreSQL Práctico] {{en}}
 +
* [http://www.postgresql.org/ Sitio web oficial de PostgreSQL] {{en}}
 +
* [http://www.postgresql.cl/ Comunidad de usuarios de PostgreSQL de Chile] {{es}}
 +
* [http://www.linuxhispano.net/2011/02/15/permitir-conexiones-entrantes-a-un-servidor-postgresql/ Permitir conexiones entrantes a un servidor PostgreSQL] {{es}}
 
[[Categoría:Administración del sistema]]
 
[[Categoría:Administración del sistema]]

Última revisión de 17:35 1 oct 2012

PostgreSQL es un potente motor de bases de datos, que tiene prestaciones y funcionalidades equivalentes a muchos gestores de bases de datos comerciales. Es más completo que MySQL ya que permite métodos almacenados, restricciones de integridad, vistas, etc. aunque en las últimas versiones de MySQL se han hecho grandes avances en ese sentido.

Instalación

En Ubuntu disponemos paquetes para varias versiones de PostgreSQL: 7.4, 8.0, 8.1 y 8.2 de modo que instalaremos la última versión a no ser que necesitemos alguna anterior. Los paquetes necesarios para una instalación completa son los de la parte cliente (postgresql-client-8.2) y los de la parte servidora (postgresql-8.2). En un ordenador que usemos como cliente sólo necesitamos los paquetes del cliente. También es recomentable instalar un cliente gráfico que nos facilitará la interacción con el servidor. Un cliente gráfico recomendable es pgAdmin III, que funciona muy bien.

Si tienes dudas sobre que necesitas, puedes instalar los tres paquetes:

 $ sudo aptitude install postgresql-8.2 postgresql-client-8.2 pgadmin3
Nota clasica.png Recuerda desinstalar cualquier versión de postgresql que no necesites para no afectar el rendimiento de tu sistema.

Por razones de seguridad estableceremos la nueva contraseña al usuario del sistema creado por PostgreSQL:

 $ sudo passwd postgres

Cambiar los privilegios de acceso al shell del usuario postgres con el siguiente comando:

 $ sudo vipw

Y cambiamos el shell del usuario postgres de "/bin/false" a "/bin/bash". Luego salimos grabando con escape ":wq". Para verificar si la instalación fue satisfactoria accedemos a la shell del servidor de bases de datos:

 $ sudo su postgres -c "psql template1"

Si el acceso ha sido satisfactorio cambiamos la contraseña al usuario predeterminado del servidor de bases de datos:

 template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

Te saldrá el siguiente mensaje confirmando la operación:

 ALTER ROLE

Sal de la shell del servidor de bases de datos con el comando \q :

 template1=# \q

Configuración

Permitir conexiones remotas

Por motivos de seguridad, la configuración por defecto no admite conexiones externas. Para habilitarlas tenemos que editar el fichero /etc/postgresql/8.2/main/postgresql.conf.

$ sudo gedit /etc/postgresql/8.2/main/postgresql.conf

Ahora buscamos las siguientes líneas que se encuentran comentadas:

#listen_addresses = 'localhost'

Y la substituimos por la siguiente línea:

listen_addresses = '*'

Posteriormente buscamos la siguiente línea y le quitamos la marca de comentario:

#password_encryption = on

Y nos debe quedar lo siguiente:

password_encryption = on

Guardamos los cambios y reiniciamos el dominio para que los cambios surjan efecto:

$ sudo /etc/init.d/postgresql-8.2 restart

Configurar la lista de acceso

La configuración de la lista de acceso permite decirle a PostgreSQL qué método de autentificación usar y establecer relaciones de confianza para ciertas máquinas y redes. Hay que editar el fichero /etc/postgresql/8.2/main/pg_hba.conf:

$ sudo vi /etc/postgresql/8.2/main/pg_hba.conf

Al final del archivo se encuentra una lista de acceso predeterminada, ahora, dependiendo de su necesidad puedes hacer lo siguiente:

  • Si necesita que cualquier usuario se conecte por medio de una dirección IP en especifico, agregue al final la siguiente línea:
host all all 192.168.1.4 255.255.255.0 md5
Nota clasica.png La dirección IP y la SubMascara de Red son ejemplos, cámbielas por datos del usuario que requiera realizar la conexión.
  • Si necesita que cualquier usuario se conecte por medio de una IP determinada sin importar el password (confiamos en dicha IP), la línea es:
host all all 192.168.1.4 255.255.255.255 trust
  • Si necesita que cualquier usuario (usuario de base de datos autentificándose, claro) se conecte por medio de cualquier dirección IP, agregue al final la siguiente línea:
host all all 0.0.0.0 0.0.0.0 md5
  • Si necesita que un usuario determinado se conecte a una base de datos determinada por medio de una dirección IP en especifico, agregue al final la siguiente línea:
host MyDataBase MyUser 192.168.1.4 255.255.255.0 md5
  • Guarda los cambios realizados en el archivo y reinicia el demonio para que los cambios surjan efecto:
$ sudo /etc/init.d/postgresql-8.2 restart

Gestión de usuarios

Los usuarios de PostgreSQL tienen un par de capacidades que definimos en su creación. Me explico: un usuario puede o no crear más usuarios y un usuario puede o no crear bases de datos. En el ejemplo que puedes ver a continuación creamos un usuario que no puede crear más usuarios (no es un administrador) pero puede crear más bases de datos. El modificador -P hace que nos pregunte por el password que le asignaremos al usuario. De otra manera el usuario se creará sin password.

$ createuser -A -d -P -h host -U usuario nuevo_usuario
Enter password for user "nuevo_usuario":
Enter it again:

Como acabo de comentar, existen usuario administradores (pueden crear otros usuarios). Como es lógico este comando debe ser ejecutado por un usuario con esa característica.

Análogamente podemos eliminar un usuario de esta forma:

$ dropuser -h host -U usuario usuario_borrar

Copia de seguridad

Para hacer una copia de seguridad de una base de datos tiene el siguiente comando:

$ pg_dump -h host -U usuario nombre_bd > nombre_bd.sql

Para hacer una copia de seguridad de todas las bases de datos PostgreSQL de un servidor, usa este escript:

<bash>

#!/bin/bash

## BEGIN CONFIG ##
HOST=localhost
BACKUP_DIR=tmp
## END CONFIG ##

if [ ! -d $BACKUP_DIR ]; then
  mkdir -p $BACKUP_DIR
fi

POSTGRE_DBS=$(psql -h $HOST -U postgres -l | awk ' (NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) && ( $0 !~ /template[0-9]/) { print $1 }');

for DB in $POSTGRE_DBS ; do 
  echo "* Backuping PostgreSQL data from $DB@$HOST..."
  pg_dump -h $HOST -U postgres $DB > $BACKUP_DIR/pg_$DB.sql
done

</bash>

Para restaurar una copia de seguridad:

psql -d nombre_base_datos -f archivo.pgdump

Ver también

Enlaces externos