PostgreSql:获取引用(通过外键)表中特定行的所有行

PostgreSql:获取引用(通过外键)表中特定行的所有行,第1张

概述这看起来很简单,但我无法找到这个问题的答案. 我想要什么?一个包含行的主表,只要它们不被引用(通过外键)就会自行删除.解决方案可能是也可能不是PostgreSql特有的. 怎么样?我解决此问题的方法之一(实际上,到目前为止唯一的方法)涉及以下内容:对于引用此主表的每个表,在行的UPDATE或DELETE上,检查master中引用的行,还有多少其他其他行仍然引用引用的行.如果它下降到零,那么我也删除 这看起来很简单,但我无法找到这个问题的答案.

我想要什么?一个包含行的主表,只要它们不被引用(通过外键)就会自行删除.解决方案可能是也可能不是Postgresql特有的.

怎么样?我解决此问题的方法之一(实际上,到目前为止唯一的方法)涉及以下内容:对于引用此主表的每个表,在行的UPDATE或DELETE上,检查master中引用的行,还有多少其他其他行仍然引用引用的行.如果它下降到零,那么我也删除master中的那一行.

(如果你有更好的主意,我想知道!)

详细地:
我有一个由其他许多人引用的主表

CREATE table master (  ID serial primary key,name text unique not null);

所有其他表通常具有相同的格式:

CREATE table other (  ...  master_ID integer references master (ID)  ...);

如果其中一个不是NulL,则它们引用master中的一行.如果我转到此并尝试删除它,我将收到一条错误消息,因为它已经被引用:

ERROR:  update or delete on table "master" violates foreign key constraint "other_master_ID_fkey" on table "other"DETAIL:  Key (ID)=(1) is still referenced from table "other".Time: 42.972 ms

请注意,即使我有许多引用master的表,也不需要太长时间来解决这个问题.如何在不提出错误的情况下找到此信息?

您可以执行以下 *** 作之一:

1)将reference_count字段添加到主表.每当添加具有此master_ID的行时,在详细信息表上使用触发器会增加引用计数.删除行时减少计数.当reference_count达到0时 – 删除记录.

2)使用pg_constraint表(详细信息here)获取引用表的列表并创建动态SQL查询.

3)在每个详细信息表上创建触发器,删除主表中的master_ID.使用BEGIN … EXCEPTION … END消除错误消息.

总结

以上是内存溢出为你收集整理的PostgreSql:获取引用(通过外键)表中特定行的所有行全部内容,希望文章能够帮你解决PostgreSql:获取引用(通过外键)表中特定行的所有行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1165528.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存