Postgres:如何在循环中打印值

时间:2014-10-28 14:22:51

标签: postgresql

我想打印从查询中获取的所有表。但是我的代码只显示函数的名称。

# 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)

#

1 个答案:

答案 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语句放入视图中。