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:
|
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
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.
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
ataucloudsql.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
ataucloudsql.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
ataucloudsql.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
ataucloudsql.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
ataucloudsql.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.