PostgreSQL规则中的无限递归
我正在插入大量数据,并将EF Core用作ORM,由于并发性的原因,数据的主键可能会不时发生冲突。我正在尝试在PostgresSQL中创建一个规则,以便拦截INSERT调用并将其转换为INSERT。。。在冲突中什么也不做。我定义了一个规则,但是PostgreSQL抱怨它检测到了无限递归:PostgreSQL规则中的无限递归,postgresql,Postgresql,我正在插入大量数据,并将EF Core用作ORM,由于并发性的原因,数据的主键可能会不时发生冲突。我正在尝试在PostgresSQL中创建一个规则,以便拦截INSERT调用并将其转换为INSERT。。。在冲突中什么也不做。我定义了一个规则,但是PostgreSQL抱怨它检测到了无限递归: CREATE OR REPLACE RULE table1_insert_on_conflict_rule AS ON INSERT TO public.table1 WHERE new.ignore_dupl
CREATE OR REPLACE RULE table1_insert_on_conflict_rule AS
ON INSERT TO public.table1
WHERE new.ignore_duplicate_pkey IS TRUE
DO INSTEAD INSERT INTO table1 (id, col1, ignore_duplicate_pkey)
VALUES (new.id, new.col1, false) ON CONFLICT DO NOTHING;
有没有关于如何实现我想要的目标的想法?使用触发器而不是高并发性,基于触发器的解决方案可能会失败。您可以将表重命名为f.ex
table1_数据
并创建一个包含所有CRUD规则的table1
命名视图(由table1_数据
支持)。你的ORM永远不会知道它在和一个视图说话,而不是一个“真实”的表。@pozs这就做到了,不需要自依性,也不需要额外的列,谢谢!此外,我还必须使用ON CONFLICT DO UPDATE,因为ORM抱怨它影响了0行,而它预期会影响1行。请写下您的评论作为答案,这样可以标记为使用触发器,而不是使用高并发性,基于触发器的解决方案可能会失败。您可以将表重命名为f.extable1_数据
并创建一个包含所有CRUD规则的table1
命名视图(由table1_数据
支持)。你的ORM永远不会知道它在和一个视图说话,而不是一个“真实”的表。@pozs这就做到了,不需要自依性,也不需要额外的列,谢谢!此外,我还必须使用ON CONFLICT DO UPDATE,因为ORM抱怨它影响了0行,而它预期会影响1行。请写下你的评论作为答案,以便标记