Importar volcado de SQL a la base de datos PostgreSQL

451

Estamos cambiando de host y el anterior proporcionó un volcado de SQL de la base de datos PostgreSQL de nuestro sitio.

Ahora, estoy tratando de configurar esto en un servidor WAMP local para probar esto.

El único problema es que no tengo idea de cómo importar esta base de datos en PostgreSQL 9 que he configurado.

Intenté pgAdmin III pero parece que no puedo encontrar una función de 'importación'. Así que acabo de abrir el editor de SQL y pegué el contenido del volcado allí y lo ejecuté, crea las tablas pero sigue dándome errores cuando intenta ingresar los datos.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

También he intentado hacer esto con el símbolo del sistema, pero no puedo encontrar el comando que necesito.

Si lo hago

psql mydatabase < C:/database/db-backup.sql;

Me sale el error

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

¿Cuál es la mejor manera de importar la base de datos?

deslumbramiento
fuente
Yo tenía un error similar al primero: ERROR: syntax error at or near "t". Resultó que solo había importado un esquema parcial y, por lo tanto, una CREATE TABLEdeclaración anterior en el script había fallado. Mire a través de la salida completa de la importación para encontrarla.
owensmartin

Respuestas:

732
psql databasename < data_base_dump

Ese es el comando que estás buscando.

Cuidado: databasenamedebe crearse antes de importar. Eche un vistazo al Capítulo 23. Documentos de PostgreSQL. Copia de seguridad y restauración .

Jacob
fuente
1
He intentado ese psql mydatabase <C: \ database \ db-backup.sql pero recibo el error Invalid command \ database. También intenté con "" a su alrededor.
deslumbra el
23
@Dazz Debe ejecutar este comando desde el símbolo del sistema (Inicio -> Ejecutar -> cmd), no desde el indicador de postgres.
Jacob
2
si lo ejecuto desde cmd obtengo 'El operador' <'está reservado para uso futuro'.
deslumbra el
3
@Dazz: También puedes usar el -finterruptor (o --file)
Grzegorz Szpetkowski
47
psql --username = postgres databasename <data_base_dump.sql
Maxence
356

Aquí está el comando que estás buscando.

psql -h hostname -d databasename -U username -f file.sql
Gabriel Ramirez
fuente
29
Bien, pero mejor agregue también el parámetro "-L logfile.log" para registrar la salida en el archivo.
zerologiko
2
obteniendo esto "La entrada es un volcado de formato personalizado de PostgreSQL. Use el cliente de línea de comandos pg_restore para restaurar este volcado en una base de datos".
Wajdan Ali
3
También puedes:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo
114

Creo que quieres ejecutar en psql:

\i C:/database/db-backup.sql
Arran Ubels
fuente
Tuve que usar esto porque el eshell de Emacs no admite la redirección de entrada. Gracias.
Duma
3
Asegúrese de cambiar primero a la base de datos con \ c <database_name>
hkong
53

Eso funcionó para mí:

sudo -u postgres psql db_name < 'file_path'
ivanacorovic
fuente
49

No estoy seguro de si esto funciona para la situación del OP, pero descubrí que ejecutar el siguiente comando en la consola interactiva fue la solución más flexible para mí:

\i 'path/to/file.sql'

Solo asegúrese de estar conectado a la base de datos correcta. Este comando ejecuta todos los comandos SQL en el archivo especificado.

rockusbacchus
fuente
1
Esta solución funcionó para mí, mientras que la solución más votada arrojó el error "stdin is not a tty".
김민준
Justo lo que estaba buscando: una forma de ejecutar el script desde dentro de la psqllínea de comando. ¡Gracias!
vatsug
Solo quería agradecerte por este. Debe incluirse en la respuesta correcta.
PKHunter
Esto es correcto, ¡no utilice barras diagonales en la ruta en Windows!
Erdinc Ay
también para Windows, necesita barras diagonales dobles
CMAS
44

Funciona bastante bien, en la línea de comando, se requieren todos los argumentos, -W es para contraseña

psql -h localhost -U user -W -d database_name -f path/to/file.sql
Feuda
fuente
22

Solo por diversión, si su volcado está comprimido, puede hacer algo como

gunzip -c filename.gz | psql dbname

Como Jacob mencionó, los documentos de PostgreSQL describen todo esto bastante bien.

alan
fuente
7

Yo suelo:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Espero que esto ayude a alguien.

Vajira Lasantha
fuente
4

Puedes hacerlo en pgadmin3. Descarte los esquemas que contiene su volcado. Luego haga clic derecho en la base de datos y elija Restaurar. Luego puede buscar el archivo de volcado.

