Menyiapkan replikasi dan decoding logis

Anda dapat menggunakan fitur replikasi dan decoding logis di Cloud SQL untuk PostgreSQL. Fitur ini memungkinkan alur kerja replikasi yang logis dan alur kerja pengambilan data perubahan (CDC).

Untuk mengetahui informasi umum tentang replikasi, lihat Tentang replikasi di Cloud SQL.

Pengantar

Saat PostgreSQL menjalankan replikasi logis, perubahan yang dialirkan ke replika akan diekstrak dari log WAL menggunakan decoding logis. Perubahan yang didekode tidak bergantung pada format penyimpanan fisik yang mendasarinya. Perubahan ini hanya mencerminkan perubahan data dari level SQL, dalam hal INSERT, UPDATE, dan DELETE. Independensi dari lapisan penyimpanan ini memberikan fleksibilitas tinggi dan memungkinkan berbagai fungsi oleh pengguna aliran perubahan.

Replikasi logis adalah fitur unggulan yang dibuat pada decoding logis.

Tidak seperti fitur replikasi fisik PostgreSQL, yang mengharuskan database sumber dan tujuan memiliki versi yang sama, replikasi logis memungkinkan replikasi di seluruh versi utama PostgreSQL. Replikasi logis di Cloud SQL didukung oleh ekstensi pglogical, yang tersedia di semua versi PostgreSQL, dan replikasi logis native PostgreSQL, yang ditambahkan di PostgreSQL 10.

Format saat perubahan dialirkan dapat dikonfigurasi dengan berbagai plugin. Hal ini memungkinkan arsitektur pengambilan data perubahan (CDC) yang fleksibel. Misalnya, ekstensi wal2json memungkinkan streaming semua perubahan dalam database ke konsumen, dengan format JSON. Cloud SQL mendukung dekoder pgoutput bawaan, modul kontrib test_decoding, dan wal2json. Cloud SQL saat ini mendukung kedua varian output JSON wal2json - format-version 1 yang mengenkode seluruh transaksi sebagai satu objek JSON dan format-version 2 yang menghasilkan satu objek JSON per perintah. Plugin ini memungkinkan replikasi ke database non-PostgreSQL.

Mengonfigurasi instance PostgreSQL Anda

PostgreSQL mendukung decoding logis dengan menulis informasi tambahan ke write-ahead log (WAL) miliknya.

Di Cloud SQL, Anda dapat mengaktifkan fitur ini dengan menyetel flag cloudsql.logical_decoding ke on. Setelan ini berbeda dengan setelan yang digunakan di PostgreSQL standar. Jika Anda mengubah instance PostgreSQL eksternal, Anda dapat mengaktifkan fitur ini dengan menyetel parameter konfigurasi wal_level ke logical.

Jika Anda berencana menggunakan ekstensi pglogical, pglogical harus ditambahkan ke shared_preload_libraries. Karena Cloud SQL tidak mengizinkan modifikasi langsung flag ini, pglogical diaktifkan dengan menyetel cloudsql.enable_pglogical ke on. (Pada VM, sudo apt-get menginstall postgresql-13-pglogical ) dan memulai ulang database.

Jika Anda menggunakan pglogical untuk mereplikasi antara dua instance PostgreSQL, decoding logis hanya perlu diaktifkan pada instance utama, dan bukan pada instance replika (kecuali jika instance tersebut adalah utama untuk replika lainnya). Namun, ekstensi pglogical harus diaktifkan di kedua instance. Untuk mengetahui contoh penggunaan istilah "utama" dan "replika" beserta maknanya, lihat Tentang replikasi di Cloud SQL.

Mengaktifkan konektivitas jaringan

Pastikan bahwa instance utama Anda menerima koneksi dari instance replika.

Utama Replika Konfigurasi
Cloud SQL (IP publik) Cloud SQL (IP publik) Tambahkan alamat IP keluar replika ke jaringan yang diizinkan utama.
Cloud SQL (IP pribadi) Cloud SQL (IP pribadi) Jika kedua instance berada dalam project Google Cloud yang sama, tambahkan rentang IP yang dialokasikan dari jaringan VPC replika ke jaringan yang diizinkan di kedua instance.

