Está en la página 1de 18

RESTAURAR Y RESPALDAR UNA

BASE DE DATOS POSTGRES


DESDE LA CONSOLA DE LINUX
Publicado el 27 septiembre, 2017 por codigobinariovzla

En el siguiente post les explico como hacer respaldos y


restauraciones de bases de datos postgres desde la consola de Linux!

PASOS PARA REALIZAR EL RESPALDO


Para hacer el respaldo de una base de datos postgres hacemos lo siguente:

Es importante indicar que el usuario postgres, o el usuario que deseen usar


para estas tareas, debe tener todos los privilegios como super admin en el
gestor. Desde la terminal de linux, primero nos logeamos con el usuario
postgres:

# su postgres

luego ejecutamos el siguiente comando:

# pg_dump -U postgres -f respaldo_basededatos.sql db_basededatos

donde “db_basededatos” es la base de datos que queremos respaldar como


ejemplo y “respaldo_basededatos.sql” es el archivo que se va a generar al
ejecutar este comando. El nombre del archivo puede ser el que quieran.

o puede ser así también:

# pg_dump -U postgres db_basededatos > respaldo_basededatos.sql

 db_basededatos: es la base de datos a respaldar.


 respaldo_basededatos.sql: es el nombre del archivo de respaldo que
se va a generar al ejecutar este comando, (el nombre del archivo queda
al criterio del administrador.)

También podríamos realizar el respaldo en una ruta distinta a la que


actualmente tenga el prompt de la consola, por ejemplo en una carpeta ubicada
en /var/respaldos/:
# pg_dump -U postgres db_basededatos >
/var/respaldos/respaldo_basededatos.sql

Si por alguna razón debemos hacer un respaldo de todas las bases de datos
en un solo comando, hacemos los siguiente:

# pg_dumpall -U postgres > misbasesdedatos_all.sql

PASOS PARA REALIZAR UNA RESTAURACIÓN


Ahora para restaurar un respaldo de una base de datos postgres desde un
archivo .sql primero debemos crear una nueva base de datos donde se va a
restaurar el respaldo .sql. Desde la consola hacemos lo siguiente:

# su postgres

entramos al gestor de postgres con:

# psql

luego creamos la base de datos donde queremos restaurar el respaldo:

postgres=# create database mi_basededatos;

y nos salimos con:

postgres=# \q

Ahora ejecutamos lo siguiente:

# psql -h localhost -p 5432 -U postgres -f


“respaldo_basededatos.sql” mi_basededatos

Si es un servidor remoto, podríamos ejecutarlo así, colocando la IP del servidor


remoto postgres, con el argumento -h indicamos la IP o el nombre del servidor,
sea local o remoto, el argumento -f indica que lo siguente en el comando entre
las comillas, es el respaldo .sql que deseamos restaurar
(“respaldo_basededatos.sql”), con el argumento -p indicamos el puerto del
postgres y con -U indicamos el usuario,  por ejemplo

# psql -h 172.16.36.5 -p 5432 -U postgres -f


“respaldo_basededatos.sql” mi_basededatos

donde “mi_basededatos” es la base de datos donde se hará la restauración y


“respaldo_basededatos.sql” es el archivo .sql correspondiente al respaldo
que queremos restaurar.
Al ejecutar ese comando el sistema nos pedirá la clave del usuario postgres y
listo!

Otra manera muy similar de realizar una restauración es como a continuación:

# psql -U postgres mi_basededatos < respaldo_basededatos.sql

Artículos recomendados:

Crear un Script de respaldo de App y BD en Linux

Como respaldar/restaurar una base de datos MySQL desde el terminal de


Linux

Restaurar backups de PostgreSql


Publicado porDamián 14 octubre, 2008 

Vamos a continuar con las operaciones que deben ser habituales


para el mantenimiento de nuestras base de datos.

Hasta ahora ya habíamos visto cómo hacer un backup en


Postgresql, y también, cómo hacerlo de manera automática.

