这似乎很简单,但是我一直无法找到这个问题的答案。
我想要什么?
一个具有行的主表,这些行在不再被引用(通过外键)时会自行删除。该解决方案可能特定于PostgreSql,也可能不特定于PostgreSql。
如何?
我解决此问题的方法之一(实际上,到目前为止是唯一的方法)涉及以下内容:对于引用该主表的每个表(在某行UPDATE
或DELETE
某行上),检查主表中被引用的行以及其他多少行仍然参考引用的行。如果它降到零,那么我也要删除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
字段添加到主表。在明细表上使用触发器会增加reference count
每次master_id
添加此行的时间。删除行时减少计数。当reference_count
达到0时-删除记录。
2)使用pg_constraint
table(在此处查看详细信息)获取引用表的列表并创建动态SQL查询。
3)在每个明细表上创建触发器,该触发器将master_id
在主表中删除。使错误消息静音BEGIN ... EXCEPTION ... END
。
引导表有一个获取所有隐藏行的方法: getRowsHidden;布尔型;将所有行隐藏起来,如果您传递show参数true,这些行将再次显示,否则,该方法将只返回隐藏的行。 它也有 getHiddenColumns-获取隐藏列。 getVisibleColumns-获取可见列 但是,如何使用BT方法或JQuery组合获得所有可见行?
问题内容: 有什么方法可以简化此代码,以获取提供的某一列的索引以获取特定行的索引吗?在这种情况下,索引将为,因为我要遍历第一列直到找到“ A”。感觉应该对此有一个linq解决方案,但我无法弄清楚。 问题答案: 如果使用DataTableExtensions.AsEnumerable()方法,则可以使用LINQ查询您的DataTable。然后,您可以用来确定给定谓词的索引:
问题内容: 我需要在SQL Server数据库中删除一个高度引用的表。我如何获取要删除表需要删除的所有外键约束的列表? (与在Management Studio的GUI中单击相比,SQL回答更可取。) 问题答案: 不知道为什么没有人建议,但是我用来查询给定表的外键: 您还可以指定架构: 在未指定架构的情况下,文档规定以下内容: 如果未指定pktable_owner,则适用基础DBMS的默认表可见性
如何按特定单词获取所有数据和订单。例如,我有列名状态。状态为“已批准”、“待定”、“已拒绝”的存储。 如何对数据进行排序,如按降序显示所有状态“待定”?
这是一个简单的问题。我们需要使用YouTube API将所有视频上传到我们的Android应用程序中的频道。根据YouTube API v2.0文档,这是一个非常简单的情况——https://developers . Google . com/YouTube/2.0/developers _ guide _ protocol _ video _ feeds # User _ Uploaded _