Vous n'êtes pas identifié(e).

#1 11/06/2020 10:15:08

agi.v
Membre

Réplication logique master master

Bonjour à vous tous !
Je suis très heureux de vous retrouver.
Je me permets de contacter la communauté car j'ai un souci un peu spécial (je trouve). Je recherche a faire une réplication de données master master en synchrone en un serveur A et un serveur B
J'ai donc créé une publication sur une table des deux cotés puis une subscription faisant référence au coté inverse:
pubA--> subB
subA <-- pubB

je pense que je ne suis pas très loin mais voila dans les logs apparement j'ai un souci avec des duplications de clé primaire.

Voila comment j'ai créé la table p_assets sur les deux serveurs :

--- uuid ---
CREATE EXTENSION IF NOT EXISTS "uuid-ossp"
    SCHEMA public
    VERSION "1.1";
--- ./uuid ---
---------------------------------------------------------------------------------------------------------------------------------------------------
--- p_assets ---
CREATE TABLE public.p_assets (
    assetguid UUID NOT NULL DEFAULT public.uuid_generate_v4(),
    folderguid UUID,
    assetname text,
    assetalt text,
    assetcreatedat timestamp without time zone,
    assetmodifiedat timestamp without time zone,
    assetistrashbin boolean,
    assetisvisible boolean,
    assettype text,
    assetformat text,
    assetsize integer,
    asseturlorignal text,
    asseturlsmall text,
    asseturlmedium text,
    asseturlbig text,
    assettags jsonb,
    assetcollection jsonb,
    assetworkroom jsonb,
    assetowner text,
    assetteam text,
    hashcode text
);

ALTER TABLE public.p_assets OWNER TO postgres;

ALTER TABLE ONLY public.p_assets
    ADD CONSTRAINT pk__p_assets PRIMARY KEY (assetguid);

CREATE INDEX idx_p_assets_assetguid ON public.p_assets USING btree(assetguid);
--- p_assets ---

puis j'ai inséré des valeurs :
INSERT INTO p_assets(assetname) VALUES ('A1');
INSERT INTO p_assets(assetname) VALUES ('B2');
INSERT INTO p_assets(assetname) VALUES ('A3');
INSERT INTO p_assets(assetname) VALUES ('B4');

sur le serveur B apparement pas de souci (niveau logs)
mais sur le serveur A.....un extrait des logs serait plus parlant....

2020-06-11 08:13:34.035 UTC [5510] LOG:  logical replication apply worker for subscription "suba" has started
2020-06-11 08:13:34.049 UTC [5510] ERROR:  duplicate key value violates unique constraint "pk__p_assets"
2020-06-11 08:13:34.049 UTC [5510] DETAIL:  Key (assetguid)=(66c79969-c8bf-493e-99ea-9df057b0dd1a) already exists.
2020-06-11 08:13:34.051 UTC [4407] LOG:  worker process: logical replication worker for subscription 16502 (PID 5510) exited with exit code 1
2020-06-11 08:13:39.056 UTC [5511] LOG:  logical replication apply worker for subscription "suba" has started
2020-06-11 08:13:39.071 UTC [5511] ERROR:  duplicate key value violates unique constraint "pk__p_assets"
2020-06-11 08:13:39.071 UTC [5511] DETAIL:  Key (assetguid)=(66c79969-c8bf-493e-99ea-9df057b0dd1a) already exists.
2020-06-11 08:13:39.073 UTC [4407] LOG:  worker process: logical replication worker for subscription 16502 (PID 5511) exited with exit code 1

Pouvez vous me dire comment faire en sorte de ne répliquer que le delta (différence) entre la table p_assets du serveur A et B ?
Merci beaucoup de votre aide.

Hors ligne

#2 11/06/2020 10:56:34

rjuju
Administrateur

Re : Réplication logique master master

Cela ne peut pas marcher.  Si vous voulez vraiment ce type de réplication, vous devez utiliser un des outils développé dans la communauté pour cela.  Vous pouvez par exemple regarder https://wiki.postgresql.org/wiki/Replic … son_matrix, mais il y a énormément d'autres pages recensant les différentes solutions.

Hors ligne

#3 16/06/2020 10:55:47

agi.v
Membre

Re : Réplication logique master master

merci pour votre réponse rjuju. Je pense que je vais abandonner cette solution car elle est compliquée a mettre en place pour un simple débutant.

Hors ligne

Pied de page des forums