Sti*_*nin 1 postgresql trigger foreign-key
背景
我们正在将遗留应用程序从非关系型数据库迁移到 PostgreSQL。
问题
我们希望在许多字段上启用外键以实现未来的数据完整性,以便报告工具可以轻松确定哪些表已链接。某些当前数据无法通过 FK 检查,并且由于连接到数据库的旧应用程序,我们还无法打开 FK。
临时解决方案
一些程序员建议我们禁用数据库上的触发器,如此处所示,这样 FK 就不会被强制执行,但仍可用于报告工具。
题
我担心这会导致一系列其他意想不到的后果,但我不确定它们是什么。谁能消除我的恐惧或解释为什么这是一个非常糟糕的主意?我假设它不好的一个原因是它会禁用所有触发器,而不仅仅是触发 FK 约束的触发器。
您可以使用选项创建外键约束NOT VALID
。然后它们被声明,但不被强制执行:
create table parent (id integer primary key);
create table child (id integer primary key, pid integer);
insert into parent values (1),(2),(3);
insert into child values (1,100),(2,200),(3,300); --<< invalid pid values!
alter table child
add constraint fk_child_parent
foreign key (pid) references p (id) NOT VALID; --<< succeeds
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
856 次 |
最近记录: |