希望这是一个非常直截了当的问题。
我有一个简单的SELECT查询(内置了一些子查询)。我有超过40个数据库,我需要为所有数据库运行此查询(所有数据库都具有相同的模式)并将结果返回到一个大表中。
我正在想象一个循环序列(比如javascript的i = 0; i< 40; i ++),它带有一个定义的变量,一旦它运行所有的DB就会自动停止。
(我在Navicat工作,这可能没关系)
谢谢!
答案 0 :(得分:0)
如果有人需要更多有关如何进行跨数据库查询的示例,下面的示例将清理每个拥有该数据库的数据库上的databasechangeloglock
表:
CREATE EXTENSION IF NOT EXISTS dblink;
DO
$$
DECLARE database_name TEXT;
DECLARE conn_template TEXT;
DECLARE conn_string TEXT;
DECLARE table_exists Boolean;
BEGIN
conn_template = 'user=myuser password=mypass dbname=';
FOR database_name IN
SELECT datname FROM pg_database
WHERE datistemplate = false
LOOP
conn_string = conn_template || database_name;
table_exists = (select table_exists_ from dblink(conn_string, '(select Count(*) > 0 from information_schema.tables where table_name = ''databasechangeloglock'')') as (table_exists_ Boolean));
IF table_exists THEN
perform dblink_exec(conn_string, 'delete from databasechangeloglock');
END IF;
END LOOP;
END
$$