Vamos ahora a la otra punta del circuito: restaurar una base


desde nuestros backups.

El comando que vamos a utilizar (y conocer) es pg_restore.

Si lo aplicara a los ejemplos que antes dí sobre pg_dump,


nuestro ejemplo de pg_restore seria el siguiente.

pg_restore -i -h localhost -p 5432 -U postgres -d mibase -v


"/home/damian/backups/mibase.backup"

Una vez que lo ejecutemos, se nos pedirá la contraseña del


usuario que vamos a usar.
Para conocer los parámetros que podemos pasarle al comando,
nada mejor que darse una vuelta por la documentación oficial,
ya que hay algún que otro detalle que estaría bueno conocer (y
además, porque es buena práctica leer la documentación
oficial).

Sobre los parámetros del ejemplo, paso a detallarlos.

 -i le indica que ignore la versión (entre el


comando y la base de datos).
 -h localhost es el host de nuestro PostgreSql.
 -p 5432 es la indicación del puerto donde corre
el servicio.
 -U postgres especifica que se usará el usuario
postgres para la operación.
 -d mibase es para que realize la restauración
sobre una base de datos en particular, en este
caso mibase.
 -v ejecutará el comando en modo verbose (así
podremos ir viendo la salida de cada paso del
proceso).
 /home/damian/backups/mibase.backup es el
archivo que usaremos como backup y que
queremos ingresar.

Hasta ahora, ya hemos podido realizar backups, automatizarlos,


y ahora, ya podremos restaurar nuestras bases de datos desde la
consola sin problemas.

Una recomendación para los que estén empezando a conocerse


con PostgreSql, es suscribirse a la lista de correo en español.
¿Cómo generar una backup de
PostgreSQL y cómo restaurarla?
nachoogoomez
16685
Hacer backups de nuestras bases de datos en PostgreSQL puede parecer
difícil, pero no lo es. A continuación te voy a explicar con dos sencillos
comandos como podemos automatizar nuestras backups de PostgreSQL.
Para hacer un dump completo (data y estructura) de una base de datos en
PostgreSQL, podemos utilizar el siguiente comando desde nuestra consola:
pg_dump -U usuario -W -h host basename > basename.sql
Vamos a explicar el comando al completo:
 -U => Se refiere al Usuario, en este caso puede ser el usuario
propietario de la base de datos o el usuario postgres
 -W => Con este parámetro conseguiremos que nos solicite el password
del usuario antes especificado
 -h => Con este indicamos cuál es el servidor PostgreSQL al que nos
conectaremos para obtener nuestro dump, si estamos local podemos colocar
localhost sino ponemos la IP del servidor PostgreSQL
 basename => Este es el ultimo parámetro realmente en esta linea de
comando, por esa razon no tiene alguna letra que indique que el siguiente
parámetro es el nombre de la base de datos
 > basename.sql => Esta parte en realidad solo indica que la salida de
nuestro comando pg_dump la guarde en un archivo basename.sql
Cuando queramos restaurar la base de datos solo tenemos que ejecutar el
siguiente comando:
psql -U username -W -h host basename < basename.sql
Y así de sencillo hacemos una backup y la restauramos de nuestro base de
datos PostgreSQL.
4
hace 3 años
Bases de Datos

Escribe tu comentario
+2
Ordenar por:
Top
2

slemmor

3 Puntos

un año
Respaldar base de datos
https://www.youtube.com/watch?v=p1luuoh6TT0
Restaurar base de datos
https://www.youtube.com/watch?v=_C90mwwtrjw
Respaldar base de datos de una tabla en específico
https://www.youtube.com/watch?v=trlsgPbNF0g&t=3s
2

makeasy

6888 Puntos

un año
En que carpeta se guarda mi backup?
3

makeasy
un año
pg_dump -U postgres -W -h 127.0.0.1 basedata > basename.sql

basedata = Nombre de la base de datos creada en postgres


