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)
模式是动态创建的,因此我不知道它们的名称或存在多少名称.
随着 产业喜欢@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?
这是一种方便的方式来告诉每一行的来源.细节: