Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从许多postgres表中全选_Postgresql - Fatal编程技术网

Postgresql 从许多postgres表中全选

Postgresql 从许多postgres表中全选,postgresql,Postgresql,我们有大约40个表,所有表都有相似但不完全相同的字段。每个表都创建了_by和_at字段 我们试图查询一组特定的表,并仅返回创建的_by='john'行中创建的_at字段 到目前为止,我们已经 从结果表中选择已创建的 在哪里 从information_schema.tables中选择table_name 哪里 并创建了_by='john' 内部查询独立工作,并列出正确的表。 我们希望从内部查询中的所有表中创建外部查询 因此,从下表中可以看出: table1 created_by created

我们有大约40个表,所有表都有相似但不完全相同的字段。每个表都创建了_by和_at字段

我们试图查询一组特定的表,并仅返回创建的_by='john'行中创建的_at字段

到目前为止,我们已经

从结果表中选择已创建的 在哪里 从information_schema.tables中选择table_name 哪里 并创建了_by='john' 内部查询独立工作,并列出正确的表。 我们希望从内部查询中的所有表中创建外部查询

因此,从下表中可以看出:

table1
created_by   created_at val
john         12:00      5
sue          13:20      7

table20
created_by   created_at val
john         21:30      3
jane         23:45      21

我们将得到:

12:00
21:30

您可以创建一个访问所有表的函数:

CREATE OR REPLACE FUNCTION some_schema.some_function_name()
returns TABLE(created_by varchar(300), created_at varchar(300))
AS $BODY$
DECLARE
  stmt text;
  BEGIN
    stmt = (
        WITH relevant_tables AS (
           SELECT table_name,
                  CONCAT('SELECT created_by::varchar(300), created_at::varchar(300) FROM ', table_name) as table_query
           FROM information_schema.tables 
           WHERE <some criteria to limit tables being searched>
        )
        SELECT string_agg(table_query, ' UNION ALL ') AS final_query
        FROM relevant_tables a
    );
    return query EXECUTE stmt;
  end; $BODY$
language plpgsql
;

您还可以在喜欢的地方添加任何内容。

您需要编写一个使用动态SQL的函数
SELECT * FROM some_schema.some_function_name()
do $$
DECLARE
i record;
xcreated_at text;

BEGIN

FOR i in  select table_name from information_schema.tables  LOOP

EXECUTE('select created_at from '||i.table_name||' where created_by = ''John''')INTO xcreated_at;
raise notice 'xcreated_at%',xcreated_at;
END LOOP;
END;

$$  ;