All Products
Search
Document Center

AnalyticDB:Perbandingan kompatibilitas antara AnalyticDB for PostgreSQL V4.3 dan V6.0

Last Updated:Mar 29, 2026

Dokumen ini mencakup perubahan yang menghentikan kompatibilitas (breaking changes) serta perbedaan perilaku antara AnalyticDB for PostgreSQL V4.3 dan V6.0. Sebelum melakukan upgrade, tinjau setiap bagian untuk menilai dampaknya dan terapkan perbaikan yang diperlukan.

Daftar periksa sebelum upgrade

Tinjau item berikut sebelum melakukan upgrade. Setiap item mencakup tautan ke bagian terkait untuk informasi detail dan langkah pemulihan.

  • Pengoptimal kueri — Pengoptimal default berubah dari Legacy menjadi ORCA. Uji kueri Anda.

  • Karakter escape — Backslash dalam string tidak lagi berfungsi sebagai karakter escape.

  • Konversi tipe data — V6.0 tidak lagi melakukan konversi implisit tipe numerik ke TEXT. Tulis ulang kueri SQL yang terdampak.

  • Log error tabel eksternal — Klausul INTO error_table telah dihapus. Beralihlah ke fungsi bawaan.

  • Tipe data — Lima tipe data tidak dapat lagi digunakan sebagai kunci distribusi.

  • Kata kunci — Beberapa kata kunci telah mengalami perubahan kategori. Periksa potensi konflik dengan nama objek.

  • Tabel sistem — Enam kolom pada tabel sistem telah diubah namanya atau dihapus. Perbarui kode yang mereferensikannya.

  • [ ] Parameter fungsi bawaanint4_avg_accum dan string_agg mengalami perubahan signature.

Query optimizers

ItemV4.3V6.0
Pengoptimal kueri defaultLegacyORCA

Kedua versi mendukung pengoptimal kueri Legacy dan ORCA. Pengoptimal default berubah dari Legacy ke ORCA mulai V6.0. Untuk informasi selengkapnya tentang pemilihan pengoptimal, lihat Choose a query optimizer.

Tindakan: Uji beban kerja Anda dengan pengoptimal ORCA sebelum melakukan upgrade. Jika mengalami masalah, kembalikan ke Legacy pada tingkat sesi.

Karakter escape

Di V6.0, backslash (\) dalam string diperlakukan sebagai karakter literal, bukan sebagai karakter escape (standard_conforming_strings = on secara default).

Untuk mengaktifkan kembali escaping backslash pada tingkat sesi:

SET standard_conforming_strings = off;
Pengaturan ini hanya berlaku untuk sesi saat ini. Untuk mengonfigurasinya di tingkat instans, ajukan tiket untuk meminta dukungan.

Tindakan: Audit kode SQL Anda untuk mengidentifikasi urutan escape backslash dan perbarui agar menggunakan escape standar SQL (misalnya, '' untuk tanda kutip tunggal literal).

Konversi tipe data

Versi 6.0 menghapus dua konversi implisit yang didukung oleh Versi 4.3:

1. String YYYYMMDDHH24MISS tidak lagi dikonversi otomatis ke tipe timestamp.

Gunakan fungsi to_timestamp atau to_char secara eksplisit:

-- Mengonversi string YYYYMMDDHH24MISS menjadi timestamp
SELECT to_timestamp('20240101123045', 'YYYYMMDDHH24MISS');

2. Tipe numerik tidak lagi dikonversi implisit ke TEXT.

Tambahkan fungsi pembungkus (wrapper functions) untuk memulihkan kompatibilitas pada pernyataan SQL yang terdampak:

CREATE OR REPLACE FUNCTION substr(numeric, integer, integer) RETURNS text AS $$
  SELECT substr($1::text, $2, $3);
$$ LANGUAGE sql IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION pg_catalog.btrim(str numeric) RETURNS text AS $$
  RETURN $_[0];
$$ LANGUAGE plperl IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION to_date(timestamp, text) RETURNS date AS $$
  SELECT to_date($1::text, $2);
$$ LANGUAGE sql IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION to_date(integer, text) RETURNS date AS $$
  SELECT to_date($1::text, $2);
$$ LANGUAGE sql IMMUTABLE STRICT;

Tindakan: Identifikasi pernyataan SQL dan fungsi yang bergantung pada konversi implisit dari tipe numerik ke TEXT. Tambahkan fungsi pembungkus tersebut atau tulis ulang kueri SQL agar menggunakan cast eksplisit (value::text).

Log error tabel eksternal

Klausul INTO error_table telah dihapus dari pernyataan CREATE EXTERNAL TABLE dan COPY mulai versi V6.0.

Sebagai gantinya, gunakan fungsi bawaan berikut:

-- Membaca log error untuk tabel eksternal
SELECT * FROM gp_read_error_log('<external_table_name>');

-- Mengosongkan log error untuk tabel eksternal
SELECT gp_truncate_error_log('<external_table_name>');

Tindakan: Hapus INTO error_table dari semua pernyataan CREATE EXTERNAL TABLE dan COPY. Perbarui logika penanganan error untuk menggunakan gp_read_error_log dan gp_truncate_error_log.

