PostgreSQL

sipsonis

Base de datos PostgreSQL

PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su código fuente disponible libremente.

Contenedor docker

Crear un contenedor con postgres:

$ docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=postgres -d postgres

Instalación local

Agregar repositorio:

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Agregar clave pública del repositorio:

$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Actualizar repositorios e instalar PostgreSQL 9.6:

$ sudo apt-get update

$ sudo apt-get -y install postgresql

Verificar la instalación y levantar el servicio:

$ psql --version

$ sudo service postgresql start

Cambiar la contraseña por defecto del usuario postgres:

# su - postgres

$ psql

postgres=# ALTER ROLE postgres WITH PASSWORD 'postgres';

postgres=# \q

Habilitar el acceso por contraseña. Abrir el archivo pg_hba.conf:

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

Cambiar el método de acceso:

local all postgres peer

local all all peer

por:

local all postgres md5

local all all md5

Reiniciar el servicio:

$ sudo service postgresql restart

Exportación e importación

Exportar a un archivo con formato CSV:

COPY (
    SELECT name FROM stores WHERE city = 'Buenos Aires'
) TO '/path/to/csv/stores_dump.csv' WITH CSV HEADER DELIMITER ';';

Importar desde un archivo con formato CSV:

COPY cms_title FROM '/path/to/csv/stores_dump.csv' DELIMITER ';' CSV;

Backups

pg_dump es una herramienta de línea de comandos que permite hacer respaldos de bases de datos de servidor PostgreSQL.

Crear un backup formato binario:

$ pg_dump -h <host> -U <usuario> -d <db> -p <port> -F c -f output.sql

Crear un backup formato de texto plano, este formato luego permite cambiar el nombre de los esquema:

$ pg_dump -h <host> -U <usuario> -d <db> -p <puerto> -F p -f output.sql

Crear un backup de una tabla en formato binario:

$ pg_dump -h <host> -U <usuario> -t <esquema>.<tabla> <db> -F c -f output.sql

Crear un backup de un schema en formato custom:

$ pg_dump -h <host> -U <usuario> --schema <esquema> <db> -F c -f output.sql

Extraer los datos de una tabla en formato plano:

$ pg_dump -h <host> -U <usuario> -d <db> -t <tabla> -F p -f <file>.sql --data-only

Restore

Para restaurar el backup en formato custom o binario usar la herramienta pg_restore:

$ pg_restore -h <host> -U <usuario> -d <db> : output.sql

Para restaurar el backup en formato plano usar la herramienta psql:

$ psql -h <host> -U <usuario> -d <db> -f output.sql

Sentencias utiles

Directorio donde se guardan las base de datos:

SHOW data_directory;

Por cada base de datos se crea un directorio con nombre de «id», para conocer el id de cada base de datos ejecutar:

SELECT datname, oid FROM pg_database;

Reemplazar caracteres inválidos:

update tabla set campo = replace(campo, 'ñ', 'ñ');
update tabla set campo = replace(campo, 'á', 'á');
update tabla set campo = replace(campo, 'ó', 'ó');
update tabla set campo = replace(campo, 'Ã', 'í');
update tabla set campo = replace(campo, 'íº', 'ú');
update tabla set campo = replace(campo, 'í©', 'é');
update tabla set campo = replace(campo, 'ú', 'ú');
update tabla set campo = replace(campo, 'í‘', 'Ñ');

Agregar pkey:

ALTER TABLE <table_name> ADD COLUMN id SERIAL PRIMARY KEY;

Mantenimiento de tablas:

ANALYZE optimiza cuando usar o no índices. Guarda y actualiza estadísticas de lso datos

Examinar Query:

EXPLAIN ANALYZE SELECT * FROM <table_name>;

Optimización:

ANALYZE <table_name>

Mantenimiento rutinario de tablas:

VACUUM ANALYZE <table_name>;

Crear tabla geométrica con índice:

CREATE INDEX <tabla_name>_geom_idx
ON <table_name>
USING GIST (geom);