Untuk menemukan rentang IP yang dialokasikan di konsol Google Cloud:

  1. Buka halaman Jaringan VPC.
  2. Pilih jaringan VPC yang Anda gunakan.
  3. Pilih tab Private service connection.
  4. Pilih tab Rentang IP yang dialokasikan.
Eksternal Cloud SQL Anda dapat menggunakan Database Migration Service.
Cloud SQL Eksternal Lihat Mengonfigurasi replika eksternal untuk informasi selengkapnya.

Dapatkan alamat IP yang keluar dari instance replika

Jika instance replika adalah instance Cloud SQL dan memiliki alamat IP publik, lakukan langkah-langkah berikut untuk mendapatkan alamat IP keluarnya.

Konsol

  1. Buka halaman Instance Cloud SQL.

  2. Di samping alamat IP publik replika Cloud SQL, arahkan kursor ke tips alat Info selengkapnya dan ambil alamat IP keluar. Perlu diperhatikan bahwa alamat IP keluar bukan alamat IP yang ditampilkan di listingan utama untuk replika di konsol Cloud.

Jika instance replika bukan instance Cloud SQL, lihat dokumentasi yang relevan.

Untuk mengetahui informasi selengkapnya tentang cara mendapatkan alamat IP publik instance, baca artikel Mendapatkan alamat IP keluar replika Cloud SQL.

gcloud

Anda dapat menggunakan perintah gcloud berikut:

gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"

Izinkan koneksi

Jika instance utamanya adalah instance Cloud SQL, Anda dapat mengizinkan akses dari alamat IP keluar replika dengan menambahkannya sebagai jaringan yang diizinkan.

Aktifkan koneksi replikasi untuk PostgreSQL 9.6 dan yang lebih lama

Jika instance utama Anda tidak berjalan di Cloud SQL, dan menjalankan PostgreSQL 9.6 atau yang lebih lama, Anda harus memastikan bahwa file pg_hba.conf instance ditetapkan untuk menerima koneksi replikasi. Tambahkan baris berikut ke file tersebut, menggunakan all all hanya untuk pengujian awal. Untuk keamanan tambahan, batasi pengguna dan alamat IP hanya untuk yang diperlukan, seperti contoh berikut:

host replication all all md5

Untuk informasi tambahan, lihat File pg_hba.conf.

Membuat pengguna replikasi

Untuk menggunakan fitur decoding logis, Anda dapat membuat pengguna PostgreSQL dengan atribut REPLICATION.

Contoh

CREATE USER replication_user WITH REPLICATION
IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'secret';

Sebagai alternatif, Anda dapat menyetel atribut ini pada pengguna yang ada:

ALTER USER existing_user WITH REPLICATION;

Resource PostgreSQL

Ketika decoding logis digunakan, proses latar belakang pada instance PostgreSQL utama mengubah perubahan WAL menjadi perubahan logis, menggunakan plugin decoding yang dipilih, dan meneruskannya ke konsumen (yang bahkan bisa berupa instance non- PostgreSQL). Proses latar belakang ini disebut pengirim WAL. Jumlah pengirim WAL serentak yang dapat aktif di instance PostgreSQL dibatasi oleh flag max_wal_senders. Default flag ini adalah 10 dan batasnya bertambah secara linear seiring memori instance Cloud SQL Anda, sehingga memungkinkan 8 pengirim WAL per GB memori.

Untuk memastikan bahwa segmen WAL tidak dihapus sebelum dikirim ke semua konsumen, PostgreSQL menggunakan slot replikasi logis untuk melacak data mana yang dikirim ke konsumen mana (dan slot replikasi fisik untuk replika baca). Jumlah slot replikasi yang dapat Anda buat untuk instance PostgreSQL dibatasi oleh flag max_replication_slots. Setelan default flag ini adalah 10 dan batasnya bertambah seiring memori instance Cloud SQL Anda, sehingga memungkinkan terdapat 2 hingga 8 slot replikasi per GB memori.

Tabel berikut menunjukkan hubungan antara memori maksimum instance Cloud SQL dan slot replikasi maksimum untuk instance tersebut.

