我正在编写一个简单的 plpgsql 函数来测试我必须使用 information_schema.columns 表在各种表上动态运行指标的想法。该函数工作正常,但是当我在 information_schema 表中使用 info 生成要传递给我的函数的表名时,我在标题中收到错误消息:
ERROR: function cannot execute on segment because it accesses relation "my_table"
这是简单的功能(原理证明):
create or replace function count_rows(table_name text, column_name text)
returns bigint as $$
declare
n bigint;
BEGIN
execute 'select count(*) from (select ' || column_name || ' from ' || table_name || ') as t' into n;
return n;
END;
$$ language 'plpgsql';
此查询(以及因此的功能)工作正常:
select * from count_rows('my_table','my_column'); -- works correctly!
但是使用来自 information_schema.columns 表的输入的查询失败并出现上述错误:
select table_name, column_name, count_rows(table_name, column_name) as num_rows
from information_schema.columns where table_name = 'my_table'; -- doesnt work
这个错误信息是什么意思?为什么不能这样查询information_schema中列出的表呢?