PostgreSql:获取引用(通过外键)表中特定行的所有行
这看起来很简单,但我无法找到这个问题的答案.
我想要什么?一个包含行的主表,只要它们不被引用(通过外键)就会自行删除.解决方案可能是也可能不是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消除错误消息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – 无法将自定义配置部分保存到app.config
- objective-c – 使用Xcode分析(产品>分析)有没有办法忽略给
- 使用Xpath对XML进行模糊查询
- AJAX 状态值(readyState)与状态码(status)详解
- vb.net – 在VBA复制错误中复制工作表
- SQLite Expert表分离和解决SQLite Expert删除表后大小不变的
- 敏捷方式:集成测试与功能测试或两者兼而有之?
- xcode – 如何在同一源文件中有条件地编译特定于版本的Swif
- c# – Linq表达式如何确定平等?
- c# – 将Unity连接到没有System.Net.Sockets的C WinSocket