Dekodowanie logiczne
DOTYCZY: Azure Database for PostgreSQL — pojedynczy serwer
Ważne
Usługa Azure Database for PostgreSQL — pojedynczy serwer znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do usługi Azure Database for PostgreSQL — serwer elastyczny. Aby uzyskać więcej informacji na temat migracji do usługi Azure Database for PostgreSQL — serwer elastyczny, zobacz Co się dzieje z usługą Azure Database for PostgreSQL — pojedynczy serwer?.
Dekodowanie logiczne w usłudze PostgreSQL umożliwia przesyłanie strumieniowe zmian danych do użytkowników zewnętrznych. Dekodowanie logiczne jest popularne w scenariuszach przesyłania strumieniowego zdarzeń i przechwytywania zmian danych.
Dekodowanie logiczne używa wtyczki wyjściowej do konwertowania dziennika zapisu z wyprzedzeniem (WAL) bazy danych Postgres na czytelny format. Usługa Azure Database for PostgreSQL udostępnia wtyczki wyjściowe wal2json, test_decoding i pgoutput. Narzędzie pgoutput jest udostępniane przez program PostgreSQL z bazy danych PostgreSQL w wersji 10 i nowszej.
Aby zapoznać się z omówieniem sposobu działania dekodowania logicznego bazy danych Postgres, odwiedź nasz blog.
Uwaga
Replikacja logiczna korzystająca z publikacji/subskrypcji postgreSQL nie jest obsługiwana w usłudze Azure Database for PostgreSQL — pojedynczy serwer.
Konfigurowanie serwera
Dekodowanie logiczne i repliki do odczytu zależą od dziennika z wyprzedzeniem zapisu Postgres (WAL) w celu uzyskania informacji. Te dwie funkcje wymagają różnych poziomów rejestrowania z bazy danych Postgres. Dekodowanie logiczne wymaga wyższego poziomu rejestrowania niż repliki do odczytu.
Aby skonfigurować odpowiedni poziom rejestrowania, użyj parametru obsługi replikacji platformy Azure. Obsługa replikacji platformy Azure ma trzy opcje ustawień:
- Wyłączone — umieszcza najmniej informacji w pliku WAL. To ustawienie nie jest dostępne na większości serwerów usługi Azure Database for PostgreSQL.
- Replika — więcej informacji niż wyłączone. Jest to minimalny poziom rejestrowania potrzebny do pracy replik do odczytu. To ustawienie jest ustawieniem domyślnym dla większości serwerów.
- Logiczne — bardziej pełne niż replika. Jest to minimalny poziom rejestrowania dla dekodowania logicznego do pracy. Repliki do odczytu działają również w tym ustawieniu.
Korzystanie z interfejsu wiersza polecenia platformy Azure
Ustaw azure.replication_support na
logical
.az postgres server configuration set --resource-group mygroup --server-name myserver --name azure.replication_support --value logical
Uruchom ponownie serwer, aby zastosować zmianę.
az postgres server restart --resource-group mygroup --name myserver
Jeśli używasz programu Postgres 9.5 lub 9.6 i używasz dostępu do sieci publicznej, dodaj regułę zapory, aby uwzględnić publiczny adres IP klienta, z którego będzie uruchamiana replikacja logiczna. Nazwa reguły zapory musi zawierać _replrule. Na przykład test_replrule. Aby utworzyć nową regułę zapory na serwerze, uruchom polecenie az postgres server firewall-rule create .
Przy użyciu witryny Azure Portal
Ustaw obsługę replikacji platformy Azure na wartość logiczną. Wybierz pozycję Zapisz.
Uruchom ponownie serwer, aby zastosować zmianę, wybierając pozycję Tak.
Jeśli używasz programu Postgres 9.5 lub 9.6 i używasz dostępu do sieci publicznej, dodaj regułę zapory, aby uwzględnić publiczny adres IP klienta, z którego będzie uruchamiana replikacja logiczna. Nazwa reguły zapory musi zawierać _replrule. Na przykład test_replrule. Następnie wybierz opcję Zapisz.
Uruchamianie dekodowania logicznego
Dekodowanie logiczne może być używane za pośrednictwem protokołu przesyłania strumieniowego lub interfejsu SQL. Obie metody używają miejsc replikacji. Miejsce reprezentuje strumień zmian z pojedynczej bazy danych.
Użycie miejsca replikacji wymaga uprawnień replikacji bazy danych Postgres. Obecnie uprawnienie replikacji jest dostępne tylko dla administratora serwera.
Protokół przesyłania strumieniowego
Korzystanie ze zmian przy użyciu protokołu przesyłania strumieniowego jest często preferowane. Możesz utworzyć własnego klienta/łącznika lub użyć narzędzia takiego jak Debezium.
Zapoznaj się z dokumentacją pliku wal2json, aby zapoznać się z przykładem użycia protokołu przesyłania strumieniowego z pg_recvlogical.
Interfejs SQL
W poniższym przykładzie używamy interfejsu SQL z wtyczką wal2json.
Utwórz miejsce.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
Wydaj polecenia SQL. Na przykład:
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';
Korzystanie ze zmian.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
Dane wyjściowe będą wyglądać następująco:
{ "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"] } } ] }
Po zakończeniu korzystania z niego upuść miejsce.
SELECT pg_drop_replication_slot('test_slot');
Miejsca monitorowania
Należy monitorować dekodowanie logiczne. Każde nieużywane miejsce replikacji musi zostać usunięte. Miejsca są przechowywane w dziennikach bazy danych Postgres WAL i odpowiednich katalogach systemowych do momentu odczytania zmian przez użytkownika. Jeśli użytkownik ulegnie awarii lub nie został prawidłowo skonfigurowany, nieskonsumowane dzienniki będą stosować i wypełniać magazyn. Ponadto niekonsumowane dzienniki zwiększają ryzyko zawijania identyfikatora transakcji. Obie sytuacje mogą spowodować, że serwer stanie się niedostępny. W związku z tym ważne jest, aby miejsca replikacji logicznej są stale używane. Jeśli miejsce replikacji logicznej nie jest już używane, usuń je natychmiast.
Kolumna "aktywna" w widoku pg_replication_slots wskaże, czy użytkownik jest połączony z miejscem.
SELECT * FROM pg_replication_slots;
Ustaw alerty dotyczące używanego magazynu i maksymalne opóźnienie w metrykach replik, aby otrzymywać powiadomienia o wzroście wartości poprzednich progów normalnych.
Ważne
Należy usunąć nieużywane miejsca replikacji. Nie można tego zrobić, może prowadzić do niedostępności serwera.
Jak usunąć miejsce
Jeśli nie korzystasz aktywnie z miejsca replikacji, usuń je.
Aby usunąć miejsce replikacji o nazwie test_slot
przy użyciu języka SQL:
SELECT pg_drop_replication_slot('test_slot');
Ważne
Jeśli przestaniesz używać dekodowania logicznego, zmień azure.replication_support z powrotem na replica
lub off
. Szczegóły wal przechowywane przez logical
są bardziej pełne i powinny być wyłączone, gdy dekodowanie logiczne nie jest używane.
Następne kroki
- Odwiedź dokumentację bazy danych Postgres, aby dowiedzieć się więcej na temat dekodowania logicznego.
- Skontaktuj się z naszym zespołem, jeśli masz pytania dotyczące dekodowania logicznego.
- Dowiedz się więcej o replikach do odczytu.