basename.sql = Nombre que va a tener tu backup
para saber donde tienes que ir con el comando cd a la carpeta donde quieres que se
almacene tu base de datos y ejecutas el comando.
ejemplo
cd /var/www/html/proyecto
y una vez dentro corres el comando
pg_dump -U postgres -W -h 127.0.0.1 basedata > basename.sql
1

houston2204
3 meses
psql -U postgres -W -h 127.0.0.1 basedata > basename.sql

También pueden usar psql y todo lo demás es igual


1

germantellezv

11244 Puntos

un año
Hola nachogoomez, muchas gracias por el aporte. Estoy a punto de usarlo, no entendí lo
de ‘basename’.
Tengo 2 dudas:
1. ¿El parametro ‘basename’ lo reemplazo por el nombre de mi base de datos o
es una constante?
2. ¿En el host debo especificar el puerto?

Muchas gracias de antemano


1

osvaldohinojosa
un año
Asi es, “basename” tiene que ser reemplazado por el nombre de la db que quieres
respaldar y en el host no es necesario incluir el puerto. Si quisieras conectarte por otro
puerto usa la opcion “-p”
pg_dump -h 198.51.100.0 -p 5432 basename > basename.bak
1

bothrops

4637 Puntos

un año
Hola, tengo una duda… Donde se guarda el backup?
3

makeasy
un año
pg_dump -U postgres -W -h 127.0.0.1 basedata > basename.sql
basedata = Nombre de la base de datos creada en postgres
basename.sql = Nombre que va a tener tu backup
para saber donde tienes que ir con el comando cd a la carpeta donde quieres que se
almacene tu base de datos y ejecutas el comando.
ejemplo
cd /var/www/html/proyecto
y una vez dentro corres el comando
pg_dump -U postgres -W -h 127.0.0.1 basedata > basename.sql

Cómo exportar y restaurar bases de datos Postgres


14 Marzo 2014

 Postgres

 bases

 datos

 exportar

 restaurar

Este artículo explica cómo exportar y restaurar (o importar) bases de datos


PostgreSQL desde línea de comandos utilizando las
herramientas pg_dump, pg_dumpall y psql.
PostgreSQL, o simplemente "Postgres", es un sistema de gestión de bases de
datos orientado a objetos y relacional (ORDBMS) que hace énfasis en la
extensibilidad y conformidad con los estándares. Está liberado bajo la licencia
free/open source PostgreSQL, similar a la licencia MIT. PostgreSQL está
desarrollado por el Grupo de Desarrollo Global de PostgreSQL, el cual consiste
en un grupo de voluntarios empleados y supervisados por empresas como Red
Hat y EnterpriseDB.

PostgreSQL implementa la mayor parte del estándar SQL:2011, cumple con las
propiedades ACID (Atomicity, Consistency, Isolation, Durability), es
completamente transaccional (incluyendo todas las sentencias DDL, Data
Definition Language), posee vistas extensibles actualizables, tipos de datos,
operadores, índices, funciones, agregación, incluye un lenguaje procedural, y
tiene un gran número de extensiones de terceros.

PostgreSQL funciona en la mayoría de los sistemas operativos incluyendo


GNU/Linux, FreeBSD, Solaris, Microsoft Windows y MacOS X. La gran mayoría
de distribuciones GNU/Linux disponen de PostgreSQL en sus repositorios.

El sitio oficial del proyecto es www.postgresql.org.

Este es mi primer artículo dedicado a Postgres, por ello voy a arrancar con algo
sencillo: cómo exportar y restaurar bases de datos Postgres desde línea de
comandos.

Si se desea exportar una base de datos, ya sea para generar una copia de


respaldo (backup) como para importar en otro servidor, es posible utilizar la
herramienta pg_dump, la cual vuelca una base de datos como una secuencia de
instrucciones SQL en formato de texto plano (al igual que la
herramienta mysqldump de MySQL). Por ejemplo, si se desea exportar la base
de datos "mibd" al archivo "pg_mibd.sql" utilizando el usuario "postgres",
ejecutar:
# pg_dump -U postgres -f pg_mibd.sql mibd

