¿Cómo crear una copia de seguridad de una sola tabla en una base de datos postgres?

160

¿Hay alguna manera de crear una copia de seguridad de una sola tabla dentro de una base de datos usando postgres? ¿Y cómo? ¿Esto también funciona con el comando pg_dump?

Elitmiar
fuente

Respuestas:

212

Use --tablepara decir pg_dumpqué tabla tiene que respaldar:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
Frank Heikens
fuente
9
Y cómo restaurar ese archivo de copia de seguridad. (.backup), lo usé pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"pero salió:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares
13
psql -U username -d database -1 -f your_dump.sql
rnaud
55
¿Qué quisiste decir: abstract_file_path?
Bandungeuy
3
No estoy seguro de por qué se votó esta respuesta, las personas hacen clic en +1 sin inspeccionar las cosas por sí mismas o intentarlo. El problema con esta respuesta, que lo hace completamente inútil, es que la solución / los comandos dados no exportan secuencias creadas en la tabla (clave primaria), por lo que la importación falla. No conozco una sola base de datos de producción de PG que no use claves primarias con secuencias. Es la mitad de una respuesta, no responde completamente la pregunta y requiere trabajo adicional para exportar / importar una sola tabla.
user10664542
1
con un giro de sudo ligeramente diferente a este, terminé con un error de permiso en el volcado de archivos (lo suficientemente lógico ya que el usuario postgres no tiene acceso de escritura en mis directorios) y tuve un error de marca desconocido --ignore-version. La respuesta de Prashant Kumar, que es más simple, funcionó para mí.
JL Peyret
84

Si estás en Ubuntu,

  1. Inicie sesión en su usuario de postgres sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Asegúrese de que está ejecutando el comando en el que el postgresusuario tiene permiso de escritura (Ejemplo: /tmp)

Editar

Si desea volcar el .sql en otra computadora, es posible que deba considerar omitir la información del propietario que se guarda en el archivo .sql.

Puedes usar pg_dump --no-owner -d <database_name> -t <table_name> > file.sql

Sri Harsha Kappala
fuente
1
¿Qué sucede si desea todas las tablas, sin tener que especificar el nombre de cada una?
shekeine
3
¡Simplemente elimine la opción -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala
44
No sé por qué, pero la opción -d no es válida para psql9.3 y el comando dado no funciona para mí. La primera es pg_dump -U username db_name -t table_name> fileName .
serkan kucukbay
pg_dump -t <table_name> <database_name> > file.sql
Sriram
@ user10664542: Lea el manual, especialmente esta sección: "Para este propósito," tabla "incluye vistas, vistas materializadas, secuencias y tablas extranjeras".
Frank Heikens
42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

Puede realizar la copia de seguridad de una sola tabla, pero sugeriría realizar una copia de seguridad de toda la base de datos y luego restaurar la tabla que necesite. Siempre es bueno tener una copia de seguridad de toda la base de datos.

9 formas de usar pg_dump

Prashant Kumar
fuente
No estoy seguro de por qué se votó esta respuesta, las personas hacen clic en +1 sin inspeccionar las cosas por sí mismas o intentarlo. El problema con esta respuesta, que lo hace completamente inútil, es que la solución / los comandos dados no exportan secuencias creadas en la tabla (clave primaria), por lo que la importación falla. No conozco una sola base de datos de producción de PG que no use claves primarias con secuencias. Es la mitad de una respuesta, no responde completamente la pregunta y requiere trabajo adicional para exportar / importar una sola tabla.
user10664542
Como se señaló anteriormente, tengo una fuerte sospecha de que el usuario10664542, sin ninguna respuesta SO postgres a su nombre, está fuera de su alcance aquí. Si bien la secuencia trae complicaciones adicionales, hay suficientes votos a favor en las respuestas similares que la gente probablemente los hizo funcionar incluso si han tenido que ajustar la secuencia después del hecho. Si tuviera que restaurar mi volcado, buscaría formas de actualizar la última identificación de la secuencia desde un max(id)en mi mesa. esta es la respuesta que funcionó y estoy seguro, al mirar el sql generado, que podría haberlo restaurado.
JL Peyret
9

Si prefiere una interfaz gráfica de usuario, puede usar pgAdmin III (Linux / Windows / OS X). Simplemente haga clic derecho en la tabla de su elección, luego "copia de seguridad". Creará un pg_dumpcomando para ti.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Franck Dernoncourt
fuente
2

Como una adición a la respuesta de Frank Heiken, si desea usar INSERTdeclaraciones en lugar de copy from stdin, entonces debe especificar la --insertsbandera

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Tenga en cuenta que omití la --ignore-versionbandera, porque está en desuso.

user3207874
fuente
No estoy seguro de por qué se votó esta respuesta, las personas hacen clic en +1 sin inspeccionar las cosas por sí mismas o intentarlo. El problema con esta respuesta, que lo hace completamente inútil, es que la solución / los comandos dados no exportan secuencias creadas en la tabla (clave primaria), por lo que la importación falla. No conozco una sola base de datos de producción de PG que no use claves primarias con secuencias. Es la mitad de una respuesta, no responde completamente la pregunta y requiere trabajo adicional para exportar / importar una sola tabla.
user10664542