Sto cercando di copiare un database PostgreSQL di produzione su un server di sviluppo. Qual è il modo più semplice e veloce per farlo?Copia del database PostgreSQL su un altro server
risposta
Non è necessario creare un file intermedio. Si può fare
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
utilizzando psql
o pg_dump
per connettersi a un host remoto.
Con un database di grandi dimensioni o una connessione lenta, scaricare un file e trasferire il file compresso potrebbe essere più veloce.
Come Kornel detto che non c'è bisogno di scaricare un file intermedio, se si desidera lavorare compressa è possibile utilizzare un tunnel compressa
pg_dump -C dbname | bzip2 | ssh [email protected] "bunzip2 | psql dbname"
o
pg_dump -C dbname | ssh -C [email protected] "psql dbname"
ma questa soluzione richiede anche per ottenere una sessione in entrambe le estremità.
pg_dump the_db_name > the_backup.sql
quindi copiare il backup sul server di sviluppo, ripristino con:
psql the_new_dev_db < the_backup.sql
Qualcuno mi ha detto che può essere problematico - problemi di permessi che causano il dump o il ripristino di morire quando colpisce un trigger ? –
@rmbarnes: Se ci sono problemi, devono essere corretti. Senza una conoscenza dettagliata di ciò che questo "Qualcuno" ha fatto - nessuno può confermare o respingere questa affermazione. –
Usa il flag --no-owner con pg_dump. Questo salta il problema e la prima modifica di questo post lo ha usato, ma poi ho pensato che potresti aver bisogno di una fedeltà più precisa al database originale. – unmounted
Usa pg_dump, e più tardi psql o pg_restore - a seconda se si sceglie -FP o opzioni -Fc a pg_dump.
Esempio di utilizzo:
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
ho faticato un bel po 'e alla fine il metodo che mi ha permesso di farlo funzionare con Rails 4 è stato:
sul vostro vecchio server
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
ho dovuto usare l'utente postgres Linux per creare la discarica. inoltre ho dovuto usare -c per forzare la creazione del database sul nuovo server. --inserts dice di usare la sintassi INSERT(), che altrimenti non avrebbe funzionato per me :(
poi, sul nuovo server, simpy:
sudo su - postgres
psql new_database_name < dump.sql
per trasferire il file dump.sql tra il server Ho semplicemente usato il "gatto" per stampare il contenuto e poi "nano" per ricrearlo copiando il contenuto
Inoltre, il RUOLO che stavo usando sui due database era diverso, quindi ho dovuto trovare-sostituire tutto il proprietario nome nella discarica
pg_basebackup
sembra essere th Il modo migliore per farlo ora, specialmente per i grandi database.
Potresti fornire maggiori dettagli nella risposta, come un esempio? – Magnilex
Questo funziona solo quando entrambe le macchine hanno le stesse versioni PG, comunque. –
Le probabilità sono piccole per utilizzare una versione di database diversa per lo sviluppo e la produzione. L'ultima volta ho avuto una conversazione spiacevole con uno dei miei compagni di squadra mentre stava cercando di inviare un problema sul fatto che alcuni codici non funzionassero con PG 9.6 mentre in quel momento avevamo utilizzato 9,5 in produzione. Il backup di base è molto più veloce. Quindi pg_upgrade è la strada da percorrere se necessario. – Zorg
Eseguire questo comando con il nome del database, si desidera eseguire il backup, per eseguire il dump del DB.
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
Ora scp questo file di dettagli nella macchina remota in cui si desidera copiare DB.
eg. scp mydbnamedump.sql [email protected]:~/some/folder/
Sulla macchina remota eseguire il comando seguente in ~/some/folder per ripristinare il DB.
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
Se siete alla ricerca di migrare tra le versioni (ad esempio, aggiornati Postgres e avete 9.1 in esecuzione su localhost: 5432 e 9.3 in esecuzione su localhost: 5434) è possibile eseguire:
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
Scopri i migration docs.
Viene richiesta più volte la password (myuser91/postgres), c'è un modo per cui devo inserire la password una sola volta? –
@MartinWeber Crea un file pgpass come da questo documento https://www.postgresql.org/docs/9.4/static/libpq-pgpass.html –
Lasciatemi condividere uno script di shell Linux per copiare i dati della tabella da un server a un altro server PostgreSQL.
Reference taken from this blog:
Linux Bash Shell Script per la migrazione dei dati tra i server 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"
io sono solo la migrazione dei dati; si prega di creare una tabella vuota a destinazione/secondo server database.
Questo è uno script di utilità. Inoltre, è possibile modificare lo script per uso generico, ad esempio aggiungendo parametri per nome_host, nome_database, nome_tabella e altri
- 1. copia l'intero database su un altro database del server
- 2. PostgreSQL: copia dati da una tabella, database, server a un'altra tabella, un altro database, server
- 3. Copia tabella in un altro database su un altro SQL Server
- 4. Copia QStandardItemModel su un altro
- 5. Copia repository Maven su un altro computer
- 6. Posizione predefinita del database PostgreSQL su Linux
- 7. SQL Server - copia stored procedure da un db a altro
- 8. Mysql e PHP - Aggiornamento del database da un altro server
- 9. SQL Server Copia di tabelle da un database a un altro
- 10. Mongorestore su un altro database
- 11. Copia una colonna da un database ad un altro
- 12. Copia dati da un database a un altro in Oracle
- 13. Copia virtualenv completa su un altro pc
- 14. È possibile creare un ruolo del database su Heroku Postgresql?
- 15. Database predefinito denominato postgres sul server Postgresql
- 16. Copia file da un server a un altro
- 17. Plagiando un campione del vostro database - Postgresql
- 18. Replica mysql - server slave su un database
- 19. Heroku nome del database PostgreSQL
- 20. Spostamento della copia di lavoro svn su un altro computer
- 21. creazione del database da postgreSQL con symfony
- 22. Copia NSMutableArray ad un altro
- 23. Come copiare un database da un computer a un altro?
- 24. Postgresql - database di backup e ripristino su proprietario diverso?
- 25. Chiave ssh copia affidabile da un host a un altro
- 26. Copia tutto il contenuto del database (schema e dati)
- 27. Copia i contenuti bitmap di un ImageView su un altro
- 28. Copia un array di stringhe su un altro
- 29. Come riavviare il server PostgreSQL su MacOS?
- 30. Copia oggetto in un altro
Non è necessario per i file intermedi - puoi usare il tunnel SSH compresso o semplicemente pipe: pg_dump | bzip2 | ssh "bunzip2 | pg_restore" – Kornel
Se si utilizza bzip2, disattivare la compressione ssh per accelerare il trasferimento! – lzap
Il comando ssh ha già disabilitato la compressione per impostazione predefinita. Nell'esempio quando si usa la compressione ssh, non sto usando bzip2 e quando uso bzip2 non sto usando la compressione ssh. – Ferran