O también:
# pg_dump -U postgres mibd > pg_mibd.sql

Para obtener ayuda sobre pg_dump, ejecutar:


# pg_dump --help

pg_dump dumps a database as a text file or to other formats.


Usage:

pg_dump [OPTION]... [DBNAME]

General options:

-f, --file=FILENAME output file or directory name

-F, --format=c|d|t|p output file format (custom, directory,


tar,

plain text (default))

-j, --jobs=NUM use this many parallel jobs to dump

-v, --verbose verbose mode

-V, --version output version information, then exit

-Z, --compress=0-9 compression level for compressed


formats

--lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table


lock

-?, --help show this help, then exit

Options controlling the output content:

-a, --data-only dump only the data, not the schema

-b, --blobs include large objects in dump

-c, --clean clean (drop) database objects before


recreating

-C, --create include commands to create database in


dump

-E, --encoding=ENCODING dump the data in encoding ENCODING

-n, --schema=SCHEMA dump the named schema(s) only

-N, --exclude-schema=SCHEMA do NOT dump the named schema(s)

-o, --oids include OIDs in dump

-O, --no-owner skip restoration of object ownership in

plain-text format

-s, --schema-only dump only the schema, no data

-S, --superuser=NAME superuser user name to use in plain-


text format

-t, --table=TABLE dump the named table(s) only

-T, --exclude-table=TABLE do NOT dump the named table(s)


-x, --no-privileges do not dump privileges (grant/revoke)

--binary-upgrade for use by upgrade utilities only

--column-inserts dump data as INSERT commands with


column names

--disable-dollar-quoting disable dollar quoting, use SQL


standard quoting

--disable-triggers disable triggers during data-only


restore

--exclude-table-data=TABLE do NOT dump data for the named table(s)

--inserts dump data as INSERT commands, rather


than COPY

--no-security-labels do not dump security label assignments

--no-synchronized-snapshots do not use synchronized snapshots in


parallel jobs

--no-tablespaces do not dump tablespace assignments

--no-unlogged-table-data do not dump unlogged table data

--quote-all-identifiers quote all identifiers, even if not key


words

--section=SECTION dump named section (pre-data, data, or


post-data)

--serializable-deferrable wait until the dump can run without


anomalies

--use-set-session-authorization

use SET SESSION AUTHORIZATION commands


instead of

ALTER OWNER commands to set ownership

Connection options:

-d, --dbname=DBNAME database to dump

-h, --host=HOSTNAME database server host or socket directory

-p, --port=PORT database server port number

-U, --username=NAME connect as specified database user

-w, --no-password never prompt for password

-W, --password force password prompt (should happen


automatically)

--role=ROLENAME do SET ROLE before dump

If no database name is supplied, then the PGDATABASE environment


variable value is used.

Report bugs to <pgsql-bugs@postgresql.org>.

Si en cambio se desean exportar todas las bases de datos de un servidor


PostgreSQL, utilizar la herramienta pg_dumpall:
# pg_dumpall -U postgres > pg_todo.sql

Para obtener ayuda sobre pg_dumpall, ejecutar:


# pg_dumpall --help

pg_dumpall extracts a PostgreSQL database cluster into an SQL script


file.

Usage:

pg_dumpall [OPTION]...

General options:

-f, --file=FILENAME output file name

-V, --version output version information, then exit

--lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table


lock

-?, --help show this help, then exit

Options controlling the output content:

-a, --data-only dump only the data, not the schema

-c, --clean clean (drop) databases before


recreating

-g, --globals-only dump only global objects, no databases

-o, --oids include OIDs in dump

-O, --no-owner skip restoration of object ownership

-r, --roles-only dump only roles, no databases or


tablespaces

-s, --schema-only dump only the schema, no data

-S, --superuser=NAME superuser user name to use in the dump

-t, --tablespaces-only dump only tablespaces, no databases or


roles

