为元数据创建模板架构是否安全,以便其他包含数据的架构可以从中继承?
优势:对于多租户方案,迁移将是无缝的。
缺点:?
示例:
hello=# CREATE SCHEMA template;
hello=# CREATE TABLE template.cities (
name text,
population real,
altitude int;
hello=# CREATE SCHEMA us;
hello=# CREATE TABLE us.cities () INHERITS (template.cities);
hello=# \d us.cities;
Table "us.cities"
Column | Type | Collation | Nullable | Default
------------+--------------+-----------+----------+---------
name | text | | |
population | real | | |
altitude | integer | | |
Inherits: template.cities
hello=# CREATE SCHEMA eu;
hello=# CREATE TABLE eu.cities () INHERITS (template.cities);
hello=# \d eu.cities;
Table "eu.cities"
Column | Type | Collation | Nullable | Default
------------+--------------+-----------+----------+---------
name | text | | |
population | real | | |
altitude | integer | | |
Inherits: template.cities
hello=# ALTER TABLE cities ADD COLUMN state varchar(30);
hello=# \d us.cities;
Table "us.cities"
Column | Type | Collation | Nullable | Default
------------+-----------------------+-----------+----------+---------
name | text | | |
population | real | | |
altitude | integer | | |
state | character varying(30) | | |
Inherits: template.cities
答案 0 :(得分:0)
我认为继承是解决此问题的好方法。
我可以想到两个缺点:
可以为继承子代创建其他列。如果您控制DDL,则可以避免这种情况。
您仍然必须分别在所有继承子级上创建和修改索引。
如果使用的是PostgreSQL v11或更高版本,则可以通过使用分区来防止这两个问题。各个表将成为“模板”表的分区。这样,您可以通过在模板表上创建分区索引来集中创建索引。缺点(可能使该解决方案无法实现)是您需要在表中使用分区键列。