我正在尝试运行一个SELECT
查询,然后对于每个结果,我想在控制台中打印一些内容。但是,我没有结果,也不知道为什么。如果我自己运行SELECT
,我会执行获取表名。
create or replace function test()
RETURNS void AS
$body$
DECLARE
elem text;
begin
FOR elem IN
SELECT table_name FROM information_schema.tables WHERE table_name ~ 'api_configuration_'
LOOP
raise notice 'Table name is: %', elem;
END LOOP;
end;
$body$
LANGUAGE plpgsql
我要打印查询中找到的每个table_name
答案 0 :(得分:1)
您排除了可见性问题(缺少感兴趣的表的特权)。参见:
RAISE NOTICE
在与查询结果不同的通道上返回消息-(“数据输出”)。我怀疑以下情况之一:
找错地方了?这取决于您未公开的客户。在标准GUI pgAdmin III或pgAdmin4中,“数据输出”和 “消息” ...
client_min_messages
的设置是否高于NOTICE
?在函数中尝试RAISE WARNING
;但不是EXCEPTION
,这会立即取消执行。或重置GUC-您可以在当前会话中进行本地测试,而无需更改服务器配置:
SET client_min_messages = 'NOTICE';
然后重试。
要快速验证PL / pgSQL循环和查询是否按预期工作,请尝试将此等效功能与实际的数据输出:
CREATE OR REPLACE FUNCTION test()
RETURNS SETOF text AS
$func$
DECLARE
elem text;
BEGIN
FOR elem IN
SELECT table_name FROM information_schema.tables
WHERE table_name ~ 'api_configuration_'
LOOP
RETURN NEXT elem;
-- RAISE NOTICE 'Table name is: %', elem;
END LOOP;
END
$func$ LANGUAGE plpgsql;
致电:
SELECT * FROM test();