Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL规则中的无限递归_Postgresql - Fatal编程技术网

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

我正在插入大量数据,并将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_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.ex
table1_数据
并创建一个包含所有CRUD规则的
table1
命名视图(由
table1_数据
支持)。你的ORM永远不会知道它在和一个视图说话,而不是一个“真实”的表。@pozs这就做到了,不需要自依性,也不需要额外的列,谢谢!此外,我还必须使用ON CONFLICT DO UPDATE,因为ORM抱怨它影响了0行,而它预期会影响1行。请写下你的评论作为答案,以便标记