我可以在 PostgreSQL 中跨表 select 数据吗?

Can I select data across tables in PostgreSQL?

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

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

问题是,如何在所有模式中 select 人 table 的所有姓名?如果它可以像这样 return 每个记录的模式名称就更好了:

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

你可以写一个为你写查询的查询。如果您使用 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