-x, --no-privileges do not dump privileges (grant/revoke)


--binary-upgrade for use by upgrade utilities only

--column-inserts dump data as INSERT commands with


column names

--disable-dollar-quoting disable dollar quoting, use SQL


standard quoting

--disable-triggers disable triggers during data-only


restore

--inserts dump data as INSERT commands, rather


than COPY

--no-security-labels do not dump security label assignments

--no-tablespaces do not dump tablespace assignments

--no-unlogged-table-data do not dump unlogged table data

--quote-all-identifiers quote all identifiers, even if not key


words

--use-set-session-authorization

use SET SESSION AUTHORIZATION commands


instead of

ALTER OWNER commands to set ownership

Connection options:

-d, --dbname=CONNSTR connect using connection string

-h, --host=HOSTNAME database server host or socket directory

-l, --database=DBNAME alternative default database

-p, --port=PORT database server port number

-U, --username=NAME connect as specified database user

-w, --no-password never prompt for password

-W, --password force password prompt (should happen


automatically)

--role=ROLENAME do SET ROLE before dump

If -f/--file is not used, then the SQL script will be written to the
standard

output.

Report bugs to <pgsql-bugs@postgresql.org>.

Para importar o restaurar un volcado de bases de datos Postgres desde


línea de comandos, se debe utilizar la herramienta psql, la cual funciona como
terminal interactiva contra servidores PostgreSQL. Por ejemplo, si se desea
restaurar el volcado del archivo "pg_mibd.sql" (utilizando el usuario "postgres")
guardando un log en el archivo "pg_mibd.log", ejecutar:
# psql -U postgres < pg_mibd.sql > pg_mibd.log 2>&1

Luego es posible buscar errores en el log mediante:


# grep -i error pg_mibd.log

Para obtener ayuda sobre psql, ejecutar:


# psql --help

psql is the PostgreSQL interactive terminal.

Usage:

psql [OPTION]... [DBNAME [USERNAME]]

General options:

-c, --command=COMMAND run only single command (SQL or internal)


and exit

-d, --dbname=DBNAME database name to connect to (default:


"root")

-f, --file=FILENAME execute commands from file, then exit

-l, --list list available databases, then exit

-v, --set=, --variable=NAME=VALUE

set psql variable NAME to VALUE

-V, --version output version information, then exit

-X, --no-psqlrc do not read startup file (~/.psqlrc)

-1 ("one"), --single-transaction

execute as a single transaction (if non-


interactive)

-?, --help show this help, then exit

Input and output options:

-a, --echo-all echo all input from script

-e, --echo-queries echo commands sent to server

-E, --echo-hidden display queries that internal commands


generate

-L, --log-file=FILENAME send session log to file


-n, --no-readline disable enhanced command line editing
(readline)

-o, --output=FILENAME send query results to file (or |pipe)

-q, --quiet run quietly (no messages, only query


output)

-s, --single-step single-step mode (confirm each query)

-S, --single-line single-line mode (end of line terminates


SQL command)

Output format options:

-A, --no-align unaligned table output mode

-F, --field-separator=STRING

set field separator (default: "|")

-H, --html HTML table output mode

-P, --pset=VAR[=ARG] set printing option VAR to ARG (see \pset


command)

-R, --record-separator=STRING

set record separator (default: newline)

-t, --tuples-only print rows only

-T, --table-attr=TEXT set HTML table tag attributes (e.g., width,


border)

-x, --expanded turn on expanded table output

-z, --field-separator-zero

set field separator to zero byte

-0, --record-separator-zero

set record separator to zero byte

Connection options:

-h, --host=HOSTNAME database server host or socket directory


(default: "local socket")

-p, --port=PORT database server port (default: "5432")

-U, --username=USERNAME database user name (default: "root")

-w, --no-password never prompt for password

-W, --password force password prompt (should happen


automatically)
For more information, type "\?" (for internal commands) or "\help"
(for SQL

commands) from within psql, or consult the psql section in the


PostgreSQL

documentation.