Memori maksimum (GB)
Slot replikasi maksimum
4
10
16
32
32
128
64
256
128
512
256
1024
512
2048
512+
4096

Umumnya ada satu slot replikasi dan pengirim WAL per konsumen, sehingga flag ini harus ditetapkan ke nilai yang kurang lebih sama. Namun, PostgreSQL merekomendasikan penyediaan buffer kecil untuk max_wal_senders agar dapat ditangani saat koneksi berhenti tiba-tiba dan koneksi baru dibuat. Replikasi fisik, seperti yang digunakan oleh replika baca Cloud SQL, juga menggunakan slot replikasi dan pengirim WAL, sehingga hitung hal tersebut saat menghitung jumlah dari setiap resource yang Anda butuhkan.

Replikasi dan pglogical logis native PostgreSQL memerlukan proses latar belakang tambahan agar dapat berjalan, baik pada instance utama maupun replika. Jumlah proses latar belakang yang dapat berjalan dibatasi oleh flag max_worker_processes. Defaultnya adalah delapan dan batasnya bertambah secara linear seiring memori instance Cloud SQL Anda, sehingga memungkinkan dua proses tambahan per GB memori. Jumlah persis proses worker yang digunakan dengan pendekatan ini dijelaskan di bagiannya masing-masing.

Jika flag ini disetel terlalu rendah, dan replikasi gagal dengan pesan error worker registration failed di log Anda, Anda mungkin perlu meningkatkan setelan max_worker_processes.

Perhatikan bahwa pengirim WAL tidak dihitung sebagai proses worker. Worker yang dihasilkan untuk eksekusi kueri paralel akan dihitung, sehingga jika nilai max_worker_processes disetel terlalu rendah, Anda mungkin mengalami performa yang buruk karena PostgreSQL tidak dapat memanfaatkan eksekusi kueri paralel.

Dengan menggunakan fungsi pg_ls_waldir (), Anda dapat menentukan penggunaan disk WAL. Fungsi ini dibatasi untuk pengguna cloudsqlsuperuser seperti pengguna admin default postgres. Fungsi ini hanya tersedia di PostgreSQL versi 10 dan yang lebih baru.

Untuk menghitung total penggunaan disk WAL:

postgres=> select * from pg_ls_waldir();
nama ukuran modifikasi
00000001000000000000000A 16777216 2021-08-11 15:16:49+00
000000010000000000000009 16777216 2021-08-12 06:23:24+00

(2 baris)

postgres=> select pg_size_pretty(sum(size)) as "Total WAL disk usage" from pg_ls_waldir();
Total penggunaan disk WAL
32 MB

(1 baris)

Menyiapkan replikasi logis dengan replika eksternal

Lihat Mengonfigurasi replika eksternal untuk mengetahui contoh lengkap menggunakan dekoding pglogical dan logis.

Menyiapkan replikasi logis dengan pglogical

Untuk menyiapkan replikasi logis dengan pglogical, decoding logis harus diaktifkan pada instance utama. Tetapkan cloudsql.logical_decoding=on pada instance Cloud SQL, atau wal_level=logical pada instance eksternal. Selain itu, pglogical harus diaktifkan pada instance utama dan replika; setel cloudsql.enable_pglogical=on pada instance Cloud SQL, atau tambahkan pglogical ke shared_preload_libraries pada instance eksternal. Perhatikan bahwa mengubah flag ini memerlukan untuk memulai ulang kedua instance utama dan replika.

Jika Anda mengalami masalah saat melakukan langkah-langkah ini, lihat Memecahkan masalah pglogical.

Buat pengguna dengan hak istimewa replikasi

Anda memerlukan pengguna dengan hak istimewa replika dan peran cloudsqlsuperuser pada kedua instance utama dan replika saat menggunakan pglogical. Setiap perintah yang dijelaskan di bawah harus dijalankan oleh pengguna tersebut.

Instal ekstensi pglogical

Anda perlu menginstal ekstensi pglogical pada kedua instance utama dan replika. Pada hal utama, pengguna replikasi (yaitu, pengguna yang terhubung ke database) harus menginstalnya.

CREATE EXTENSION pglogical;

