Cara melakukan upgrade versi utama untuk RDS untuk PostgreSQL - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Cara melakukan upgrade versi utama untuk RDS untuk PostgreSQL

Kami merekomendasikan proses berikut saat melakukan peningkatan versi mayor pada basis data Amazon RDS for PostgreSQL:

  1. Siapkan grup parameter yang kompatibel dengan versi – Jika Anda menggunakan grup parameter kustom, Anda memiliki dua opsi. Anda dapat menentukan grup parameter default untuk versi mesin DB baru. Atau Anda dapat membuat grup parameter kustom Anda sendiri untuk versi mesin DB baru. Untuk informasi selengkapnya, lihat Grup parameter untuk RDS dan Menggunakan grup parameter klaster DB untuk klaster DB Multi-AZ.

  2. Periksa kelas basis data yang tidak didukung – Periksa apakah kelas instans basis data Anda kompatibel dengan versi PostgreSQL yang menjadi target peningkatan Anda. Untuk informasi selengkapnya, lihat Mesin DB yang didukung untuk kelas instans DB.

  3. Periksa penggunaan yang tidak didukung:

    • Transaksi yang disiapkan – Komit atau rollback semua transaksi terbuka yang disiapkan sebelum mencoba melakukan peningkatan.

      Anda dapat menggunakan kueri berikut untuk memverifikasi bahwa tidak ada transaksi terbuka yang disiapkan pada basis data Anda.

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • Jenis data reg* – Hapus semua penggunaan jenis data reg* sebelum mencoba peningkatan. Kecuali untuk regtype dan regclass, Anda tidak dapat meningkatkan jenis data reg*. Utilitas pg_upgrade tidak dapat mempersistensi jenis data ini, yang digunakan oleh Amazon RDS untuk melakukan peningkatan.

      Untuk memverifikasi bahwa jenis data reg* yang tidak didukung tidak digunakan, gunakan kueri berikut untuk setiap basis data.

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  4. Periksa database yang tidak valid:

    • Pastikan tidak ada database yang tidak valid. datconnlimitKolom dalam pg_database katalog mencakup nilai -2 untuk menandai database sebagai tidak valid yang terputus selama operasi. DROP DATABASE

      Gunakan kueri berikut untuk memeriksa database yang tidak valid:

      SELECT datname FROM pg_database WHERE datconnlimit = - 2;
    • Query sebelumnya mengembalikan nama database yang tidak valid. Anda dapat menggunakan DROP DATABASE invalid_db_name; untuk menjatuhkan database yang tidak valid. Anda juga dapat menggunakan perintah berikut untuk menjatuhkan database yang tidak valid:

      SELECT 'DROP DATABASE ' || quote_ident(datname) || ';' FROM pg_database WHERE datconnlimit = -2 \gexec

    Untuk informasi selengkapnya tentang database yang tidak valid, lihat Memahami perilaku autovacuum dengan database yang tidak valid.

  5. Tangani slot replikasi logis – Peningkatan tidak dapat terjadi jika basis data memiliki slot replikasi logis. Slot replikasi logis biasanya digunakan untuk migrasi AWS DMS dan untuk mereplikasi tabel dari basis data ke danau data, alat BI, dan target lainnya. Sebelum meningkatkan, pastikan Anda mengetahui tujuan dari setiap slot replikasi logis yang digunakan, dan konfirmasikan bahwa menghapusnya tidak akan jadi masalah. Jika slot replikasi logis masih digunakan, Anda tidak boleh menghapusnya, dan Anda tidak dapat melakukan peningkatan.

    Jika slot replikasi logis tidak diperlukan, Anda dapat menghapusnya menggunakan SQL berikut:

    SELECT * FROM pg_replication_slots WHERE slot_type NOT LIKE 'physical'; SELECT pg_drop_replication_slot(slot_name);

    Pengaturan replikasi logis yang menggunakan ekstensi pglogical juga harus dihapus beberapa slotnya agar peningkatan versi mayor berhasil dilakukan. Untuk informasi tentang cara mengidentifikasi dan menghapus slot yang dibuat menggunakan ekstensi pglogical, lihat Mengelola slot replikasi logis untuk untuk Postgre SQL.

  6. Tangani replika baca – Peningkatan instans DB AZ Tunggal atau deployment instans DB Multi-AZ juga akan meningkatkan replika baca dalam Wilayah bersama instans DB primer. Amazon RDS tidak meningkatkan replika baca klaster DB Multi-AZ.

    Anda tidak dapat meningkatkan replika baca secara terpisah. Jika Anda bisa, hal ini dapat menyebabkan situasi ketika basis data primer dan replika memiliki perbedaan versi mayor PostgreSQL. Namun, tingkatkan replika baca dapat menambah waktu henti pada instans DB primer. Untuk mencegah peningkatan replika, promosikan replika menjadi instans mandiri atau hapus replika tersebut sebelum memulai proses peningkatan.

    Proses peningkatan membuat ulang grup parameter replika baca berdasarkan grup parameter saat ini dari replika baca. Anda dapat menerapkan grup parameter kustom ke replika baca hanya setelah peningkatan selesai dengan memodifikasi replika baca. Untuk informasi selengkapnya tentang replika baca, lihat Menggunakan replika baca untuk Amazon RDS for PostgreSQL.

  7. Menangani integrasi nol-ETL — Jika Anda memiliki integrasi nol-ETL yang ada, hapus sebelum melakukan upgrade versi utama. Kemudian, setelah menyelesaikan peningkatan, buat ulang integrasi.

  8. Lakukan pencadangan – Kami sarankan Anda melakukan pencadangan sebelum melakukan peningkatan versi mayor sehingga Anda memiliki titik pemulihan yang diketahui untuk basis data Anda. Jika periode retensi cadangan Anda lebih besar dari 0, proses peningkatan akan membuat snapshot DB dari basis data Anda sebelum dan setelah peningkatan. Untuk mengubah periode retensi cadangan Anda, lihat Memodifikasi instans Amazon RDS DB dan Memodifikasi cluster DB Multi-AZ untuk Amazon RDS.

    Untuk melakukan pencadangan secara manual, lihat Membuat snapshot DB untuk instans DB AZ tunggal untuk Amazon RDS dan Membuat snapshot cluster DB multi-AZ untuk Amazon RDS.

  9. Tingkatkan ekstensi tertentu sebelum peningkatan versi mayor – Jika Anda berencana untuk melewati sebuah versi mayor dengan peningkatan, Anda perlu memperbarui ekstensi tertentu sebelum melakukan peningkatan versi mayor. Misalnya, sebuah versi mayor dilewati dalam peningkatan dari versi 9.5.x atau 9,6.x ke versi 11.x. Ekstensi yang perlu diperbarui mencakup PostGIS dan ekstensi terkait untuk memproses data spasial.

    • address_standardizer

    • address_standardizer_data_us

    • postgis_raster

    • postgis_tiger_geocoder

    • postgis_topology

    Anda tidak dapat langsung meningkatkan ke PostgreSQL versi 17 jika Anda rdkit menggunakan versi 4.6.0 dan yang lebih rendah, dan PostgreSQL versi 16 dan lebih rendah, karena ketidakcocokan. rdkit Di bawah ini adalah opsi peningkatan:

    • Jika Anda menggunakan PostgreSQL versi 13 dan lebih rendah, Anda perlu melakukan upgrade versi utama ke versi 14.14 dan versi 14 yang lebih tinggi, 15.9 dan versi 15 yang lebih tinggi, atau 16.5 dan versi 16 yang lebih tinggi terlebih dahulu, dan kemudian melakukan upgrade versi ke PostgreSQL 17.

    • Jika Anda menggunakan PostgreSQL versi 14, 15, atau 16, Anda perlu melakukan upgrade versi minor ke 14.14 dan versi 14 yang lebih tinggi, 15.9 dan versi 15 yang lebih tinggi, atau 16.5 dan versi 16 yang lebih tinggi, dan kemudian upgrade ke PostgreSQL versi 17.

    Jalankan perintah berikut untuk setiap ekstensi yang Anda gunakan:

    ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

    Untuk informasi selengkapnya, lihat Meningkatkan SQL ekstensi Postgre untuk database Postgre RDS SQL. Untuk mempelajari selengkapnya tentang peningkatan PostGIS, lihat Langkah 6: Tingkatkan GIS ekstensi Post.

  10. Hapus ekstensi tertentu sebelum peningkatan versi mayor – Peningkatan yang melewati versi mayor ke versi 11.x tidak mendukung pembaruan ekstensi pgRouting. Sebuah versi mayor dilewati dalam peningkatan dari versi 9.4.x, 9,5.x, atau 9,6.x ke versi 11.x. Aman untuk menghapus ekstensi pgRouting lalu menginstalnya kembali ke versi yang kompatibel setelah peningkatan. Untuk versi ekstensi yang dapat Anda perbarui, lihat Versi ekstensi Postgre SQL yang didukung.

    Ekstensi tsearch2 dan chkpass tidak lagi didukung untuk PostgreSQL versi 11 atau yang lebih baru. Jika Anda meningkatkan ke versi 11.x, hapus ekstensi tsearch2 dan chkpass sebelum peningkatan.

  11. Hapus jenis data yang tidak diketahui – Hapus jenis data unknown tergantung pada versi target.

    PostgreSQL versi 10 berhenti mendukung jenis data unknown. Jika basis data versi 9.6 menggunakan jenis data unknown, tingkatkan ke versi 10 akan menunjukkan pesan kesalahan seperti berikut ini:

    Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because the 'unknown' data type is used in user tables. Please remove all usages of the 'unknown' data type and try again."

    Untuk menemukan jenis data unknown di basis data Anda sehingga Anda dapat menghapus kolom yang melanggar atau mengubahnya ke jenis data yang didukung, gunakan SQL berikut:

    SELECT DISTINCT data_type FROM information_schema.columns WHERE data_type ILIKE 'unknown';
  12. Lakukan percobaan peningkatan – Kami sangat menyarankan Anda untuk menguji peningkatan versi mayor pada duplikat basis data produksi Anda sebelum mencoba peningkatan pada basis data produksi Anda. Anda dapat memantau rencana eksekusi pada basis data uji duplikat untuk setiap kemungkinan regresi rencana eksekusi dan untuk mengevaluasi performanya. Untuk membuat contoh pengujian duplikat, Anda dapat memulihkan database Anda dari snapshot terbaru atau melakukan point-in-time pemulihan database Anda ke waktu restorable terbaru.

    Untuk informasi selengkapnya, lihat Memulihkan dari snapshot atau Memulihkan instans DB ke waktu yang ditentukan untuk Amazon RDS. Untuk klaster DB Multi-AZ, lihat Memulihkan dari snapshot ke klaster DB Multi-AZ atau Memulihkan klaster DB Multi-AZ ke waktu tertentu.

    Untuk detail tentang melakukan peningkatan, lihat Meningkatkan versi mesin secara manual.

    Dalam meningkatkan basis data versi 9.6 ke versi 10, ketahuilah bahwa PostgreSQL 10 mengaktifkan kueri paralel secara default. Anda dapat menguji dampak paralelisme sebelum peningkatan dengan mengubah parameter max_parallel_workers_per_gather pada basis data uji Anda menjadi 2.

    catatan

    Nilai default untuk parameter max_parallel_workers_per_gather dalam grup parameter DB default.postgresql10 adalah 2.

    Untuk informasi selengkapnya, lihat Parallel Query dalam dokumentasi PostgreSQL. Untuk menonaktifkan paralelisme pada versi 10, atur parameter max_parallel_workers_per_gather ke 0.

    Selama peningkatan versi mayor, basis data public dan template1 serta skema public di setiap basis data akan diubah namanya untuk sementara. Objek-objek ini muncul dalam log menggunakan nama aslinya dan string acak. String ditambahkan sehingga pengaturan kustom seperti locale dan owner dipertahankan selama peningkatan versi mayor. Setelah peningkatan selesai, objek diubah namanya kembali ke nama aslinya.

    catatan

    Selama proses pemutakhiran versi utama, Anda tidak dapat melakukan point-in-time pemulihan instans DB atau cluster DB multi-AZ Anda. Setelah melakukan peningkatan, Amazon RDS akan membuat cadangan otomatis dari basis data. Anda dapat melakukan point-in-time pemulihan ke waktu sebelum pemutakhiran dimulai dan setelah pencadangan otomatis database Anda selesai.

  13. Jika peningkatan gagal karena kesalahan prosedur pra-pemeriksaan, atasi masalah tersebut – Selama proses peningkatan versi mayor, Amazon RDS for PostgreSQL pertama-tama menjalankan prosedur pra-pemeriksaan untuk mengidentifikasi masalah yang mungkin menyebabkan peningkatan gagal. Prosedur pra-pemeriksaan akan memeriksa semua kemungkinan kondisi yang tidak kompatibel di seluruh basis data dalam instans.

    Jika pra-pemeriksaan menemui masalah, proses ini akan membuat peristiwa log yang menunjukkan bahwa pra-pemeriksaan peningkatan gagal. Detail proses pra-pemeriksaan ada dalam log peningkatan yang bernama pg_upgrade_precheck.log untuk semua basis data yang berasal dari sebuah basis data tertentu. Amazon RDS menambahkan stempel waktu ke nama file. Untuk informasi selengkapnya tentang melihat log, lihat Memantau file RDS Amazon.

    Jika peningkatan replika baca gagal pada saat pra-pemeriksaan, replikasi pada replika baca yang gagal rusak dan replika baca diberi status diakhiri. Hapus replika baca ini dan buat ulang replika baca baru berdasarkan instans DB primer yang ditingkatkan.

    Selesaikan semua masalah yang teridentifikasi dalam log pra-pemeriksaan lalu coba lagi peningkatan versi mayor. Berikut ini adalah contoh log pra-pemeriksaan.

    ------------------------------------------------------------------------ Upgrade could not be run on Wed Apr 4 18:30:52 2018 ------------------------------------------------------------------------- The instance could not be upgraded from 9.6.11 to 10.6 for the following reasons. Please take appropriate action on databases that have usage incompatible with the requested major engine version upgrade and try the upgrade again. * There are uncommitted prepared transactions. Please commit or rollback all prepared transactions.* One or more role names start with 'pg_'. Rename all role names that start with 'pg_'. * The following issues in the database 'my"million$"db' need to be corrected before upgrading:** The ["line","reg*"] data types are used in user tables. Remove all usage of these data types. ** The database name contains characters that are not supported by RDS for PostgreSQL. Rename the database. ** The database has extensions installed that are not supported on the target database version. Drop the following extensions from your database: ["tsearch2"]. * The following issues in the database 'mydb' need to be corrected before upgrading:** The database has views or materialized views that depend on 'pg_stat_activity'. Drop the views.
  14. Jika peningkatan replika baca gagal saat meningkatkan basis data, atasi masalah tersebut – Replika baca gagal diubah ke status incompatible-restore dan replikasi diakhiri pada basis data. Hapus replika baca ini dan buat ulang replika baca baru berdasarkan instans DB primer yang ditingkatkan.

    catatan

    Amazon RDS tidak meningkatkan replika baca untuk klaster DB Multi-AZ. Jika Anda melakukan peningkatan versi mayor klaster DB Multi-AZ, maka status replikasi replika bacanya berubah menjadi diakhiri.

    Peningkatan replika baca dapat gagal karena alasan berikut:

    • Replika baca tidak dapat mengimbangi instans primer bahkan setelah waktu tunggu.

    • Replika baca berada dalam status siklus hidup akhir atau tidak kompatibel seperti penyimpanan penuh, pemulihan yang tidak kompatibel, dan seterusnya.

    • Saat peningkatan instans DB primer dimulai, terdapat peningkatan versi minor terpisah yang berjalan pada replika baca.

    • Replika baca menggunakan parameter yang tidak kompatibel.

    • Replika baca tidak dapat berkomunikasi dengan instans DB primer untuk menyinkronkan folder data.

  15. Tingkatkan basis data produksi Anda – Ketika percobaan peningkatan versi mayor yang dijalankan berhasil, Anda dapat meningkatkan basis data produksi Anda dengan percaya diri. Untuk informasi selengkapnya, lihat Meningkatkan versi mesin secara manual.

  16. Jalankan operasi ANALYZE untuk menyegarkan tabel pg_statistic. Anda harus melakukannya untuk setiap basis data pada semua basis data PostgreSQL Anda. Statistik pengoptimisasi tidak ditransfer selama peningkatan versi mayor, jadi Anda perlu membuat ulang semua statistik untuk menghindari masalah performa. Jalankan perintah tanpa parameter apa pun untuk menghasilkan statistik untuk semua tabel reguler dalam basis data saat ini, sebagai berikut:

    ANALYZE VERBOSE;

    Bendera VERBOSE bersifat opsional, tetapi kemajuannya akan ditampilkan jika digunakan. Untuk informasi selengkapnya, lihat ANALYZE di dokumentasi PostgreSQL.

    Saat menganalisis tabel tertentu alih-alih menggunakan ANALYZE VERBOSE, jalankan perintah ANALYZE untuk setiap tabel sebagai berikut:

    ANALYZE table_name;

    Untuk tabel yang dipartisi, selalu analisis tabel induk. Proses ini:

    • Secara otomatis sampel baris di semua partisi

    • Memperbarui statistik untuk setiap partisi secara rekursif

    • Mempertahankan statistik perencanaan penting di tingkat induk

    Sementara tabel induk tidak menyimpan data aktual, menganalisisnya sangat penting untuk optimasi kueri. Menjalankan ANALYZE hanya pada partisi individual dapat menyebabkan kinerja kueri yang buruk karena pengoptimal tidak akan memiliki statistik komprehensif yang diperlukan untuk perencanaan lintas partisi yang efisien.

    catatan

    Jalankan ANALYZE pada sistem Anda setelah peningkatan untuk menghindari masalah performa.

Setelah peningkatan versi mayor selesai, kami menyarankan hal berikut:

  • Peningkatan mesin PostgreSQL tidak meningkatkan ekstensi PostgreSQL apa pun. Untuk meningkatkan ekstensi, lihat Meningkatkan SQL ekstensi Postgre untuk database Postgre RDS SQL.

  • Atau, gunakan Amazon RDS untuk melihat dua log yang dihasilkan oleh utilitas pg_upgrade. Log tersebut adalah pg_upgrade_internal.log dan pg_upgrade_server.log. Amazon RDS menambahkan stempel waktu ke nama file untuk log ini. Anda dapat melihat log ini sebagaimana Anda dapat melihat log lainnya. Untuk informasi selengkapnya, lihat Memantau file RDS Amazon.

    Anda juga dapat mengunggah log pemutakhiran ke Amazon CloudWatch Logs. Untuk informasi selengkapnya, lihat Menerbitkan log PostgreSQL ke Amazon Logs CloudWatch .

  • Untuk memverifikasi bahwa segalanya berfungsi seperti yang diharapkan, uji aplikasi Anda pada basis data yang ditingkatkan dengan beban kerja serupa. Setelah peningkatan diverifikasi, Anda dapat menghapus instans uji ini.