首页 > 解决方案 > 我可以在 PostgreSQL 中跨表选择数据吗?

问题描述

我有一个具有多个模式的数据库。我不知道模式的名称,我只知道它们以“myschema_”为前缀。所有模式都是相同的,它们具有下表:

CREATE TABLE person
(
    name VARCHAR(100),
    age int
);

问题是,如何从所有模式的人员表中选择所有名称?如果它可以像这样返回每条记录的模式名称,那就更好了:

|  schema  | name  |
|----------|-------|
|myschema_1| David |
|myschema_2| Peter |

标签: sqlpostgresqlselectschema

解决方案


您可以编写一个为您编写查询的查询。如果你正在使用psql,你可以使用\gexec它来执行它:

SELECT string_agg(
          format(
             'SELECT name, age FROM %I.person',
             schema_name
          ),
          ' UNION ALL '
       )
FROM information_schema.schemata
WHERE schema_name LIKE 'myschema_%' \gexec

推荐阅读