首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个动态模式上循环Sql查询,同时将结果合并

在多个动态模式上循环Sql查询,同时将结果合并
EN

Stack Overflow用户
提问于 2017-03-14 13:15:09
回答 1查看 940关注 0票数 0

因此,我遇到的问题是,我使用的PostgreSql数据库有多个零售商,每个零售商都是一个模式。这些零售商是在公共模式的表中定义的。因此,我需要一个script,dat可以首先从public.tenants表中检索所有这些零售商,然后循环使用.programs表来选择零售商模式:

代码语言:javascript
复制
SELECT * FROM a.programs;
SELECT * FROM b.programs;

我试过了一些变体,但找不到解决这个问题的方法。

我尝试过的SQL脚本:

代码语言:javascript
复制
DO
$do$
DECLARE
    tables CURSOR FOR
        SELECT tenantid
        FROM public.tenants;
BEGIN 
FOR scheme_name IN tables LOOP
    EXECUTE format('SELECT * FROM %s.%s',scheme_name, 'programs');
END LOOP;
END
$do$;

这提供了以下输出:

代码语言:javascript
复制
ERROR:  syntax error at or near ")"
LINE 1: SELECT * FROM (a).programs
                          ^
QUERY:  SELECT * FROM (a).programs
CONTEXT:  PL/pgSQL function inline_code_block line 8 at EXECUTE
********** Error **********

ERROR: syntax error at or near ")"
SQL state: 42601
Context: PL/pgSQL function inline_code_block line 8 at EXECUTE

如何使EXECUTE不以in ()作为动态模式名称?或者这个应用程序根本不可能?

请帮我解决这个问题:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-14 13:29:31

你有多个错误。当前的错误是,您引用的是循环中的记录,而不是该记录的单个字段,而括号是记录的默认字符串显示的一部分。

您还应该使用%I作为用于标识符的占位符,以正确处理引用。

因此,使用以下方法修复了即时错误:

代码语言:javascript
复制
DO
$do$
DECLARE
    tables CURSOR FOR
        SELECT tenantid
        FROM public.tenants;
BEGIN 
FOR rec IN tables LOOP
    EXECUTE format('SELECT * FROM %I.%I', rec.tenantid, 'programs');
END LOOP;
END
$do$;

但是,由于无法从匿名PL/PgSQL块返回这样的结果,这仍然无法工作。你需要把它放到一个函数中:

代码语言:javascript
复制
create or replace function all_programs()
  returns setof a.programs -- or returns table (...)
as
$$
declare
    tables CURSOR FOR
        SELECT tenantid
        FROM public.tenants;
BEGIN 
  FOR rec IN tables LOOP
    return query EXECUTE format('SELECT * FROM %I.%I', rec.tenantid, 'programs');
  END LOOP;
END

$$语言plgpgsql;

然后使用:

代码语言:javascript
复制
select *
from all_programs();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42787039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档