【发布时间】:2014-08-25 21:24:29
【问题描述】:
我在 PostgreSQL 数据库服务器的多个模式中有一个相同的表。我需要 执行如下查询:
CREATE OR REPLACE FUNCTION git_search() RETURNS SETOF git_log AS $$
DECLARE
sch name;
BEGIN
FOREACH sch IN
select schema_name from information_schema.schemata where schema_name not in ('pg_toast','pg_temp_1','pg_toast_temp_1','pg_catalog','information_schema')
LOOP
qry := 'select count(*) from'|| quote_ident(sch) || '.git_log gl where gl.author_contributor_id = 17';
RETURN QUERY qry;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
select git_search();
但我有错误:
错误:“git_log”类型不存在
SQL 状态:42704
git_log 表在脚本的第一行中是未知的。 (子句CREATE)
有人可以帮帮我吗?
我需要在 100 多个模式中执行针对这种情况进行调整的查询。做这个的最好方式是什么?我可以在哪里为此目的创建函数?
【问题讨论】:
-
推测
git_log在创建函数的架构中不是已知类型。 -
@GordonLinoff 我需要在 100 多个模式中执行针对这种情况进行调整的查询。做这个的最好方式是什么?我可以在哪里为此目的创建函数?
-
您需要定义一个类型,该类型可以是字符串(对于当前编写函数的方式)或整数(假设您的意思是返回查询执行)。
-
抱歉,Gordon 的 cmets 完全不正确。您在其中创建函数的模式与此处的任何内容无关。您不必定义更多类型,当然不是
a type that is either a string .. or an integer。请忽略这一点。我发布了一个全面的答案。 -
@ErwinBrandstetter 感谢您的帮助,现在脚本可以正常工作了。
标签: sql postgresql plpgsql dynamic-sql postgresql-9.3