我想打印从查询中获取的所有表。但是我的代码只显示函数的名称。
# create or replace function remove_scene()
# RETURNS void AS $$
# DECLARE
# row record;
# BEGIN
# FOR row IN
# select table_name from information_schema.tables WHERE table_schema = 'public' AND table_name ~ 'measurement[0-9]'
# LOOP
# RAISE NOTICE '** %', quote_ident(row.table_name);
# END LOOP;
# END;
# $$ LANGUAGE plpgsql;
CREATE FUNCTION
# select remove_scene();
remove_scene
--------------
(1 row)
#
答案 0 :(得分:0)
你没有看到任何东西的原因是你的功能没有返回任何东西。使用RAISE NOTICE
“写入”的文本只会在客户端显示,如果a)客户端支持(psql支持)和b)如果您的会话配置为实际返回它们。为了在psql
中看到你的加注,你需要使用:
set client_min_messages = NOTICE;
您当前的设置可能是WARNING
,因此不会显示NOTICE
。
但是:在RAISE NOTICE
的循环中执行此操作效率非常低。将函数更改为集合返回函数会更好:
create or replace function remove_scene()
RETURNS table(table_name text)
AS $$
select table_name
from information_schema.tables
WHERE table_schema = 'public'
AND table_name ~ 'measurement[0-9]'
$$
LANGUAGE sql;
然后像这样使用它:
select *
from remove_scene();
另一个选择是将select语句放入视图中。