Estoy tratando de copiar una base de datos PostgreSQL de producción a un servidor de desarrollo. ¿Cuál es la manera más rápida y fácil de hacer esto?Copiando la base de datos PostgreSQL a otro servidor
Respuesta
No es necesario para crear un archivo intermedio. Usted puede hacer
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
o
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
usando psql
o pg_dump
para conectarse a un host remoto.
Con una base de datos grande o una conexión lenta, puede ser más rápido descargar un archivo y transferir el archivo comprimido.
Como Kornel dicho que no hay necesidad de volcar a un archivo intermedio, si usted quiere trabajar comprimido puede utilizar un túnel comprimido
pg_dump -C dbname | bzip2 | ssh [email protected] "bunzip2 | psql dbname"
o
pg_dump -C dbname | ssh -C [email protected] "psql dbname"
pero esta solución también requiere para obtener una sesión en ambos extremos.
pg_dump the_db_name > the_backup.sql
luego copiar la copia de seguridad para el servidor de desarrollo, con una restauración:
psql the_new_dev_db < the_backup.sql
Alguien me dijo que esto puede ser problemático - problemas de permisos que causan que el volcado o la restauración mueran cuando golpea un disparador ? –
@rmbarnes: Si hay problemas, tienen que ser reparados. Sin un conocimiento detallado de lo que hizo este "Alguien", nadie puede confirmar ni desestimar este reclamo. –
Usa el indicador --no-owner con pg_dump. Esto omite el problema y la primera edición de esta publicación lo usó, pero luego pensé que podría necesitar una fidelidad más precisa a la base de datos original. – unmounted
Uso pg_dump, y más tarde psql o pg_restore - dependiendo de si se elige o -fp opciones -Fc a pg_dump.
Ejemplo de uso:
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
I luchado mucho y, finalmente, el método que me permitió hacer que funcione con los carriles 4 fue:
en su antiguo servidor
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
tuve que usar el usuario postgres Linux para crear El vertedero. también tuve que usar -c para forzar la creación de la base de datos en el nuevo servidor. --inserts le dice que use la sintaxis INSERT() que de otro modo no funcionaría para mí :(
a continuación, en el nuevo servidor, simpy:
sudo su - postgres
psql new_database_name < dump.sql
para transferir el archivo dump.sql entre el servidor Simplemente utilicé el "gato" para imprimir el contenido y "nano" para recrearlo copiando el contenido.
Además, el ROL que estaba usando en las dos bases de datos era diferente, así que tuve que buscar-reemplazar a todo el propietario nombre en el volcado.
pg_basebackup
parece ser th Es una mejor forma de hacerlo ahora, especialmente para grandes bases de datos.
¿Podría proporcionar más detalles en su respuesta, como un ejemplo? – Magnilex
Esto solo funciona cuando ambas máquinas tienen las mismas versiones de PG. –
Es poco probable que use una versión de base de datos diferente para el desarrollo y la producción. La última vez tuve una conversación desagradable con uno de mis compañeros de equipo cuando estaba tratando de enviar un problema de que algunos códigos no funcionan con PG 9.6 mientras que nosotros usamos 9.5 en producción en ese momento. La copia de seguridad de base es mucho más rápida. Entonces pg_upgrade es el camino a seguir si es necesario. – Zorg
Ejecute este comando con el nombre de la base de datos, desea realizar una copia de seguridad, para realizar el volcado de la base de datos.
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
Ahora scp este archivo de volcado en la máquina remota donde desea copiar la base de datos.
eg. scp mydbnamedump.sql [email protected]:~/some/folder/
En la máquina remota, ejecute el siguiente comando en la carpeta ~/some/para restaurar la base de datos.
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
Si usted está buscando para migrar entre versiones (por ejemplo informado postgres y ha 9.1 que se ejecuta en localhost: 5432 y 9.3 que se ejecuta en localhost: 5434) puede ejecutar:
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
Mira la migration docs.
Me han preguntado varias veces (myuser91/postgres) -password, ¿hay alguna manera de que solo tenga que ingresar la contraseña una vez? –
@MartinWeber Cree un archivo pgpass según este documento https://www.postgresql.org/docs/9.4/static/libpq-pgpass.html –
Déjame compartir un script de shell de Linux para copiar los datos de tu tabla de un servidor a otro servidor de PostgreSQL.
Reference taken from this blog:
Linux Bash Shell script para la migración de datos entre servidores PostgreSQL:
#!/bin/bash
psql \
-X \
-U user_name \
-h host_name1 \
-d database_name \
-c "\\copy tbl_Students to stdout" \
| \
psql \
-X \
-U user_name \
-h host_name2 \
-d database_name \
-c "\\copy tbl_Students from stdin"
sólo estoy transfiriendo los datos; por favor, cree una tabla en blanco en su destino/segundo servidor de base de datos.
Este es un script de utilidad. Además, puede modificar la secuencia de comandos para uso genérico algo así como agregar parámetros para nombre_host, nombre_base_datos, nombre_tabla y otros
- 1. copiando toda la base de datos a otra base de datos del servidor
- 2. Copiando la tabla en un db a otro db
- 3. Base de datos predeterminada llamada postgres en el servidor Postgresql
- 4. ¿Insertar datos de un servidor a otro?
- 5. La forma más fácil de migrar una base de datos PostgreSQL a un servidor SQL
- 6. Restaurando la base de datos Postgresql
- 7. PostgreSQL - Renombrar base de datos
- 8. C# Copiando la enumeración de un objeto a otro
- 9. El propietario de la base de datos postgresql no puede acceder a la base de datos: "No se encontraron relaciones".
- 10. Importación de la base de datos MySQL de un servidor a otro
- 11. Copiando un archivo de un directorio a otro con Ruby
- 12. Copiando una base de datos en MySQL, ¿cómo copiar vistas?
- 13. Mover RavenDb a otro servidor
- 14. PostgreSQL en la base de datos de memoria
- 15. ¿Transfiere MongoDB a otro servidor?
- 16. Replicando/clonando datos de un servidor MS SQL a otro
- 17. Dos propietarios de la misma base de datos PostgreSQL
- 18. Cómo copiar la base de datos del servidor sql de uno a otro servidor sin ninguna copia de seguridad
- 19. reparación de base de datos PostgreSQL corrupto
- 20. Copiando archivo de un proyecto a otro en maven
- 21. Copiando valores de un hash a otro en perl
- 22. ¿Cómo transferir una base de datos Y sus usuarios de un servidor SQL a otro?
- 23. SQL Server 2005, cómo copiar un Diagrama de base de datos a otro servidor
- 24. Base de datos de muestra para PostgreSQL
- 25. ¿Cómo copio una base de datos de un servidor MongoDB a otro?
- 26. Necesito unir mesa de otra base de datos y, a veces, otro servidor
- 27. Conexión a la base de datos MySQL en el servidor
- 28. Servidor SQL: copiando la columna dentro de la tabla
- 29. ROR cambia la base de datos de la aplicación de SQLite a PostgreSQL
- 30. acceder a la base de datos directamente del servidor a través de Ajax (sin PHP o algún otro medio)
No hay necesidad de archivos intermedios - puede usar un túnel comprimido SSH o simplemente un tubo: pg_dump | bzip2 | ssh "bunzip2 | pg_restore" – Kornel
Si usa bzip2, ¡apague la compresión ssh para acelerar la transferencia! – lzap
El comando ssh ya tiene la compresión deshabilitada de manera predeterminada. En el ejemplo cuando uso compresión ssh, no estoy usando bzip2 y cuando uso bzip2 no estoy usando compresión ssh. – Ferran