全部产品
Search
文档中心

ApsaraDB RDS:Pengenalan laporan penilaian migrasi cloud

更新时间:Jul 06, 2025

Topik ini menjelaskan laporan penilaian migrasi cloud dari instance PostgreSQL yang dikelola sendiri ke instance ApsaraDB RDS for PostgreSQL. Topik ini juga mencakup kesalahan umum dalam laporan dan solusi untuk mengatasinya.

Periksa rds kosong (Periksa apakah database dalam instance ApsaraDB RDS for PostgreSQL kosong)

Check item:

Periksa database rds

Common error:

error:postgres tidak kosong, periksa apakah ada tabel yang ada

Description:

Database telah dibuat dalam instance ApsaraDB RDS for PostgreSQL, dan database tersebut berisi data.

Solution:

Hapus semua database kecuali database template0, template1, dan postgres dari instance ApsaraDB RDS for PostgreSQL. Selain itu, hapus semua tabel kecuali tabel ha_health_check dari database postgres.

Periksa konektivitas sumber (Periksa apakah komunikasi antara instance PostgreSQL yang dikelola sendiri dan instance ApsaraDB RDS for PostgreSQL normal)

  • Check item 1:

    Periksa ip dapat dihubungi

    Common error:

    error:XX.XX.XX.XX tidak dapat dijangkau

    Description:

    Alamat IP server tempat instance PostgreSQL yang dikelola sendiri berada atau alamat IP server DNS tidak dapat diakses.

    Solution:

    • Jika instance PostgreSQL yang dikelola sendiri berada pada instance Elastic Compute Service (ECS), masukkan private IP address instance ECS saat Anda mengonfigurasi informasi database sumber. Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP privat instance ECS, lihat Lihat alamat IP.

    • Jika instance PostgreSQL yang dikelola sendiri berada di pusat data, masukkan alamat IP server DNS host tempat instance PostgreSQL yang dikelola sendiri berada saat Anda mengonfigurasi informasi database sumber.

  • Check item 2:

    Periksa port dapat dihubungi

    Common error:

    error:5432 tidak dapat dijangkau

    Description:

    • Instance PostgreSQL yang dikelola sendiri tidak dikonfigurasi untuk mendengarkan koneksi jarak jauh.

    • Firewall yang dikonfigurasi untuk instance PostgreSQL yang dikelola sendiri tidak mengizinkan akses ke port instance PostgreSQL yang dikelola sendiri.

    Solution:

  • Check item 3:

    Periksa database dapat dihubungkan

    Common error:

    error:tidak dapat terhubung ke database sumber oleh migratetest:123456

    Description:

    • Kata sandi yang Anda masukkan salah.

    • Konfigurasi dalam file pg_hba.conf instance PostgreSQL yang dikelola sendiri salah.

    Solution:

    • Periksa apakah Anda dapat terhubung ke instance PostgreSQL yang dikelola sendiri menggunakan nama pengguna dan kata sandi yang Anda masukkan. Jika koneksi gagal, Anda dapat memperbarui kata sandi. Misalnya, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memperbarui kata sandi akun migratetest:

      ALTER USER migratetest WITH PASSWORD '123456';
    • Ubah file pg_hba.conf instance PostgreSQL yang dikelola sendiri. Misalnya, jika Anda menggunakan akun migratetest, tambahkan konten berikut ke file:

      host  all       migratetest  <Blok CIDR VPC tempat instance ApsaraDB RDS for PostgreSQL berada>  md5
      Catatan

      Untuk informasi lebih lanjut, lihat Perbarui file pg_hba.conf.

  • Check item 4:

    Periksa hak replikasi akun

    Common error:

    error:migratetest tidak memiliki hak replikasi

    Description:

    • Akun yang Anda gunakan tidak memiliki izin REPLICATION.

    • Konfigurasi dalam file pg_hba.conf instance PostgreSQL yang dikelola sendiri salah.

    Solution:

    • Berikan izin REPLICATION kepada akun yang Anda gunakan. Misalnya, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memberikan izin REPLICATION kepada akun migratetest:

      ALTER ROLE migratetest REPLICATION;
    • Ubah file pg_hba.conf instance PostgreSQL yang dikelola sendiri. Misalnya, jika Anda menggunakan akun migratetest, tambahkan konten berikut ke file:

      host  replication  migratetest  <Blok CIDR VPC tempat instance ApsaraDB RDS for PostgreSQL berada>  md5
      Catatan

      Untuk informasi lebih lanjut, lihat Perbarui file pg_hba.conf.

  • Check item 5:

    Periksa hak createrole akun

    Common error:

    error:migratetest tidak memiliki hak createrole

    Description:

    Akun yang Anda gunakan tidak memiliki izin CREATEROLE.

    Solution:

    Berikan izin CREATEROLE kepada akun yang Anda gunakan. Misalnya, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memberikan izin CREATEROLE kepada akun migratetest:

    ALTER ROLE migratetest CREATEROLE;
  • Check item 6:

    Periksa hak monitor akun

    Common error:

    error:migratetest harus menjadi anggota pg_monitor untuk memantau status replikasi

    Description:

    Akun yang Anda gunakan tidak memiliki izin pg_monitor. Izin pg_monitor digunakan untuk menanyakan tampilan sistem seperti pg_stat_replication dan pg_stat_wal_receiver serta mendapatkan informasi tentang tautan replikasi.

    Catatan

    Izin pg_monitor digunakan untuk menanyakan tampilan sistem seperti pg_stat_replication dan pg_stat_wal_receiver, serta mendapatkan informasi tentang tautan replikasi.

    Solution:

    Berikan izin pg_monitor kepada akun yang Anda gunakan. Sebagai contoh, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memberikan izin pg_monitor kepada akun tersebut:

    GRANT pg_monitor TO migratetest;

