暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG使用 INHERITS 创建的子表注意事项

原创 岳麓丹枫 2024-12-02
259

在 PostgreSQL 中,使用 INHERITS 创建的子表对主表的更改行为如下:


1. 新增字段

  • 行为:子表会自动继承主表新增的字段。

  • 示例

    CREATE TABLE parent_table (id SERIAL PRIMARY KEY, name TEXT); CREATE TABLE child_table () INHERITS (parent_table); ALTER TABLE parent_table ADD COLUMN age INT;

    结果child_table 会自动包含 age 字段。


2. 创建索引

  • 行为:主表创建的索引不会自动应用到子表。
    如果需要在子表上创建相同的索引,需手动执行或使用脚本。

  • 示例

    CREATE INDEX idx_name ON parent_table (name);

    结果:索引 idx_name 只存在于 parent_table,不会影响 child_table

    解决方案:使用脚本遍历子表手动创建索引。


3. 新增约束

  • 主键或唯一约束:不会自动继承,需要在每个子表中手动添加。
    ALTER TABLE parent_table ADD CONSTRAINT unique_name UNIQUE (name);
    结果:唯一约束只作用于主表的数据,child_table 的数据不受影响。
  • 外键约束: 不会自动继承,需要在每个子表中手动添加
-- 创建父表和引用表 CREATE TABLE referenced_table ( id SERIAL PRIMARY KEY ); CREATE TABLE parent_table ( id SERIAL PRIMARY KEY, ref_id INT ); -- 创建子表 CREATE TABLE child_table () INHERITS (parent_table); -- 给父表添加外键约束 ALTER TABLE parent_table ADD CONSTRAINT fk_ref FOREIGN KEY (ref_id) REFERENCES referenced_table (id); -- 结果: parent_table 上的 ref_id 会被强制约束,必须引用 referenced_table 中的 id child_table 不会继承此外键约束。子表中的 ref_id 列可以存储不符合外键约束的数据。 如何手动为子表添加外键约束? 如果需要对子表也应用相同的外键约束,必须手动为子表添加约束: ALTER TABLE child_table ADD CONSTRAINT fk_ref_child FOREIGN KEY (ref_id) REFERENCES referenced_table (id);
  • 检查约束(CHECK):子表会继承主表新增的检查约束。

    ALTER TABLE parent_table ADD CONSTRAINT check_age CHECK (age > 0);

    结果child_table 会自动继承 check_age


4. 修改字段类型

  • 行为:子表会自动继承主表字段类型的修改。

  • 示例

    ALTER TABLE parent_table ALTER COLUMN name TYPE VARCHAR(50);

    结果child_tablename 字段类型会自动修改为 VARCHAR(50)


5. 删除字段

  • 行为:如果在主表中删除字段,子表的对应字段也会被删除。

  • 示例

    ALTER TABLE parent_table DROP COLUMN age;

    结果child_tableage 字段也会被删除。


总结

主键、外键、唯一键约束以及创建索引不会继承
新增字段,删除字段,修改字段类型会继承

操作 是否继承到子表 备注
新增字段 自动继承到子表
创建索引 需手动在子表创建
新增主键/唯一约束/外键约束 需手动在子表创建
新增检查约束 自动继承到子表
修改字段类型 自动继承到子表
删除字段 自动从子表删除
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论