【发布时间】:2014-08-28 09:53:55
【问题描述】:
我是 Postgres 的新手,我有一个包含多个相同结构表的数据库。我需要从每个表中选择符合特定条件的数据。
我可以用一堆UNION 查询来做到这一点,但是我需要搜索的表的数量会随着时间的推移而改变,所以我不想这样硬编码。我一直在尝试开发一个函数,它将遍历特定的表(它们有一个共同的命名约定)并返回一个记录表,但是当我查询该函数时我没有得到任何结果。功能代码如下:
CREATE OR REPLACE FUNCTION public.internalid_formaltable_name_lookup()
RETURNS TABLE(natural_id text, name text, natural_id_numeric text) AS
$BODY$
DECLARE
formal_table text;
begin
FOR formal_table IN
select table_name from information_schema.tables
where table_schema = 'public' and table_name like 'formaltable%'
LOOP
EXECUTE 'SELECT natural_id, name, natural_id_numeric
FROM ' || formal_table ||
' WHERE natural_id_numeric IN (
select natural_id_numeric from internal_idlookup
where internal_id = ''7166571'')';
RETURN NEXT;
END LOOP;
Return;
END;
$BODY$
LANGUAGE plpgsql;
我在尝试使用该函数时没有收到任何错误,但它没有返回任何行:
SELECT * From internalid_formaltable_name_lookup();
知道我哪里出错了吗?
【问题讨论】:
-
你不能创建一个父表并继承子表,这样如果它们的结构相似,你就可以只查询一个表吗?
-
你在“RETURN NEXT expr”中的表达也是空的。
标签: postgresql for-loop plpgsql dynamic-sql set-returning-functions