Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mentranspor basis data PostgreSQL antara instans DB
Dengan menggunakan basis data PostgreSQL yang dapat ditranspor untuk Amazon RDS, Anda dapat memindahkan basis data PostgreSQL antara dua instans DB. Ini adalah cara yang sangat cepat untuk memigrasikan basis data besar antara instans DB yang berbeda. Untuk menggunakan pendekatan ini, instans DB Anda harus menjalankan PostgreSQL versi utama.
Kemampuan ini mengharuskan Anda menginstal ekstensi pg_transport
di instans DB sumber dan tujuan. Ekstensi pg_transport
menyediakan mekanisme transportasi fisik yang memindahkan file basis data dengan pemrosesan minimal. Mekanisme ini memindahkan data jauh lebih cepat daripada proses dump dan load tradisional, dengan waktu henti yang lebih sedikit.
catatan
Basis data PostgreSQL yang dapat ditranspor tersedia dalam RDS for PostgreSQL 11.5 dan yang lebih tinggi, dan RDS for PostgreSQL versi 10.10 dan yang lebih tinggi.
Untuk mentranspor instans DB PostgreSQL dari satu instans DB RDS for PostgreSQL ke instans DB lainnya, pertama-tama siapkan instans sumber dan tujuan sebagaimana dijelaskan dalam Menyiapkan instans DB untuk transportasi. Anda kemudian dapat mentranspor basis data menggunakan fungsi yang dijelaskan dalam Mentranspor basis data PostgreSQL.
Topik
- Batasan dalam penggunaan basis data PostgreSQL yang dapat ditranspor
- Bersiap untuk mentranspor basis data PostgreSQL
- Mentranspor basis data PostgreSQL ke tujuan dari sumber
- Apa yang terjadi selama transportasi basis data
- Referensi fungsi basis data yang dapat ditranspor
- Referensi parameter basis data yang dapat ditranspor
Batasan dalam penggunaan basis data PostgreSQL yang dapat ditranspor
Basis data yang dapat ditranspor memiliki batasan berikut:
Replika baca – Anda tidak dapat menggunakan basis data yang dapat ditranspor pada replika baca atau instans induk replika baca.
-
Jenis kolom yang tidak didukung – Anda tidak dapat menggunakan jenis data
reg
dalam tabel basis data apa pun yang akan Anda transportasikan dengan metode ini. Jenis ini bergantung pada ID objek (OID) katalog sistem, yang sering berubah selama transportasi. -
Tablespace – Semua objek basis data sumber harus dalam tablespace
pg_default
default. -
Kompatibilitas – Instans DB sumber dan tujuan harus menjalankan PostgreSQL dalam versi utama yang sama.
-
Ekstensi — Instans DB sumber hanya dapat memiliki penginstalan
pg_transport
. -
Peran dan ACL – Informasi hak istimewa akses dan kepemilikan basis data sumber tidak dibawa ke basis data tujuan. Semua objek basis data dibuat dan dimiliki oleh pengguna tujuan transportasi lokal.
Transportasi bersamaan — Instans DB tunggal dapat mendukung hingga 32 transportasi bersamaan, termasuk impor dan ekspor, jika proses pekerja telah dikonfigurasi dengan benar.
-
Khusus instans DB RDS for PostgreSQL - Basis data PostgreSQL yang dapat ditranspor didukung hanya pada instans DB RDS for PostgreSQL. Anda tidak dapat menggunakannya dengan basis data on-premise atau basis data yang berjalan di Amazon EC2.
Bersiap untuk mentranspor basis data PostgreSQL
Sebelum memulai, pastikan bahwa instans DB RDS for PostgreSQL Anda memenuhi persyaratan berikut:
Instans DB RDS for PostgreSQL untuk sumber dan tujuan harus menjalankan versi PostgreSQL yang sama.
DB tujuan tidak dapat memiliki basis data dengan nama yang sama dengan DB sumber yang ingin Anda transportasikan.
Akun yang Anda gunakan untuk menjalankan transportasi membutuhkan hak istimewa
rds_superuser
pada DB sumber dan DB tujuan.Grup keamanan untuk instans DB sumber harus mengizinkan akses masuk dari instans DB tujuan. Izin ini mungkin sudah ada jika instans DB sumber dan tujuan Anda berada di VPC. Untuk mengetahui informasi selengkapnya tentang grup keamanan, lihat Mengontrol akses dengan grup keamanan.
Mentranspor basis data dari instans DB sumber ke instans DB tujuan memerlukan beberapa perubahan pada grup parameter DB yang terkait dengan setiap instans. Artinya Anda harus membuat grup parameter DB kustom untuk instans DB sumber dan membuat grup parameter DB kustom untuk instans DB tujuan.
catatan
Jika instans DB Anda sudah dikonfigurasi menggunakan grup parameter DB kustom, Anda dapat memulai dengan langkah 2 dalam prosedur berikut.
Cara mengonfigurasi parameter grup DB kustom untuk mentranspor basis data
Untuk langkah-langkah berikut, gunakan akun yang memiliki hak istimewa rds_superuser
.
Jika instans DB sumber dan tujuan menggunakan grup parameter DB default, Anda perlu membuat grup parameter DB khusus menggunakan versi yang sesuai untuk instance Anda. Ini dilakukan agar Anda dapat mengubah nilai untuk beberapa parameter. Untuk informasi selengkapnya, lihat Menggunakan grup parameter.
Dalam grup parameter DB kustom, ubah nilai untuk parameter berikut:
shared_preload_libraries
— Tambahkanpg_transport
ke daftar pustaka.pg_transport.num_workers
– Nilai default-nya adalah 3. Tingkatkan atau kurangi nilai ini sesuai kebutuhan untuk basis data Anda. Untuk basis data 200 GB, kami sarankan tidak lebih dari 8. Perlu diingat bahwa jika Anda meningkatkan nilai default untuk parameter ini, Anda juga harus meningkatkan nilaimax_worker_processes
.pg_transport.work_mem
– Nilai default-nya adalah 128 MB atau 256 MB, tergantung versi PostgreSQL. Pengaturan default biasanya dapat dibiarkan saja.max_worker_processes
– Nilai parameter ini perlu diatur menggunakan perhitungan berikut:(3 * pg_transport.num_workers) + 9
Nilai ini diperlukan di tujuan untuk menangani berbagai proses pekerja latar belakang yang terlibat dalam transportasi. Untuk mempelajari lebih lanjut tentang
max_worker_processes,
, lihat Resource Consumptiondalam dokumentasi PostgreSQL.
Untuk informasi selengkapnya tentang parameter
pg_transport
, lihat Referensi parameter basis data yang dapat ditranspor .Boot ulang instans DB RDS for PostgreSQL sumber dan instans tujuan agar pengaturan untuk parameter tersebut berlaku.
Terhubung ke instans DB RDS for PostgreSQL sumber Anda.
psql --host=
source-instance
.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordHapus ekstensi asing dari skema publik instans DB. Hanya ekstensi
pg_transport
yang diizinkan selama operasi transportasi aktual.Instal ekstensi
pg_transport
sebagai berikut:postgres=>
CREATE EXTENSION pg_transport;
CREATE EXTENSION
Terhubung ke instans DB RDS for PostgreSQL tujuan Anda. Hapus ekstensi asing apa pun, lalu instal ekstensi
pg_transport
.postgres=>
CREATE EXTENSION pg_transport;
CREATE EXTENSION
Mentranspor basis data PostgreSQL ke tujuan dari sumber
Setelah Anda menyelesaikan proses yang dijelaskan dalam Bersiap untuk mentranspor basis data PostgreSQL, Anda dapat memulai transportasi. Untuk melakukannya, jalankan fungsi transport.import_from_server
pada instans DB tujuan. Dalam sintaks berikut ini Anda dapat menemukan parameter fungsi.
SELECT transport.import_from_server( '
source-db-instance-endpoint
',source-db-instance-port
, 'source-db-instance-user
', 'source-user-password
', 'source-database-name
', 'destination-user-password
', false);
Nilai false
yang ditunjukkan dalam contoh memberi tahu fungsi bahwa ini bukan dry run. Untuk menguji penyiapan transportasi, Anda dapat menentukan true
untuk opsi dry_run
saat memanggil fungsi, seperti yang ditunjukkan berikut ini:
postgres=>
SELECT transport.import_from_server( 'docs-lab-source-db.666666666666
aws-region
.rds.amazonaws.com', 5432, 'postgres', '********', 'labdb', '******', true);INFO: Starting dry-run of import of database "labdb". INFO: Created connections to remote database (took 0.03 seconds). INFO: Checked remote cluster compatibility (took 0.05 seconds). INFO: Dry-run complete (took 0.08 seconds total). import_from_server -------------------- (1 row)
Baris INFO adalah output karena parameter pg_transport.timing
diatur ke nilai default-nya, true
. Atur dry_run
ke false
ketika Anda menjalankan perintah dan basis data sumber diimpor ke tujuan, seperti yang ditunjukkan berikut:
INFO: Starting import of database "labdb".
INFO: Created connections to remote database (took 0.02 seconds).
INFO: Marked remote database as read only (took 0.13 seconds).
INFO: Checked remote cluster compatibility (took 0.03 seconds).
INFO: Signaled creation of PITR blackout window (took 2.01 seconds).
INFO: Applied remote database schema pre-data (took 0.50 seconds).
INFO: Created connections to local cluster (took 0.01 seconds).
INFO: Locked down destination database (took 0.00 seconds).
INFO: Completed transfer of database files (took 0.24 seconds).
INFO: Completed clean up (took 1.02 seconds).
INFO: Physical transport complete (took 3.97 seconds total).
import_from_server
--------------------
(1 row)
Fungsi ini mengharuskan Anda memberikan kata sandi pengguna basis data. Oleh karena itu, kami menyarankan Anda untuk mengubah kata sandi dari peran pengguna yang Anda gunakan setelah transportasi selesai. Atau, Anda dapat menggunakan variabel terikat SQL untuk membuat peran pengguna sementara. Gunakan peran sementara ini untuk transportasi, lalu buang peran tersebut setelahnya.
Jika transportasi Anda tidak berhasil, Anda mungkin melihat pesan kesalahan yang mirip dengan yang berikut ini:
pg_transport.num_workers=8 25% of files transported failed to download file data
Pesan kesalahan "gagal mengunduh data file" menunjukkan bahwa jumlah proses pekerja tidak diatur dengan benar untuk ukuran basis data. Anda mungkin perlu meningkatkan atau mengurangi nilai yang diatur untuk pg_transport.num_workers
. Setiap kegagalan melaporkan persentase penyelesaian, sehingga Anda dapat melihat dampak perubahan Anda. Misalnya, mengubah pengaturan dari 8 menjadi 4 dalam satu kasus menghasilkan hal berikut:
pg_transport.num_workers=4 75% of files transported failed to download file data
Perlu diingat bahwa parameter max_worker_processes
juga diperhitungkan selama proses transportasi. Dengan kata lain, Anda mungkin perlu memodifikasi pg_transport.num_workers
dan max_worker_processes
agar transportasi basis data berhasil dijalankan. Contoh yang ditampilkan akhirnya berfungsi ketika pg_transport.num_workers
diatur ke 2:
pg_transport.num_workers=2 100% of files transported
Lihat informasi selengkapnya tentang fungsi transport.import_from_server
dan parameternya di Referensi fungsi basis data yang dapat ditranspor.
Apa yang terjadi selama transportasi basis data
Fitur basis data PostgreSQL yang dapat ditranspor menggunakan model tarik untuk mengimpor basis data dari instans DB sumber ke tujuan. Fungsi transport.import_from_server
membuat basis data bergerak pada instans DB tujuan. Basis data bergerak tidak dapat diakses pada instans DB tujuan selama durasi transportasi.
Ketika transportasi dimulai, semua sesi saat ini pada basis data sumber berakhir. Setiap basis data selain basis data sumber pada instans DB sumber tidak terpengaruh oleh transportasi.
Basis data sumber dibuat menjadi mode hanya-baca khusus. Saat berada dalam mode ini, Anda dapat terhubung ke basis data sumber dan menjalankan kueri hanya baca. Namun, kueri berkemampuan tulis dan beberapa jenis perintah lainnya diblokir. Hanya basis data sumber spesifik yang ditranspor yang terpengaruh oleh pembatasan ini.
Selama transportasi, Anda tidak dapat memulihkan instans DB tujuan ke suatu titik waktu. Ini karena transportasi tersebut tidak bersifat transaksional dan tidak menggunakan log write-ahead PostgreSQL untuk mencatat perubahan. Jika instans DB tujuan mengaktifkan pencadangan otomatis, pencadangan otomatis diambil setelah transportasi selesai. oint-in-time Pemulihan P tersedia beberapa kali setelah pencadangan selesai.
Jika transportasi gagal, ekstensi pg_transport
berupaya untuk membatalkan semua perubahan ke instans DB sumber dan tujuan. Ini termasuk menghapus basis data yang ditranspor sebagian di tujuan. Bergantung pada jenis kegagalan, basis data sumber dapat terus menolak kueri berkemampuan tulis. Jika ini terjadi, gunakan perintah berikut untuk memungkinkan kueri berkemampuan tulis.
ALTER DATABASE
db-name
SET default_transaction_read_only = false;
Referensi fungsi basis data yang dapat ditranspor
Fungsi transport.import_from_server
mentranspor basis data PostgreSQL dengan mengimpornya dari sumber instans DB ke instans DB tujuan. Hal ini dilakukan menggunakan mekanisme transportasi koneksi basis data fisik.
Sebelum memulai transportasi, fungsi ini memverifikasi bahwa instans DB sumber dan tujuan merupakan versi yang sama dan kompatibel untuk migrasi. Hal ini juga menegaskan bahwa instans DB tujuan memiliki cukup ruang untuk sumbernya.
Sintaks
transport.import_from_server( host text, port int, username text, password text, database text, local_password text, dry_run bool )
Nilai yang Ditampilkan
Tidak ada.
Parameter
Anda dapat menemukan deskripsi parameter fungsi transport.import_from_server
dalam tabel berikut.
Parameter | Deskripsi |
---|---|
host |
Titik akhir instans DB sumber. |
port |
Integer yang mewakili port instans DB sumber. Instans DB PostgreSQL kerap menggunakan port 5432. |
username |
Pengguna instans DB sumber. Pengguna ini harus menjadi anggota peran |
password |
Kata sandi pengguna instans DB sumber. |
database |
Nama basis data dalam instans DB sumber untuk ditranspor. |
local_password |
Kata sandi lokal pengguna saat ini untuk instans DB tujuan. Pengguna ini harus menjadi anggota peran |
dry_run |
Nilai Boolean opsional yang menetapkan apakah dry run akan dijalankan. Default-nya adalah dry_run ke true . |
Contoh
Sebagai contoh, lihat Mentranspor basis data PostgreSQL ke tujuan dari sumber.
Referensi parameter basis data yang dapat ditranspor
Beberapa parameter mengontrol perilaku ekstensi pg_transport
. Selanjutnya, Anda dapat menemukan deskripsi parameter ini.
pg_transport.num_workers
-
Jumlah pekerja yang akan digunakan dalam proses transportasi. Default-nya adalah 3. Nilai yang valid adalah 1–32. Bahkan transportasi basis data terbesar biasanya membutuhkan kurang dari 8 pekerja. Nilai pengaturan ini pada instans DB tujuan digunakan oleh tujuan dan sumber selama transportasi.
pg_transport.timing
-
Menentukan apakah akan melaporkan informasi waktu selama transportasi. Default-nya adalah
true
, artinya informasi waktu dilaporkan. Kami menyarankan agar Anda membiarkan parameter ini diatur ketrue
agar Anda dapat memantau progresnya. Untuk contoh hasilnya, lihat Mentranspor basis data PostgreSQL ke tujuan dari sumber. pg_transport.work_mem
-
Jumlah maksimum memori untuk dialokasikan kepada setiap pekerja. Default-nya adalah 131072 kilobyte (KB) atau 262144 KB (256 MB), tergantung versi PostgreSQL. Nilai minimumnya adalah 64 megabyte (65536 KB). Nilai yang valid adalah kilobyte (KB) sebagai unit basis-2 biner, yaitu 1 KB = 1024 byte.
Transportasi mungkin menggunakan lebih sedikit memori dari yang ditentukan dalam parameter ini. Bahkan transportasi basis data besar biasanya membutuhkan kurang dari 256 MB (262144 KB) memori per pekerja.