Periksa versi sumber (Periksa versi mesin utama instance PostgreSQL yang dikelola sendiri)

Check item:

Periksa konsistensi versi utama.

Common error:

error:versi tidak cocok, versi sumber:10, versi saat ini:13.0

Description:

Instance PostgreSQL yang dikelola sendiri dan instance ApsaraDB RDS for PostgreSQL menjalankan versi mesin utama yang berbeda.

Solution:

Beli instance ApsaraDB RDS for PostgreSQL dengan versi mesin utama yang sama seperti instance PostgreSQL yang dikelola sendiri.

Periksa versi glibc sumber (Periksa versi GNU C Library instance PostgreSQL yang dikelola sendiri)

Check item:

Periksa versi glibc sumber kompatibel

Common error:

warning:versi glibc sumber tidak kompatibel dengan rds pg

Description:

Versi GNU C Library pada instance PostgreSQL yang dikelola sendiri tidak kompatibel dengan versi GNU C Library pada instance ApsaraDB RDS for PostgreSQL.

Catatan

GNU C Library versi 2.28 menggunakan beberapa collation berbeda untuk mengurutkan set karakter dalam pengkodean UTF-8. Jika versi GNU C Library pada instance PostgreSQL yang dikelola sendiri tidak kompatibel dengan versi GNU C Library pada instance ApsaraDB RDS for PostgreSQL, set karakter dalam instance ApsaraDB RDS for PostgreSQL mungkin berada dalam urutan yang tidak terduga setelah migrasi cloud.

Solution:

