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: .. code:: bash(code) 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 -U -d -p -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 -U -d -p -F p -f output.sql Crear un backup de una tabla en formato binario:: $ pg_dump -h -U -t . -F c -f output.sql Crear un backup de un schema en formato custom:: $ pg_dump -h -U --schema -F c -f output.sql Extraer los datos de una tabla en formato plano:: $ pg_dump -h -U -d -t -F p -f .sql --data-only Restore ------------------------------------------------------------------- Para restaurar el backup en formato custom o binario usar la herramienta *pg_restore*:: $ pg_restore -h -U -d : output.sql Para restaurar el backup en formato plano usar la herramienta *psql*:: $ psql -h -U -d -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: .. code:: bash(code) 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 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 ; Optimización:: ANALYZE Mantenimiento rutinario de tablas:: VACUUM ANALYZE ; Crear tabla geométrica con índice:: CREATE INDEX _geom_idx ON USING GIST (geom);