File: trigger_sess_role.out

package info (click to toggle)
pgq 3.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 808 kB
  • sloc: sql: 3,442; ansic: 2,013; python: 309; makefile: 84; sh: 1
file content (129 lines) | stat: -rw-r--r-- 3,499 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
\set VERBOSITY 'terse'
set client_min_messages = 'warning';
create or replace function pgq.insert_event(queue_name text, ev_type text, ev_data text, ev_extra1 text, ev_extra2 text, ev_extra3 text, ev_extra4 text)
returns bigint as $$
declare
    ev_id int8;
begin
    raise warning 'calling insert_event_raw';
    ev_id := pgq.insert_event_raw(queue_name, null, now(), null, null,
        ev_type, ev_data, ev_extra1, ev_extra2, ev_extra3, ev_extra4);
    raise warning 'insert_event(q=[%], t=[%], d=[%], 1=[%], 2=[%], 3=[%], 4=[%]) = %',
        queue_name, ev_type, ev_data, ev_extra1, ev_extra2, ev_extra3, ev_extra4, ev_id;
    return ev_id;
end;
$$ language plpgsql;
select pgq.create_queue('jsontriga_role');
 create_queue 
--------------
            1
(1 row)

select pgq.create_queue('logutriga_role');
 create_queue 
--------------
            1
(1 row)

select pgq.create_queue('sqltriga_role');
 create_queue 
--------------
            1
(1 row)

update pgq.queue set queue_disable_insert = true where queue_name = 'jsontriga_role';
update pgq.queue set queue_disable_insert = true where queue_name = 'logutriga_role';
update pgq.queue set queue_disable_insert = true where queue_name = 'sqltriga_role';
-- create tables
create table jsontriga_role (dat1 text primary key);
create table logutriga_role (dat1 text primary key);
create table sqltriga_role (dat1 text primary key);
create trigger trig after insert or update or delete on jsontriga_role
for each row execute procedure pgq.jsontriga('jsontriga_role');
create trigger trig after insert or update or delete on logutriga_role
for each row execute procedure pgq.logutriga('logutriga_role');
create trigger trig after insert or update or delete on sqltriga_role
for each row execute procedure pgq.sqltriga('sqltriga_role');
-- origin: expect insert_event error
show session_replication_role;
 session_replication_role 
--------------------------
 origin
(1 row)

insert into jsontriga_role values ('a');
WARNING:  calling insert_event_raw
ERROR:  Insert into queue disallowed
insert into logutriga_role values ('a');
WARNING:  calling insert_event_raw
ERROR:  Insert into queue disallowed
insert into sqltriga_role values ('a');
WARNING:  calling insert_event_raw
ERROR:  Insert into queue disallowed
-- local: silence, trigger does not call insert_event
set session_replication_role = 'local';
show session_replication_role;
 session_replication_role 
--------------------------
 local
(1 row)

insert into jsontriga_role values ('b');
insert into logutriga_role values ('b');
insert into sqltriga_role values ('b');
-- replica: silence, trigger does not call insert_event
set session_replication_role = 'replica';
show session_replication_role;
 session_replication_role 
--------------------------
 replica
(1 row)

insert into jsontriga_role values ('c');
insert into logutriga_role values ('c');
insert into sqltriga_role values ('c');
select * from jsontriga_role;
 dat1 
------
 b
 c
(2 rows)

select * from logutriga_role;
 dat1 
------
 b
 c
(2 rows)

select * from sqltriga_role;
 dat1 
------
 b
 c
(2 rows)

-- restore
set session_replication_role = 'origin';
drop table jsontriga_role;
drop table logutriga_role;
drop table sqltriga_role;
select pgq.drop_queue('jsontriga_role');
 drop_queue 
------------
          1
(1 row)

select pgq.drop_queue('logutriga_role');
 drop_queue 
------------
          1
(1 row)

select pgq.drop_queue('sqltriga_role');
 drop_queue 
------------
          1
(1 row)

\set ECHO none