使用Postgres从多个模式中选择(检索)所有记录

Mar*_*ato 4 sql postgresql inheritance database-design postgresql-8.4

我有一个PostgreSQL数据库,其中包含一些模式,如下所示:

My_Database
 |-> Schemas
    |-> AccountA
    |-> AccountB
    |-> AccountC
    |-> AccountD
    |-> AccountE
           .
           .
           .
    |-> AccountZ
Run Code Online (Sandbox Code Playgroud)

所有的模式都有一个名为表product具有称为列title.我想知道是否可以执行select语句来检索具有特定条件的所有模式的所有记录.

我到目前为止找到的唯一方法是按帐户运行查询帐户,如下所示.

SET search_path TO AccountA;

SELECT title FROM product WHERE title ILIKE '%test%';
Run Code Online (Sandbox Code Playgroud)

模式是动态创建的,因此我不知道它们的名称或存在多少名称.

Erw*_*ter 7

随着 产业喜欢@Denis提到,这将是非常简单的.也适用于Postgres 8.4.一定要考虑这些限制.

基本上,你会有一个主表,我想在一个主模式中:

CREATE TABLE master.product (title text);
Run Code Online (Sandbox Code Playgroud)

各种模式中的所有其他表都继承自它,可能会添加更多本地列:

CREATE TABLE a.product (product_id serial PRIMARY KEY, col2 text)
INHERITS (master.product);

CREATE TABLE b.product (product_id serial PRIMARY KEY, col2 text, col3 text)
INHERITS (master.product);
Run Code Online (Sandbox Code Playgroud)

等等

表不必共享相同的名称或架构.
然后你可以 一举查询所有表格:

SELECT title, tableoid::regclass::text AS source
FROM   master.product
WHERE  title ILIKE '%test%';
Run Code Online (Sandbox Code Playgroud)

tableoid::regclass::text
这是一种方便的方式来告诉每一行的来源.细节:

SQL小提琴.