Buat node pglogical pada setiap instance

Node pglogical menampilkan instance PostgreSQL fisik, dan menyimpan detail koneksi untuk instance tersebut. Instance utama dan replika harus mendaftarkan diri sebagai node:

source-instance$ SELECT pglogical.create_node(
    node_name := 'primary',
    dsn := 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=secret'
);

dest-instance$ SELECT pglogical.create_node(
    node_name := 'replica',
    dsn := 'host=<replica-ip> port=5432 dbname=postgres user=replication_user password=secret'
);

Buat tabel dengan data yang akan direplikasi

Ekstensi pglogical hanya memungkinkan replikasi subset tabel ke tujuan. Sebagai contoh, kita akan membuat tabel tiruan pada instance utama dan mengisinya dengan beberapa data untuk diuji:

CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');

Tabel juga harus dibuat pada instance replika.

Tambahkan tabel ke kumpulan replikasi

Untuk mendukung replikasi set data yang berbeda ke tujuan yang berbeda, pglogical memiliki konsep kumpulan replikasi. Kita dapat menambahkan tabel pengujian kita ke set replikasi default.

SELECT pglogical.replication_set_add_table('default', 'replica_test', true);

Buat langganan pglogical

Buat langganan pglogical pada instance tujuan dengan memberikan detail koneksi ke instance utama.

SELECT pglogical.create_subscription(
    subscription_name := 'test_sub',
    provider_dsn := 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=replicapassword'
);

SELECT * FROM pglogical.show_subscription_status('test_sub');

Jika statusnya muncul sebagai "replikasi", berarti penyiapan berhasil. Buat kueri tabel replica_test untuk memastikan bahwa data telah direplikasi. Sisipkan dan ubah kumpulan data pada instance utama dan verifikasi bahwa data tersebut kemudian muncul di instance replika.

Di instance utama, buat kueri tabel pg_replication_slots untuk melihat slot replikasi yang dibuat oleh langganan.

Pembersihan

Setelah pengujian Anda berhasil, batalkan langganan pada replika menggunakan pglogical.drop_subscription('test_sub'). Verifikasi bahwa slot replikasi juga dihapus di instance utama. Jika tidak, segmen WAL akan terus terakumulasi di instance replika.

Untuk informasi selengkapnya tentang set replikasi, replikasi data parsial, replikasi DDL, konfigurasi dan batasan lanjutan lainnya, lihat dokumentasi pglogical.

Penggunaan resource

Ekstensi pglogical menjalankan beberapa proses latar belakang yang diperhitungkan dalam batas max_worker_processes.

Dalam keadaan stabil, ekstensi ini akan menjalankan satu proses "pengawasan" saat diaktifkan, satu proses "pengelola" per database PostgreSQL yang telah menginstal ekstensi (misalnya, mungkin terdapat D dari proses ini), dan satu proses "terapkan" per langganan pglogical pada instance replika (misalnya, mungkin terdapat S dari keduanya). Namun, ekstensi tersebut dapat memunculkan proses worker tambahan saat menjalankan sinkronisasi awal, dan benar-benar memunculkan proses "pengelola" untuk setiap database dalam instance, tetapi jika database tidak memiliki ekstensi yang terinstal, ekstensi tersebut akan langsung keluar.

Oleh karena itu, alokasikan beberapa proses worker lebih banyak daripada yang diperlukan dalam keadaan stabil. Proses worker digunakan oleh PostgreSQL untuk tujuan lain, seperti pemrosesan kueri paralel. Jika max_worker_processes disetel terlalu rendah, replikasi mungkin akan gagal tanpa ada peringatan, atau PostgreSQL mungkin tidak dapat menjalankan pemrosesan kueri paralel.

Singkatnya, setelan berikut direkomendasikan:

max_worker_processes
  >= 1 + D + 8 (on the source instance)
  >= 1 + D + S + 8 (on the destination instance)
max_wal_senders >= S + 2 (on the source instance)
max_replication_slots >= S (on the source instance)

Memecahkan masalah pglogical

Tidak dapat membuat ekstensi pglogical

Saat mencoba menginstal ekstensi pglogical, Anda mungkin melihat error:

