summaryrefslogtreecommitdiff
path: root/sql/pgq_node
diff options
context:
space:
mode:
authorMarko Kreen2012-09-12 08:37:24 +0000
committerMarko Kreen2012-09-12 08:37:24 +0000
commitbdab56341b2d7b89686cd37168ebb26687ee13d2 (patch)
tree08d18029a7cef978dd4b544ec665d31bc854239c /sql/pgq_node
parentc9bad7592aa89efe8d27c71cd6ca418ae5a243e5 (diff)
pgq_node.demote_root: decrease lock level
Otherwise demote can get stuck on pg_dump. Also lock all event tables, not only current as the current one can change.
Diffstat (limited to 'sql/pgq_node')
-rw-r--r--sql/pgq_node/functions/pgq_node.demote_root.sql9
1 files changed, 7 insertions, 2 deletions
diff --git a/sql/pgq_node/functions/pgq_node.demote_root.sql b/sql/pgq_node/functions/pgq_node.demote_root.sql
index 420bd281..d3f68d03 100644
--- a/sql/pgq_node/functions/pgq_node.demote_root.sql
+++ b/sql/pgq_node/functions/pgq_node.demote_root.sql
@@ -32,6 +32,7 @@ declare
w_name text;
sql text;
ev_id int8;
+ ev_tbl text;
begin
select node_type, worker_name into n_type, w_name
from pgq_node.node_info
@@ -48,7 +49,9 @@ begin
return;
end if;
if i_step > 1 then
- perform 1 from pgq.queue
+ select queue_data_pfx
+ into ev_tbl
+ from pgq.queue
where queue_name = i_queue_name
and queue_disable_insert
and queue_external_ticker;
@@ -71,7 +74,9 @@ begin
into ret_code, ret_note;
elsif i_step = 2 then
set local session_replication_role = 'replica';
- sql := 'lock table ' || pgq.current_event_table(i_queue_name);
+
+ -- lock parent table to stop updates, allow reading
+ sql := 'lock table ' || ev_tbl || ' in exclusive mode';
execute sql;