Ce face CREATE SUBSCRIPTION (replicare logică)
CREATE SUBSCRIPTION se conectează la serverul sursă, creează acolo un slot de replicare, copiază datele actuale ale tabelelor publicate (copy_data = true, implicit) și apoi aplică pe rând fiecare modificare nouă.
Tabelele trebuie să existe deja pe destinație, cu aceleași nume și coloane compatibile: replicarea logică nu creează structura. O metodă simplă este pg_dump --schema-only de pe sursă, restaurat pe destinație.
Dacă aplicarea unei modificări eșuează (de exemplu o cheie duplicată pe destinație), abonarea se oprește și reîncearcă până rezolvi conflictul. Starea se vede în pg_stat_subscription și în jurnalul serverului.
Parametri
| Parametru | Descriere |
|---|---|
CONNECTION |
Șirul de conectare la serverul sursă. Utilizatorul are nevoie de atributul REPLICATION (sau drepturi echivalente) și de drept de citire pe tabele. |
PUBLICATION |
Una sau mai multe publicații de pe sursă. |
copy_data |
Copiază datele existente la început (implicit true). |
REFRESH PUBLICATION |
Preia tabelele adăugate între timp în publicație. |
Ce returnează
Mesajul CREATE SUBSCRIPTION, precedat de un NOTICE despre slotul de replicare creat pe sursă.
Exemple
Exemplul 1: Abonare la publicația magazinului
CREATE SUBSCRIPTION abonare_magazin
CONNECTION 'host=10.0.0.5 port=5432 dbname=magazin user=replicator password=parola-lunga'
PUBLICATION pub_magazin;
Rezultat în psql
NOTICE: created replication slot "abonare_magazin" on publisher
CREATE SUBSCRIPTION
Exemplul 2: Starea abonării
SELECT subname, pid IS NOT NULL AS activ, received_lsn
FROM pg_stat_subscription;
Rezultat în psql
subname | activ | received_lsn
-----------------+-------+--------------
abonare_magazin | t | 0/3A1C2F08
(1 row)
Exemplul 3: Tabel nou adăugat în publicație
Pe sursă s-a rulat ALTER PUBLICATION pub_magazin ADD TABLE produse, iar pe destinație tabelul produse există deja (gol).
ALTER SUBSCRIPTION abonare_magazin REFRESH PUBLICATION;
Rezultat în psql
ALTER SUBSCRIPTION
Greșeli frecvente
- Ștergi baza de date sursă sau serverul destinație fără
DROP SUBSCRIPTION: slotul de replicare rămâne pe sursă și păstrează fișierele WAL la nesfârșit, până se umple discul. Verificăpg_replication_slotspe sursă. - Scrii în tabelele replicate și pe destinație. Rândurile introduse local pot intra în conflict cu cele care vin de pe sursă și opresc replicarea.
- Pui parola în clar în
CONNECTIONși o vede oricine poate citipg_subscriptioncu drepturi suficiente. Preferă un fișier.pgpasspe server pentru utilizatorul sistemului care rulează PostgreSQL.
Comenzi înrudite
CREATE PUBLICATION (replicare logică): Pe serverul sursă, alege ce tabele se trimit prin replicare logică. Serverele abonate primesc apoi fiecare INSERT, UPDATE și DELETE.pg_basebackup: Face o copie fizică completă a unui server PostgreSQL care rulează, folosită pentru backup sau pentru a porni un server replică (standby).