ERROR:  pglogical is not in shared_preload_libraries

Saat Anda menginstal pglogical pada instance Cloud SQL, pastikan bahwa Anda telah menyetel cloudsql.enable_pglogical=on. Jika menggunakan instance eksternal, tambahkan langsung ke flag shared_preload_libraries, misalnya, shared_preload_libraries=pg_stat_statements,pglogical. Perubahan ini memerlukan mulai ulang instance utama.

Tidak dapat membuat langganan pglogical

Saat membuat langganan, pglogical terlebih dahulu memeriksa apakah langganan dapat menggunakan detail koneksi untuk terhubung ke instance. Library ini akan mencoba membuat koneksi reguler terlebih dahulu, dan jika ini gagal, akan terjadi error: ERROR: could not connect to the postgresql server.

Jika terjadi error ini, pastikan bahwa instance utama dikonfigurasi untuk mengizinkan koneksi dari instance replika, dan pastikan bahwa detail koneksi yang Anda berikan sudah benar. Detail tambahan diberikan terkait alasan PostgreSQL tidak dapat membuat koneksi.

Setelah membuat koneksi reguler, pglogical akan mencoba membuat koneksi replikasi khusus. Pada PostgreSQL 9.6 dan versi sebelumnya, jenis koneksi ini dapat memiliki konfigurasi autentikasi yang berbeda. Anda perlu memperbarui file pg_hba.conf pada instance sumber jika Anda melihat error ini: ERROR: could not connect to the postgresql server in replication mode.

File pg_hba.conf yang digunakan oleh Cloud SQL telah memiliki perubahan yang diperlukan; error ini hanya terjadi saat terhubung ke instance eksternal yang tidak dikelola oleh Cloud SQL.

Sebagai alternatif, koneksi mode replikasi mungkin gagal jika instance sumber tidak mengizinkan cukup pengirim WAL. Jika Anda melihat FATAL: number of requested standby connections exceeds max_wal_senders, maka tingkatkan max_wal_senders pada instance utama.

langganan pglogical tidak aktif

Langganan pglogical mungkin gagal untuk direplikasi. Untuk mengatasi masalah ini, pastikan terlebih dahulu bahwa proses latar belakang berjalan pada instance replika. Buat kueri pg_stat_activity untuk memverifikasi bahwa proses pglogical apply sedang berjalan. Jika tidak, periksa log pada node tujuan. Jika Anda melihat pesan worker registration failed,, Anda dapat meningkatkan setelan max_worker_processes.

Kemudian, pastikan slot replikasi dibuat pada instance utama. Pada instance replika, baris di pglogical.subscription berisi nama slot yang langganan coba buat, dan pada instance utama Anda dapat membuat kueri pg_replication_slots untuk memverifikasi bahwa slot berhasil dibuat.

Jika tidak ada slot replikasi yang dibuat, periksa log pada instance utama.

Error ERROR: logical decoding requires wal_level >= logical menyiratkan bahwa flag wal_level tidak disetel ke logical. Selesaikan masalah ini dengan meyetel cloudsql.logical_decoding=on, pada instance utama jika itu adalah instance Cloud SQL.

Atau, jika instance adalah instance eksternal, setel wal_level=logical.

Jika tidak, Anda mungkin akan melihat ERROR: all replication slots are in use, beserta HINT: Free one or increase max_replication_slots yang berguna.

Menyiapkan replikasi logis PostgreSQL native

Karena PostgreSQL 10, PostgreSQL mendukung replikasi logis bawaan native. Untuk menyiapkan replikasi logis native, decoding logis harus diaktifkan pada instance utama, dengan menetapkan cloudsql.logical_decoding=on pada instance Cloud SQL, atau wal_level=logical pada instance eksternal. Perhatikan bahwa modifikasi flag ini mengharuskan instance utama untuk dimulai ulang.

Pastikan instance Anda dikonfigurasi dengan benar (untuk konektivitas jaringan, dll.) dengan meninjau bagian di Mengonfigurasi instance PostgreSQL Anda. Halaman ini menyediakan langkah-langkah untuk bukti konsep. Jika Anda mengalami masalah saat mengikuti langkah-langkah di bagian tersebut, lihat Memecahkan masalah pglogical. Untuk mengetahui informasi selengkapnya, lihat Replikasi Logis dalam dokumentasi PostgreSQL.