Report bugs to <pgsql-bugs@postgresql.org>.

pgAdmin

Para quienes sientan temor de las herramientas de línea de comandos existe


un cliente GUI llamado "pgAdmin". En CentOS lo provee el paquete
"pgadmin3" y se instala ejecutando sudo yum install pgadmin3 en cualquier
workstation cliente (es necesario contar con el repositorio epel).

Reiniciar el Servidor PostgreSQL


Muy buenos días a todos los postgreseros y postgreseras que siguen nuestro
blog semanal, ¡sean todos bienvenidos a una nueva entrada! En la entrada de
esta semana hablaremos de los momentos en los cuales necesitamos de
reiniciar el servidor Postgresql. Ésto sucede normalmente por que hemos
realizado cambios en los ficheros configuración del cluster que afectan al
postmaster y que por lo tanto precisamos de reiniciar la instancia para que
estos cambios surtan efecto. En esta entrada veremos las dos formas que
disponemos para reiniciar el servidor PostgreSQL.
¡Empezamos!

Empieza ahora apuntándote a nuestra academia online de PostgreSQL y no dejes


escapar la oportunidad en convertirte en un DBA de PostgreSQL gracias a todos los
cursos que tienes dentro de tu suscripción.

Reiniciando el Servidor PostgreSQL; Mediante un


ejecutable
Podemos utilizar un ejecutable que tenemos disponible en el directorio de
instalación de los binarios para reiniciar PostgreSQL. El nombre de este
ejecutable es pg_ctl. Tenemos que indicarle el directorio del cluster (donde
tenemos almacenados nuestros datos) y la opción «restart».

pg_ctl -D /path_cluster restart


En el lugar de indicar la ruta completa del cluster podemos indicar una variable
del sistema llamada PGDATA. En esta variable tenemos almacenada la ruta
del cluster.

pg_ctl -D $PGDATA restart

Reiniciando el Servidor PostgreSQL; Mediante un service


La otra forma que disponemos para restart PostgreSQL server solo es valida
si tenemos un script creado para iniciar automáticamente una instancia de
Postgres, utilizamos el comando service. Por lo tanto, es tan simple como
especificar el nombre del servicio que controla el clúster y la opción
«restart».

sudo service nombre_del_servicio restart

Hay que tener en cuenta que reiniciar el servidor PostgreSQL implica


que dejemos sin disposición a todas las bases de datos que tengamos en
nuestro cluster.

Dependiendo de los parámetros que hemos cambiado en el fichero de


configuración, es posible que no sea necesario tener que reiniciar la instancia
de base de datos (restart PostgreSQL server). En tal caso simplemente es
suficiente con recargar esos ficheros de configuración, de esta forma las
bases de datos siguen estando disponibles.

Para recargar los ficheros de configuración utilizamos los mismos


comandos que hemos visto para reiniciar postgreSQL. En vez de utilizar la
opción restart, utilizamos la opción reload.

De esta forma se recargan los ficheros de configuración utilizando


el ejecutable pg_ctl. Se puede realizar tanto indicándole el directorio del
cluster, como utilizando la variable PGDATA.

pg_ctl -D /path_cluster reload

pg_ctl -D $PGDATA reload

 
Al igual que para reiniciar, la otra forma es utilizando el comando service.
Recuerda que para poder utilizarlo debemos de tener creado previamente el
servicio.

sudo service nombre_del_servicio reload

En nuestro Curso de Tunnig, se indica cuales son los parámetros cuya


modificación hace necesario reiniciar el servidor postgreSQL. Suscríbete y
fórmate con nosotros en el motor de Bases de Datos más importante del
mundo Open Source; PostgreSQL.

También te vendría bien realiza nuestro Curso de Instalación Avanzada de


PostgreSQL 11, para conocer a fondo este tema.

 
 

No dejes escapar la oportunidad en convertirte en un DBA de PostgreSQL gracias a


todos los cursos que tienes dentro de tu suscripción.

También podría gustarte