Tipe data

Dua perubahan pada tingkat penyimpanan memengaruhi ruang disk setelah upgrade:

  • Format penyimpanan NUMERIC berubah, yang memengaruhi ruang disk untuk kolom bertipe tersebut.

  • Tipe data MONEY berubah dari 32-bit menjadi 64-bit, yang juga memengaruhi ruang disk.

Selain itu, tipe data berikut tidak dapat lagi digunakan sebagai kunci distribusi di V6.0:

  • abstime

  • reltime

  • tinterval

  • money

  • anyarray

Tindakan: Jika ada tabel yang menggunakan salah satu tipe ini sebagai kunci distribusinya, definisikan ulang kunci distribusi tersebut sebelum upgrade. Untuk kolom NUMERIC dan MONEY, pertimbangkan peningkatan kebutuhan ruang disk setelah upgrade.

Kata kunci

V6.0 mengubah kategori beberapa kata kunci. Nama objek (tabel, view, fungsi, indeks, kolom, tipe) yang sesuai dengan kata kunci yang kini dicadangkan akan menyebabkan error.

Untuk melihat semua kata kunci beserta kategorinya pada instans Anda saat ini:

SELECT * FROM pg_get_keywords();

Kode kategori kata kunci

KodeKategoriBoleh digunakan sebagai nama objek
UUnreservedSemua objek
CUnreserved (tidak boleh sebagai nama fungsi atau tipe)Semua objek kecuali fungsi dan tipe
TReserved (boleh sebagai nama fungsi atau tipe)Hanya fungsi dan tipe
RReservedTidak diperbolehkan

Perubahan kategori dari V4.3 ke V6.0

Kata kunciV4.3V6.0
betweenRC
collationNoneT
concurrentlyUT
convertCNone
filterRU
lateralN/AR
newRNone
offRU
oldRNone
percentile_contCNone
percentile_discCNone
rangeRU
reindexUR
rowsRU
sortRT
variadicNoneR

Tindakan: Periksa apakah terdapat objek database yang dinamai menggunakan kata kunci yang menjadi reserved di V6.0 (collation, concurrently, lateral, reindex, variadic). Jalankan kueri berikut untuk mengidentifikasi objek yang berisiko:

-- Menemukan tabel dan kolom yang namanya bentrok dengan kata kunci yang kini dicadangkan
SELECT n.nspname AS schema, c.relname AS table_name, a.attname AS column_name
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid
WHERE c.relkind IN ('r', 'v', 'm')
  AND NOT a.attisdropped
  AND a.attname IN ('collation', 'concurrently', 'lateral', 'reindex', 'variadic')
ORDER BY schema, table_name, column_name;

Ubah nama objek yang bentrok atau gunakan tanda kutip dalam pernyataan SQL sebelum melakukan upgrade.

Tabel sistem

V6.0 mengganti nama dan menghapus beberapa kolom pada tabel sistem. Perbarui kode aplikasi atau kueri apa pun yang mereferensikan hal-hal berikut:

V4.3V6.0Perubahan
pg_class.reltoastidxidDihapus
pg_stat_activity.procpidpg_stat_activity.pidKolom diganti nama
pg_stat_activity.current_querypg_stat_activity.state, pg_stat_activity.queryDipecah menjadi dua kolom: state untuk status backend, query untuk pernyataan yang sedang dieksekusi
gp_distribution_policy.attrnumsgp_distribution_policy.distkeyKolom diganti nama; tipe data berubah menjadi int2vector
sesion_level_memory_consumption.__gp_localid, sesion_level_memory_consumption.__gp_masteridDihapus
pg_filespace, pg_filespace_entryDihapus

Tindakan: Cari di kodebase Anda referensi ke nama kolom V4.3 pada kolom kiri dan perbarui ke padanan V6.0-nya.

Parameter fungsi bawaan

Dua fungsi bawaan mengalami perubahan tanda tangan (signature) di V6.0:

V4.3V6.0Perubahan
int4_avg_accum(bytea, integer)int4_avg_accum(bigint[], integer)Tipe parameter pertama berubah dari bytea ke bigint[]
string_agg(expression)string_agg(expression, delimiter)delimiter kini wajib disertakan

Tindakan: Perbarui semua pemanggilan string_agg agar menyertakan argumen delimiter. Jika int4_avg_accum dirujuk dalam agregat kustom, perbarui tanda tangan fungsinya sesuai.

Kemampuan baru di V6.0

V6.0 menambahkan kemampuan berikut yang tidak tersedia di V4.3:

FiturV4.3V6.0
LEFT() functionTidak didukungDidukung
Operasi UPDATE pada kolom kunci distribusiTidak didukungDidukung

Langkah pasca-upgrade

Setelah upgrade, jalankan ANALYZE pada semua database untuk memperbarui statistik. Pengoptimal kueri bergantung pada statistik terkini, yang tidak ikut dipertahankan selama upgrade versi utama.

ANALYZE VERBOSE;

Untuk bantuan terkait proses upgrade, lihat panduan upgrade AnalyticDB for PostgreSQL atau ajukan tiket untuk dukungan teknis.