Mantıksal kod çözme
ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Tek Sunucu
Önemli
PostgreSQL için Azure Veritabanı - Tek Sunucu kullanımdan kaldırma yolundadır. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya yükseltmenizi kesinlikle öneririz. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya geçiş hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı Tek Sunucuya ne oluyor?.
PostgreSQL'de mantıksal kod çözme, veri değişikliklerini dış tüketicilere akışla aktarmanıza olanak tanır. Mantıksal kod çözme popüler olarak olay akışı ve değişiklik veri yakalama senaryoları için kullanılır.
Mantıksal kod çözme, Postgres’nin önceden yazılan günlüğünü (WAL) okunabilir bir biçime dönüştürmek için çıkış eklentisi kullanır. PostgreSQL için Azure Veritabanı wal2json, test_decoding ve pgoutput çıkış eklentileri sağlar. pgoutput, PostgreSQL sürüm 10 ve sonrasında PostgreSQL tarafından kullanılabilir hale getiriliyor.
Postgres mantıksal kod çözmenin nasıl çalıştığına genel bir bakış için blogumuzu ziyaret edin.
Not
PostgreSQL yayını/aboneliği kullanılarak mantıksal çoğaltma, PostgreSQL için Azure Veritabanı - Tek Sunucu ile desteklenmez.
Sunucunuzu ayarlama
Mantıksal kod çözme ve okuma çoğaltmalarının her ikisi de bilgi için Postgres önceden yazma günlüğüne (WAL) bağlıdır. Bu iki özelliğin Postgres'ten farklı günlüğe kaydetme düzeyleri gerekir. Mantıksal kod çözme, okuma amaçlı çoğaltmalardan daha yüksek bir günlük düzeyine ihtiyaç duyar.
Doğru günlük düzeyini yapılandırmak için Azure çoğaltma desteği parametresini kullanın. Azure çoğaltma desteğinin üç ayar seçeneği vardır:
- Kapalı - WAL'da en az bilgiyi yerleştirir. Bu ayar çoğu PostgreSQL için Azure Veritabanı sunucusunda kullanılamaz.
- Çoğaltma - Kapalı'dan daha ayrıntılı. Bu, okuma amaçlı çoğaltmaların çalışması için gereken en düşük günlük düzeyidir. Bu ayar çoğu sunucuda varsayılan ayardır.
- Mantıksal - Çoğaltmadan daha ayrıntılı. Bu, mantıksal kod çözmenin çalışması için en düşük günlük düzeyidir. Okuma amaçlı çoğaltmalar da bu ayarda çalışır.
Azure CLI’yı kullanma
azure.replication_support olarak
logical
ayarlayın.az postgres server configuration set --resource-group mygroup --server-name myserver --name azure.replication_support --value logical
Değişikliği uygulamak için sunucuyu yeniden başlatın.
az postgres server restart --resource-group mygroup --name myserver
Postgres 9.5 veya 9.6 çalıştırıyorsanız ve genel ağ erişimini kullanıyorsanız, mantıksal çoğaltmayı çalıştıracağınız istemcinin genel IP adresini eklemek için güvenlik duvarı kuralını ekleyin. Güvenlik duvarı kuralı adı _replrule içermelidir. Örneğin, test_replrule. Sunucuda yeni bir güvenlik duvarı kuralı oluşturmak için az postgres server firewall-rule create komutunu çalıştırın.
Azure portalı kullanarak
Azure çoğaltma desteğini mantıksal olarak ayarlayın. Kaydet'i seçin.
Evet'i seçerek değişikliği uygulamak için sunucuyu yeniden başlatın.
Postgres 9.5 veya 9.6 çalıştırıyorsanız ve genel ağ erişimini kullanıyorsanız, mantıksal çoğaltmayı çalıştıracağınız istemcinin genel IP adresini eklemek için güvenlik duvarı kuralını ekleyin. Güvenlik duvarı kuralı adı _replrule içermelidir. Örneğin, test_replrule. Ardından Kaydet'i seçin.
Mantıksal kod çözmeyi başlatma
Mantıksal kod çözme, akış protokolü veya SQL arabirimi aracılığıyla kullanılabilir. Her iki yöntem de çoğaltma yuvalarını kullanır. Yuva, tek bir veritabanındaki değişiklik akışını temsil eder.
Çoğaltma yuvası kullanmak için Postgres'in çoğaltma ayrıcalıkları gerekir. Şu anda çoğaltma ayrıcalığı yalnızca sunucunun yönetici kullanıcısı tarafından kullanılabilir.
Akış protokolü
Akış protokollerini kullanarak değişiklikleri kullanmak genellikle tercih edilir. Kendi tüketicinizi / bağlayıcınızı oluşturabilir veya Debezium gibi bir araç kullanabilirsiniz.
pg_recvlogical ile akış protokolünü kullanan bir örnek için wal2json belgelerini ziyaret edin.
SQL arabirimi
Aşağıdaki örnekte wal2json eklentisiyle SQL arabirimini kullanıyoruz.
Yuva oluşturun.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
SQL komutlarını verme. Örneğin:
CREATE TABLE a_table ( id varchar(40) NOT NULL, item varchar(40), PRIMARY KEY (id) ); INSERT INTO a_table (id, item) VALUES ('id1', 'item1'); DELETE FROM a_table WHERE id='id1';
Değişiklikleri kullanma.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
Çıkış şöyle görünür:
{ "change": [ ] } { "change": [ { "kind": "insert", "schema": "public", "table": "a_table", "columnnames": ["id", "item"], "columntypes": ["character varying(40)", "character varying(40)"], "columnvalues": ["id1", "item1"] } ] } { "change": [ { "kind": "delete", "schema": "public", "table": "a_table", "oldkeys": { "keynames": ["id"], "keytypes": ["character varying(40)"], "keyvalues": ["id1"] } } ] }
Kullanmayı bitirdikten sonra yuvayı bırakın.
SELECT pg_drop_replication_slot('test_slot');
İzleme yuvaları
Mantıksal kod çözmeyi izlemeniz gerekir. Kullanılmayan çoğaltma yuvaları bırakılmalıdır. Yuvalar, değişiklikler tüketici tarafından okunana kadar Postgres WAL günlüklerini ve ilgili sistem kataloglarını tutar. Tüketiciniz başarısız olursa veya düzgün yapılandırılmamışsa, tamamlanmamış günlükler birikerek depolama alanınızı doldurur. Ayrıca, tamamlanmamış günlükler işlem kimliği kaydırma riskini artırır. Her iki durum da sunucunun kullanılamaz duruma gelmesine neden olabilir. Bu nedenle, mantıksal çoğaltma yuvalarının sürekli olarak tüketilmiş olması kritik önem taşır. Mantıksal çoğaltma yuvası artık kullanılmıyorsa, hemen bırakın.
pg_replication_slots görünümündeki 'etkin' sütunu, yuvaya bağlı bir tüketici olup olmadığını gösterir.
SELECT * FROM pg_replication_slots;
Önemli
Kullanılmayan çoğaltma yuvalarını bırakmanız gerekir. Bunun başarısız olması sunucunun kullanılamamasına neden olabilir.
Yuvayı bırakma
Çoğaltma yuvasını etkin bir şekilde tüketmiyorsanız bırakmanız gerekir.
SQL kullanarak adlı test_slot
bir çoğaltma yuvasını bırakmak için:
SELECT pg_drop_replication_slot('test_slot');
Önemli
Mantıksal kod çözmeyi kullanmayı durdurursanız, azure.replication_support veya off
olarak replica
değiştirin. tarafından logical
tutulan WAL ayrıntıları daha ayrıntılıdır ve mantıksal kod çözme kullanımda olmadığında devre dışı bırakılmalıdır.
Sonraki adımlar
- Mantıksal kod çözme hakkında daha fazla bilgi edinmek için Postgres belgelerini ziyaret edin.
- Mantıksal kod çözme hakkında sorularınız varsa ekibimize ulaşın.
- Okuma amaçlı çoğaltmalar hakkında daha fazla bilgi edinin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin