Saya ingin menyalin basis data produksi PostgreSQL ke server pengembangan. Apa cara tercepat dan termudah untuk melakukan ini?
sumber
Saya ingin menyalin basis data produksi PostgreSQL ke server pengembangan. Apa cara tercepat dan termudah untuk melakukan ini?
Anda tidak perlu membuat file perantara. Anda dapat melakukan
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
atau
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
menggunakan psql
atau pg_dump
menghubungkan ke host jarak jauh.
Dengan database besar atau koneksi yang lambat, membuang file dan mentransfer file yang dikompresi mungkin lebih cepat.
Seperti yang dikatakan Kornel, tidak perlu lagi membuang ke file perantara, jika Anda ingin bekerja dengan kompresi, Anda bisa menggunakan terowongan terkompresi.
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
atau
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
tetapi solusi ini juga mengharuskan untuk mendapatkan sesi di kedua ujungnya.
Catatan: pg_dump
untuk pencadangan dan psql
untuk memulihkan. Jadi, perintah pertama dalam jawaban ini adalah menyalin dari lokal ke jarak jauh dan yang kedua adalah dari jarak jauh ke lokal . Lainnya -> https://www.postgresql.org/docs/9.6/app-pgdump.html
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?Kemudian salin cadangan ke server pengembangan Anda, pulihkan dengan:
sumber
Gunakan pg_dump , dan kemudian psql atau pg_restore - tergantung apakah Anda memilih opsi -Fp atau -Fc untuk pg_dump.
Contoh penggunaan:
sumber
Jika Anda ingin bermigrasi di antara versi (mis. Anda memperbarui postgres dan menjalankan 9.1 di localhost: 5432 dan 9.3 berjalan di localhost: 5434) Anda dapat menjalankan:
Lihat dokumen migrasi .
sumber
pg_basebackup
tampaknya menjadi cara yang lebih baik untuk melakukan ini sekarang, terutama untuk database besar.Anda dapat menyalin database dari server dengan versi utama yang sama atau lebih tua. Atau lebih tepatnya :
Untuk itu Anda perlu di server sumber:
listen_addresses = '*'
untuk dapat terhubung dari server target. Pastikan port 5432 terbuka untuk masalah ini.max_wal_senders = 1
(-X fetch
),2
untuk-X stream
(default untuk PostgreSQL 12), atau lebih.wal_level = replica
atau lebih tinggi untuk dapat diaturmax_wal_senders > 0
.host replication postgres DST_IP/32 trust
dipg_hba.conf
. Ini memberikan akses kepg
cluster kepada siapa pun dariDST_IP
mesin. Anda mungkin ingin menggunakan opsi yang lebih aman.Perubahan 1, 2, 3 memerlukan server restart, perubahan 4 membutuhkan memuat ulang.
Di server target:
sumber
Jalankan perintah ini dengan nama database, Anda ingin membuat cadangan, untuk mengambil dump DB.
Sekarang scp file dump ini ke mesin jarak jauh di mana Anda ingin menyalin DB.
Pada mesin jarak jauh, jalankan perintah berikut di ~ / some / folder untuk mengembalikan DB.
sumber
Saya banyak berjuang dan akhirnya metode yang memungkinkan saya untuk membuatnya bekerja dengan Rails 4 adalah:
di server lama Anda
Saya harus menggunakan pengguna linux postgres untuk membuat dump. Saya juga harus menggunakan -c untuk memaksa pembuatan database di server baru. --inserts memberitahukannya untuk menggunakan sintaks INSERT () yang jika tidak akan bekerja untuk saya :(
kemudian, di server baru, simpy:
untuk mentransfer file dump.sql antara server saya cukup menggunakan "cat" untuk mencetak konten dan dari "nano" untuk membuatnya ulang menyalin konten.
Juga, PERAN yang saya gunakan pada dua database berbeda jadi saya harus mencari-mengganti semua nama pemilik di dump.
sumber
Buang database Anda:
pg_dump database_name_name > backup.sql
Impor kembali basis data Anda:
psql db_name < backup.sql
sumber
Biarkan saya berbagi skrip shell Linux untuk menyalin data tabel Anda dari satu server ke server PostgreSQL lainnya.
Referensi diambil dari blog ini:
Linux Bash Shell Script untuk migrasi data antara Server PostgreSQL:
Saya hanya memigrasi data; silakan buat tabel kosong di server database tujuan / kedua Anda.
Ini adalah skrip utilitas. Selanjutnya, Anda dapat memodifikasi skrip untuk penggunaan umum seperti dengan menambahkan parameter untuk host_name, database_name, table_name, dan lainnya
sumber
Jawaban yang diterima benar, tetapi jika Anda ingin menghindari memasukkan kata sandi secara interaktif, Anda dapat menggunakan ini:
sumber