Buat tabel dengan data yang akan direplikasi

Replikasi logis PostgreSQL native mendukung seluruh database atau hanya tabel tertentu. Sebagai contoh, kita akan membuat tabel tiruan pada instance utama dan mengisinya dengan data yang akan diuji.

CREATE TABLE native_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO native_test (data) VALUES ('apple'), ('banana'), ('cherry');

Tabel juga harus dibuat pada instance replika.

Buat publikasi di instance utama

Replikasi logis PostgreSQL native berkaitan dengan penayang dan pelanggan. Buat publikasi data di native_test:

CREATE PUBLICATION pub FOR TABLE native_test;

Buat langganan di instance replika

Berikut adalah contoh pembuatan langganan pada instance replika:

CREATE SUBSCRIPTION sub
    CONNECTION 'host=<primary-ip> port=5432 dbname=postgres user=replication_user password=replicapassword'
    PUBLICATION pub;

Pembuatan langganan pada instance replika memerlukan peran cloudsqlsuperuser. Setelah membuat langganan, buat kueri tabel native_test untuk memverifikasi bahwa data telah muncul di instance replika.

Pada instance utama, Anda dapat membuat kueri tabel pg_replication_slots untuk melihat slot replikasi yang dibuat oleh langganan.

Pembersihan

Saat pengujian Anda berhasil, batalkan langganan pada replika menggunakan DROP SUBSCRIPTION sub;. Verifikasi bahwa slot replikasi juga dihapus pada utama. Jika tidak segmen WAL akan terus terakumulasi di instance utama.

Batasan pada replikasi logis PostgreSQL native

Akses ke kolom subconninfo pada tabel sistem pg_subscription tidak tersedia.

Menjalankan pg_dump tidak dapat membuang informasi tentang langganan karena hal ini memeriksa apakah pengguna yang terhubung memiliki izin superuser.

Menerima perubahan WAL yang didekode untuk pengambilan data perubahan (CDC)

Sebagai kasus penggunaan alternatif untuk CDC, decoding logis dapat mengalirkan perubahan dari instance PostgreSQL. Alat standar yang digunakan untuk ini adalah pg_recvlogical.

Anda dapat menggunakan alat pg_recvlogical untuk membuat slot replikasi dan mengalirkan perubahan yang dilacak oleh slot tersebut. Format perubahan ditentukan oleh pilihan Anda atas plugin decoding. Anda dapat menggunakan:

  • wal2json, untuk mengalirkan perubahan yang diformat sebagai JSON, atau

  • test_decoding, untuk mengalirkan perubahan yang diformat dengan format teks barebone

Buat slot replikasi

Untuk membuat slot replikasi, jalankan:

pg_recvlogical
  -h <instance_ip> \
  -U <replication_user> \
  -p 5432 \
  -d postgres \
  --slot test_slot \
  --create-slot \
  -P <decoder_plugin>

Alirankan perubahan

Di satu terminal Cloud Shell, jalankan:

pg_recvlogical
  -h <instance_ip> \
  -U <replication_user> \
  -p 5432 \
  -d postgres \
  --slot test_slot \
  --start \
  -f -

Saat berada di terminal Cloud Shell lain, hubungkan ke database Anda dan jalankan perintah berikut:

CREATE TABLE cdc_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO cdc_test (data) VALUES ('apple', 'banana');
UPDATE cdc_test SET data = 'cherry' WHERE id = 2;
DELETE FROM cdc_test WHERE id = 1;
DROP TABLE cdc_test;

Jika Anda menggunakan plugin dekoder wal2json, output yang mirip dengan berikut ini akan ditampilkan di terminal Cloud Shell pertama:

