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