sql/functions/pgq.maint_tables_to_vacuum.sql
create or replace function pgq.maint_tables_to_vacuum()
returns setof text as $$
-- ----------------------------------------------------------------------
-- Function: pgq.maint_tables_to_vacuum(0)
--
-- Returns list of tablenames that need frequent vacuuming.
--
-- The goal is to avoid hardcoding them into maintenance process.
--
-- Returns:
-- List of table names.
-- ----------------------------------------------------------------------
declare
scm text;
tbl text;
fqname text;
begin
-- assume autovacuum handles them fine
if current_setting('autovacuum') = 'on' then
return;
end if;
for scm, tbl in values
('pgq', 'subscription'),
('pgq', 'consumer'),
('pgq', 'queue'),
('pgq', 'tick'),
('pgq', 'retry_queue'),
('pgq_ext', 'completed_tick'),
('pgq_ext', 'completed_batch'),
('pgq_ext', 'completed_event'),
('pgq_ext', 'partial_batch'),
--('pgq_node', 'node_location'),
--('pgq_node', 'node_info'),
('pgq_node', 'local_state'),
--('pgq_node', 'subscriber_info'),
--('londiste', 'table_info'),
('londiste', 'seq_info'),
--('londiste', 'applied_execute'),
--('londiste', 'pending_fkeys'),
('txid', 'epoch'),
('londiste', 'completed')
loop
select n.nspname || '.' || t.relname into fqname
from pg_class t, pg_namespace n
where n.oid = t.relnamespace
and n.nspname = scm
and t.relname = tbl;
if found then
return next fqname;
end if;
end loop;
return;
end;
$$ language plpgsql;