{"change":[]}
{"change":[{"kind":"insert","schema":"public","table":"cdc_test","columnnames":["id","data"],"columntypes":["integer","text"],"columnvalues":[1,"apple"]},{"kind":"insert","schema":"public","table":"cdc_test","columnnames":["id","data"],"columntypes":["integer","text"],"columnvalues":[2,"banana"]}]}
{"change":[{"kind":"update","schema":"public","table":"cdc_test","columnnames":["id","data"],"columntypes":["integer","text"],"columnvalues":[2,"cherry"],"oldkeys":{"keynames":["id"],"keytypes":["integer"],"keyvalues":[2]}}]}
{"change":[{"kind":"delete","schema":"public","table":"cdc_test","oldkeys":{"keynames":["id"],"keytypes":["integer"],"keyvalues":[1]}}]}
{"change":[]}

Jika Anda menggunakan plugin dekoder test_decoding, output yang mirip dengan yang berikut ini akan ditampilkan di terminal Cloud Shell pertama:

BEGIN 19460
COMMIT 19460
BEGIN 19461
table public.cdc_test: INSERT: id[integer]:1 data[text]:'apple'
table public.cdc_test: INSERT: id[integer]:2 data[text]:'banana'
COMMIT 19461
BEGIN 19462
table public.cdc_test: UPDATE: id[integer]:2 data[text]:'cherry'
COMMIT 19462
BEGIN 19463
table public.cdc_test: DELETE: id[integer]:1
COMMIT 19463
BEGIN 19464
COMMIT 19464

(ID transaksi Anda mungkin berbeda.)

Pembersihan

Setelah Anda menyelesaikan pengujian Anda, hapus slot replikasi yang Anda buat dengan menjalankan:

pg_recvlogical
  -h <instance_ip> \
  -U <replication_user> \
  -p 5432 \
  -d postgres \
  --slot test_slot \
  --drop-slot

Catatan dan batasan

Catatan dan batasan di bagian ini berlaku untuk fitur replikasi dan dekode logis Cloud SQL untuk PostgreSQL.

  • Saat Anda memulihkan instance yang memiliki cloudsql.logical_decoding atau cloudsql.enable_pglogical aktif, dan saat ini bertindak sebagai penayang untuk replikasi logis, Anda harus menonaktifkan replikasi ke semua instance target terlebih dahulu. Jika tidak, pemulihan ke instance akan gagal dengan menampilkan error, tetapi saat ini detail error tersebut tidak terlihat.

  • Ketika Anda memulihkan cadangan dari instance yang memiliki cloudsql.logical_decoding atau cloudsql.enable_pglogical aktif (pada saat pencadangan), dan Anda memulihkannya ke instance baru, status replikasi tidak dikembalikan ke instance yang baru. Setelahnya, Anda harus mengonfigurasi ulang replikasi secara manual.

  • Pada instance Cloud SQL dengan satu atau beberapa replika baca Cloud SQL (menggunakan replikasi fisik), jika Anda mengaktifkan cloudsql.logical_decoding atau cloudsql.enable_pglogical, flag tersebut juga akan diaktifkan pada replika baca.

    • Instance replika baca Cloud SQL tidak dapat bertindak sebagai penayang untuk replikasi logis karena PostgreSQL tidak mendukung decoding logis dalam replika baca. Namun, flag diaktifkan pada instance replika baca untuk memastikan bahwa flag ini dapat berfungsi sebagai pengganti untuk instance utama jika dan saat ia dipromosikan.

    • Mengaktifkan cloudsql.logical_decoding atau cloudsql.enable_pglogical pada instance utama akan menyebabkan flag diaktifkan pada semua replika baca, dan hal ini menyebabkan replika utama dan replika baca dimulai ulang secara berurutan. Untuk menghindari situasi ini dan mengontrol saat setiap instance dimulai ulang, Anda dapat (1) menetapkan flag di setiap replika baca secara bergantian, dan hanya setelah itu (2) menetapkan flag pada instance utama.

    • Menonaktifkan cloudsql.logical_decoding atau cloudsql.enable_pglogical di instance utama tidak menyebabkan flag dinonaktifkan di semua replika baca. Untuk menonaktifkan flag di seluruh instance, Anda harus melakukan kebalikan dari langkah-langkah yang dijelaskan di atas: (1) menonaktifkan flag di instance utama dan kemudian (2) menonaktifkan flag di setiap replika baca secara bergantian.