Я на версии 12 - на Windows
Когда я запускаю это, я получаю зависание во втором SELECT на том же соединении: я попытался dblink_connect & disconnect в комбинации varoius - и назвав мои соединения - но не повезло.
Мне нужно l oop через все базы данных и извлечь некоторую информацию - это всего лишь пример из 10 или около того запросов, которые мне нужно выполнить для каждой базы данных
Что я делаю не так:
CREATE EXTENSION IF NOT EXISTS dblink;
do --- anynym kodeblock med do $$, ned til end $$
$$
DECLARE database_name TEXT;
DECLARE conn_template TEXT;
DECLARE conn_string TEXT;
begin
-- definer temp tabellen
drop table if exists mette_temp_vacuum;
create temporary table mette_temp_vacuum as
select '' dbname, max(last_vacuum) last_vacuum, max(last_autovacuum)last_autovacuum ,
max(last_analyze) last_analyze,max(last_autoanalyze) last_autoanalyze
from pg_stat_user_tables
where 1 = 2;
truncate table mette_temp_vacuum;
drop table if exists mette_temp_top10;
create temporary table mette_temp_top10 as
select null dbname, schemaname , relname ,
(pg_total_relation_size(relid)) as total_size,
(pg_relation_size(relid)) as data_size,
(pg_total_relation_size(relid) - pg_relation_size(relid)) as external_size
from pg_catalog.pg_statio_user_tables
where 1 = 2;
truncate table mette_temp_top10;
conn_template = 'user=postgres password=mette dbname=';
FOR database_name IN
SELECT datname FROM pg_database
WHERE datistemplate = false
loop
conn_string = conn_template || database_name;
insert into mette_temp_vacuum
select * from dblink(conn_string,
'select '''|| database_name || ''' dbname, max(last_vacuum), max(last_autovacuum) ,
max(last_analyze) ,max(last_autoanalyze) from pg_stat_user_tables')
as t1(dbname text, last_autovacuum timestamp with time zone, last_autoanalyze timestamp with time zone,
last_vacuum timestamp with time zone, last_analyze timestamp with time zone) ;
/* results in a HANG .... whn not commented out
insert into mette_temp_top10
select * from dblink( conn_string,
'select '''|| database_name || ''' dbname, schemaname , relname ,
(pg_total_relation_size(relid)) as total_size,
(pg_relation_size(relid)) as data_size,
(pg_total_relation_size(relid) - pg_relation_size(relid)) as external_size
from pg_catalog.pg_statio_user_tables
order by pg_total_relation_size(relid) desc,
pg_relation_size(relid) desc
limit 10')
as t1(dbname text, schemaname text, relname text, total_size decimal, data_size decimal , external_size decimal) ;
*/
end loop;
END
$$