Vanessa MacDougal
fuente
2
Pero el botón 'restaurar' no se puede hacer clic incluso después de seleccionar el archivo .sql. Este software parece querer otro tipo de archivo, uno con formato * .backup. Al hacer clic en 'ayuda' en ese cuadro de importación, se hace referencia a pg_restore - "... una utilidad para restaurar una base de datos PostgreSQL desde un archivo creado por pg_dump en uno de los formatos de texto no simple". El archivo sql al que se refiere el OP es un formato de texto sin formato.
JosephK
4

Noté que muchos ejemplos son demasiado complicados para localhost donde solo existen usuarios postgres sin contraseña en muchos casos:

psql -d db_name -f dump.sql
Kiryl Plyashkevich
fuente
4

asegúrese de que se haya creado la base de datos a la que desea importar, luego puede importar el volcado con

sudo -u postgres -i psql testdatabase < db-structure.sql

Si desea sobrescribir toda la base de datos, primero suelte la base de datos

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

y luego recrearlo con

sudo -u postgres -i psql -c "create database testdatabase;"
rubo77
fuente
2

Intenté muchas soluciones diferentes para restaurar mi copia de seguridad de postgres. Me encontré con problemas de permiso denegado en MacOS, no parecía haber soluciones.

Así es como lo hice funcionar:

Postgres viene con Pgadmin4. Si usa macOS, puede presionar CMD+ SPACEy escribir pgadmin4para ejecutarlo. Esto abrirá una pestaña del navegador en Chrome.

Si encuentra errores al hacer que pgadmin4 funcione, intente killall pgAdmin4en su terminal, luego intente nuevamente.


Pasos para obtener pgadmin4 + copia de seguridad / restauración

1. Crear la copia de seguridad

Haga esto haciendo clic derecho en la base de datos -> "copia de seguridad"

ingrese la descripción de la imagen aquí

2. Déle un nombre al archivo.

Al igual test12345. Haga clic en copia de seguridad. Esto crea un volcado de archivo binario, no está en un .sqlformato

ingrese la descripción de la imagen aquí

3. Vea dónde se descargó

Debería haber una ventana emergente en la parte inferior derecha de la pantalla. Haga clic en la página "más detalles" para ver dónde se descargó su copia de seguridad

ingrese la descripción de la imagen aquí

4. Encuentra la ubicación del archivo descargado

En este caso, es /users/vincenttang

ingrese la descripción de la imagen aquí

5. Restaurar la copia de seguridad de pgadmin

Suponiendo que realizó los pasos 1 a 4 correctamente, tendrá un archivo binario de restauración. Puede llegar un momento en que su compañero de trabajo quiera usar su archivo de restauración en su máquina local. Que dicha persona vaya a pgadmin y restaure

Haga esto haciendo clic derecho en la base de datos -> "restaurar"

ingrese la descripción de la imagen aquí

6. Seleccione el buscador de archivos

Asegúrese de seleccionar la ubicación del archivo manualmente, NO arrastre y suelte un archivo en los campos del cargador en pgadmin. Porque te encontrarás con permisos de error. En su lugar, busque el archivo que acaba de crear:

ingrese la descripción de la imagen aquí

7. Encuentra dicho archivo

Puede que tenga que cambiar el filtro en la parte inferior derecha a "Todos los archivos". Busque el archivo a partir de entonces, desde el paso 4. Ahora presione el botón "Seleccionar" en la esquina inferior derecha para confirmar

ingrese la descripción de la imagen aquí

8. Restaurar dicho archivo

Verá esta página nuevamente, con la ubicación del archivo seleccionado. Sigue adelante y restauralo

ingrese la descripción de la imagen aquí

9. Éxito

Si todo está bien, la parte inferior derecha debería mostrar un indicador que muestra una restauración exitosa. Puede navegar a sus tablas para ver si los datos se han restaurado correctamente en cada tabla.

10. Si no tuvo éxito:

Si el paso 9 falla, intente eliminar su antiguo esquema público en su base de datos. Vaya a "Herramienta de consulta"

ingrese la descripción de la imagen aquí

Ejecute este bloque de código:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

ingrese la descripción de la imagen aquí

Ahora intente los pasos 5 a 9 nuevamente, debería funcionar

Resumen

Así es como tuve que hacer una copia de seguridad / restaurar mi copia de seguridad en Postgres, cuando tuve problemas de permisos de error y no pude iniciar sesión como superusuario. O establezca credenciales para lectura / escritura usando chmodpara carpetas. Este flujo de trabajo funciona para un volcado de archivo binario predeterminado de "Personalizado" de pgadmin. Supongo que .sqles lo mismo, pero aún no he probado eso

Vincent Tang
fuente