Tue Jul 23 00:27:47 PDT 2013
- Previous message: [Slony1-general] EXECUTE SCRIPT and DML
- Next message: [Slony1-general] EXECUTE SCRIPT and DML
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Dnia 2013-07-22, pon o godzinie 17:37 -0400, Christopher Browne pisze: > The behaviour should be a bit further different... > > > The log triggers are supposed to be suppressed on *all* nodes when > DDL/DML is being run via EXECUTE SCRIPT by virtue of having the GUC > set to "local". > > > In effect, what's to happen is... > > > - Start of EXECUTE SCRIPT processing: > set session_replication_role to local; > > > - Process DDL/DML statements > > > - set session_replication_role to replica; > Thanks for answers. I've managed to narrow it down to one case: SELECT from one table run with slonik_execute_script calls a function which in turn INSERTs into another table. Both tables are in the same replication set. In the node log I have: 2013-05-23 12:01:58 CEST CONFIG remoteWorkerThread_1: DDL Statement 17: [ INSERT INTO euro_audit.b24_messages_aud( id, rev, revtype, page_label, "content", wysiwygable, content_for_mobile_active, content_for_mobile, note, message_type_id) SELECT id, getRevId('Inicjalizacja wersjonowania','MESSAGE'), 0, page_label, "content", wysiwygable, content_for_mobile_active, content_for_mobile, note, message_type_id FROM euro.b24_messages WHERE page_label = 'not-added-services-shop-delivery-encouragement-message';] 2013-05-23 12:01:58 CEST ERROR DDL Statement failed - PGRES_FATAL_ERROR In postgres log at the receiver end I have: [2013-05-23 12:01:58 CEST] slony1 at 10.1.12.21(39802):si_euro [21146] 519de916.529a/11:3799790 ERROR: duplicate key value violates unique constraint "revisions_pkey" [2013-05-23 12:01:58 CEST] slony1 at 10.1.12.21(39802):si_euro [21146] 519de916.529a/12:3799790 DETAIL: Key (id)=(1) already exists. [2013-05-23 12:01:58 CEST] slony1 at 10.1.12.21(39802):si_euro [21146] 519de916.529a/13:3799790 CONTEXT: SQL statement "INSERT INTO euro_audit.revisions( The function in question: si_euro=# \sf getrevid (text,text) CREATE OR REPLACE FUNCTION public.getrevid(rev_comment text, audit_class_name text) RETURNS bigint LANGUAGE plpgsql AS $function$ DECLARE rev_id bigint := 0; BEGIN IF audit_class_name IS NULL OR audit_class_name NOT SIMILAR TO '(ARTICLE|CMS_PAGE|DEFINITION|EMAIL|IP_RULE |MESSAGE|PRODUCT_PROMOTION_PRICE| SHOP_IN_SHOP_BANNER|SHOP_IN_SHOP |STATUS_CODE|SYSTEM_PARAMETER| XSL_DEFINITION|BANNER|SHOP)' THEN RAISE EXCEPTION 'Wywołanie getRevId(%,%) przerwane. Taki audit_class_name nie istnieje - patrz AuditableEntityClasses',rev_comment, audit_class_name; END IF; INSERT INTO euro_audit.revisions( "comment", "timestamp", user_name, class_name) VALUES (rev_comment, extract('epoch' from CURRENT_TIMESTAMP) * 1000, 'System', audit_class_name); rev_id = currval('euro_audit.revisions_id_seq'); return rev_id; END; $function$ Other DML statements done with slonik_execute_script do _not_ produce such errors. Is it possible that function execution does not obey session_replication_role settings? Regards, -- Robert Wysocki administrator systemów linuksowych administrator baz danych Grupa Unity | ul. Przedmiejska 6-10, 54-201 Wrocław ul. Conrada 55B, 31-357 Kraków | ul. Złota 59, 00-120 Warszawa
- Previous message: [Slony1-general] EXECUTE SCRIPT and DML
- Next message: [Slony1-general] EXECUTE SCRIPT and DML
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-general mailing list