Ikuti langkah-langkah berikut:

  1. Periksa collation tabel.

    begin;
    create temp table testcollation(id varchar(20) collate "en_US.utf8") on commit drop;
    insert into testcollation values('-1'),('1');
    select id='1' from testcollation order by id limit 1;
    rollback;

    Hasil berikut dapat diperoleh:

    • Jika nilai true dikembalikan, tidak ada tindakan lebih lanjut yang diperlukan. Migrasi cloud tidak memiliki risiko.

    • Jika nilai false dikembalikan, lanjutkan ke langkah berikutnya.

  2. Periksa collation database.

    SELECT datname,datcollate FROM pg_database where datcollate NOT IN ('C', 'POSIX');

    Hasil berikut dapat diperoleh:

    • Jika tidak ada hasil yang dikembalikan, tidak ada tindakan lebih lanjut yang diperlukan. Migrasi cloud tidak memiliki risiko.

    • Jika hasil dikembalikan, lanjutkan ke langkah berikutnya.

  3. Periksa semua database untuk menemukan indeks dengan collation selain C atau POSIX.

    WITH result AS (
        WITH defcoll AS (
            SELECT datcollate AS coll
            FROM pg_database
            WHERE datname = current_database()
        )
        SELECT indrelid::regclass::text relname, indexrelid::regclass::text indexname,
            CASE WHEN c.collname = 'default'
                THEN defcoll.coll
                ELSE c.collname
            END AS collation
        FROM (SELECT indexrelid, indrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s
            JOIN pg_collation c ON coll=c.oid
            CROSS JOIN defcoll
        WHERE collprovider IN ('d', 'c') AND collname NOT IN ('C', 'POSIX')
    )
    SELECT result.relname, result.indexname, result.collation FROM result WHERE result.collation NOT IN ('C', 'POSIX');

    Hasil berikut dapat diperoleh:

    • Jika tidak ada hasil yang dikembalikan, tidak ada tindakan lebih lanjut yang diperlukan. Migrasi cloud tidak memiliki risiko.

    • Jika hasil dikembalikan, migrasi cloud memiliki risiko.

Periksa ukuran disk (Periksa apakah penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL mencukupi)

Check item:

Memeriksa apakah ukuran disk mencukupi

Common error:

error:source_db_size > disk_size * 0.95

Description:

Penyimpanan yang digunakan oleh instance PostgreSQL yang dikelola sendiri lebih besar dari 95% penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL. Hal ini menunjukkan bahwa penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL tidak memadai.

Solution:

  1. Jalankan perintah berikut untuk melihat penyimpanan yang digunakan oleh instance PostgreSQL yang dikelola sendiri:

    SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database;
    Catatan

    Penyimpanan yang digunakan yang dikembalikan diukur dalam satuan MB.

  2. Hitung penyimpanan yang tersedia yang harus disediakan oleh instance ApsaraDB RDS for PostgreSQL untuk memastikan migrasi cloud berhasil.

    Sebagai contoh, jika penyimpanan yang digunakan oleh instance PostgreSQL yang dikelola sendiri adalah 100 GB, penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL harus setidaknya 110 GB.

  3. Ubah spesifikasi instance ApsaraDB RDS for PostgreSQL untuk memperluas kapasitas penyimpanan. Untuk informasi lebih lanjut, lihat Ubah Spesifikasi Instance.

Periksa ukuran wal keep (Periksa nilai parameter wal_keep_size)

Check item:

Periksa apakah ukuran wal keep cukup besar.

Common error:

warning:wal_keep_size X MB terlalu kecil. Cobalah atur wal_keep_segments atau wal_keep_size cukup besar untuk memastikan keberhasilan pg_basebackup

Description:

Nilai parameter wal_keep_size atau wal_keep_segments terlalu kecil.

Solution:

  • Jika instance PostgreSQL yang dikelola sendiri menjalankan PostgreSQL 13 atau versi lebih baru, tingkatkan nilai parameter wal_keep_size untuk instance ApsaraDB RDS for PostgreSQL. Dengan demikian, Anda dapat meningkatkan tingkat keberhasilan cadangan penuh dan cadangan inkremental selama migrasi cloud.

  • Jika instance PostgreSQL yang dikelola sendiri menjalankan versi lebih awal dari PostgreSQL 13, tingkatkan nilai parameter wal_keep_segments untuk instance ApsaraDB RDS for PostgreSQL. Dengan demikian, Anda dapat meningkatkan tingkat keberhasilan cadangan penuh dan cadangan inkremental selama migrasi cloud.

    Catatan

    Jika Anda menggunakan versi PostgreSQL yang lebih awal dari PostgreSQL 13, nilai parameter wal_keep_size sama dengan nilai parameter wal_keep_segments dikalikan dengan nilai parameter wal_segment_size.

Periksa parameter spesifikasi (Periksa pengaturan parameter terkait spesifikasi)

Check item:

Periksa apakah parameter spesifikasi terlalu besar.

Common error:

error:max_connections terlalu besar, value=XXX
error:max_prepared_transactions terlalu besar, value=XXX

Description:

Nilai parameter max_connections dan max_prepared_transactions untuk instance PostgreSQL yang dikelola sendiri lebih besar dari 100 kali nilai parameter ini pada instance ApsaraDB RDS for PostgreSQL. Dalam situasi ini, instance ApsaraDB RDS for PostgreSQL mungkin gagal memulai selama pembentukan tautan replikasi.

Solution:

Kurangi nilai parameter max_connections dan max_prepared_transactions untuk instance PostgreSQL yang dikelola sendiri.

Catatan

Setelah mengonfigurasi ulang parameter max_connections dan max_prepared_transactions untuk instance PostgreSQL yang dikelola sendiri, Anda harus memulai ulang instance tersebut.

Periksa pengguna rds (Periksa apakah akun sistem instance ApsaraDB RDS for PostgreSQL digunakan dalam instance PostgreSQL yang dikelola sendiri)

Check item:

Periksa apakah pengguna sistem RDS digunakan.

Common error:

warning:Periksa apakah pengguna sistem rds digunakan ...XXX akan digunakan kembali di rds

Description:

Akun sistem aurora, replicator, dan pgxxx dari instance ApsaraDB RDS for PostgreSQL digunakan dalam instance PostgreSQL yang dikelola sendiri.

Solution:

Pastikan Anda tidak menggunakan akun-akun tersebut dalam instance PostgreSQL yang dikelola sendiri.

Periksa ekstensi (Periksa kompatibilitas plugin)

  • Check item 1:

    Periksa ekstensi yang didukung sumber.

    Common error:

    error:Periksa ekstensi yang didukung sumber XXX tidak didukung

    Description:

    Plugin instance ApsaraDB RDS for PostgreSQL tidak kompatibel dengan plugin instance PostgreSQL yang dikelola sendiri.

    Solution:

    Hapus plugin yang tidak kompatibel dari instance PostgreSQL yang dikelola sendiri.

  • Check item 2:

    Periksa ekstensi sumber dengan versi lebih tinggi.

    Common error:

    error:Periksa ekstensi sumber dengan versi lebih tinggi XXX

    Description:

    Versi plugin tertentu dalam instance PostgreSQL yang dikelola sendiri lebih baru daripada versi plugin ini dalam instance ApsaraDB RDS for PostgreSQL.

    Solution:

    Instal ulang plugin ini dalam instance PostgreSQL yang dikelola sendiri dan pastikan bahwa versi plugin dalam instance PostgreSQL yang dikelola sendiri sama dengan versi plugin dalam instance ApsaraDB RDS for PostgreSQL.

  • Check item 3:

    Periksa ekstensi sumber dengan versi lebih rendah.

    Common error:

    warning:Periksa ekstensi sumber dengan versi lebih rendah XXX

    Description:

    Versi plugin tertentu dalam instance PostgreSQL yang dikelola sendiri lebih lama daripada versi plugin ini dalam instance ApsaraDB RDS for PostgreSQL.

    Solution:

    Tidak diperlukan tindakan. Versi plugin akan diperbarui secara otomatis setelah migrasi cloud.

Periksa katalog sistem Postgres (Periksa katalog sistem instance ApsaraDB for PostgreSQL)

  • Item Pemeriksaan 1:

    Periksa apakah instance sumber menggunakan bahasa (pg_language) yang tidak didukung oleh instance tujuan.

    Kesalahan Umum:

    error: bahasa yang tidak diizinkan ada di database [xxx, xxx], bahasa yang diizinkan adalah [c, internal, sql, plpgsql, pltcl, plperl].

    Deskripsi:

    Instance ApsaraDB RDS for PostgreSQL hanya mendukung bahasa berikut: C, internal, SQL, PL/pgSQL, PL/Tcl, dan PL/Perl. Bahasa yang tidak didukung yang digunakan dalam instance sumber tidak dapat digunakan dalam instance tujuan.

    Solusi:

    Hapus bahasa yang tidak didukung oleh instance tujuan dari instance sumber.

  • Item Pemeriksaan 2:

    Periksa apakah instance sumber berisi objek besar.

    Kesalahan Umum:

    error: objek besar ada di database [xxx, xxx].

    Deskripsi:

    Instance ApsaraDB RDS for PostgreSQL tidak mendukung objek besar. Oleh karena itu, objek besar dalam instance sumber tidak dapat digunakan dalam instance tujuan.

    Solusi:

    Hapus objek besar dalam instance sumber.

  • Item Pemeriksaan 3:

    Periksa apakah izin default diberikan ke instance sumber dengan menjalankan pernyataan ALTER DEFAULT PRIVILEGES ... GRANT .... Pemeriksaan ini dilakukan dengan memastikan apakah instance sumber berisi database yang tabel sistem pg_catalog.pg_default_acl tidak kosong.

    Kesalahan Umum:

    error: pengaturan acl default ada di database [xxx, xxx].

    Deskripsi:

    Jika pernyataan ALTER DEFAULT PRIVILEGES ... GRANT ... telah dijalankan pada database instance sumber, tabel sistem pg_catalog.pg_default_acl dari database tersebut tidak kosong.

    Solusi:

    Jalankan pernyataan ALTER DEFAULT PRIVILEGES ... REVOKE ... pada semua database instance sumber untuk memastikan bahwa tabel sistem pg_catalog.pg_default_acl dari semua database kosong. Setelah migrasi selesai, jalankan pernyataan ALTER DEFAULT PRIVILEGES ... GRANT ... pada database untuk mengembalikan izin default.

  • Item Pemeriksaan 4:

    Periksa apakah tabel sistem (pg_parameter_acl dan pg_db_role_setting) tidak kosong.

    Kesalahan Umum:

    warning: Tabel sistem tidak valid: [pg_parameter_acl, pg_db_role_setting], tabel sistem ini harus kosong.

    Deskripsi:

    Tabel sistem pg_parameter_acl mencatat izin akses pengguna pada parameter kernel. ApsaraDB RDS for PostgreSQL tidak mendukung modifikasi parameter ini. Tabel sistem pg_db_role_setting mencatat izin default pengguna pada database yang berbeda.

    Solusi:

    1. Jalankan pernyataan berikut dalam instance sumber untuk menghapus data dalam tabel pg_parameter_acl dan pg_db_role_setting:

      DELETE FROM pg_parameter_acl;
      DELETE FROM pg_db_role_setting;
    2. Setelah penyebaran DR selesai, konfigurasikan izin default pengguna pada database yang berbeda dalam instance tujuan.

Periksa izin peran yang disimpan (Periksa izin peran yang disimpan)

Item Pemeriksaan:

Periksa apakah izin peran yang disimpan, yang tidak diizinkan oleh instance tujuan, diberikan kepada akun dalam instance sumber.

Kesalahan Umum:

error: beberapa peran yang disimpan tidak diizinkan [pg_write_server_files] diberikan kepada pengguna. Anda harus mencabut peran ini dari anggotanya

Deskripsi:

Dalam ApsaraDB RDS for PostgreSQL, akun tidak diizinkan untuk diberikan izin peran yang disimpan seperti pg_write_server_files. Jika pernyataan seperti GRANT pg_write_server_files TO "user"; dijalankan untuk memberikan izin dalam instance sumber, Anda harus menjalankan pernyataan REVOKE untuk mencabut izin tersebut.

Solusi:

Jalankan pernyataan REVOKE untuk mencabut izin yang diberikan kepada akun dalam instance sumber. Contoh: REVOKE pg_write_server_files FROM "user";