首页 > 解决方案 > 如何中止 AgnsGraph 上的失败语句?

问题描述

语句失败后,没有其他语句可以成功。

请参阅以下示例。

agens=# create graph graph;
CREATE GRAPH
agens=# create vlabel v;
CREATE VLABEL
agens=# create unique property index on v ( id );
CREATE PROPERTY INDEX
agens=# begin transaction;
BEGIN
agens=# create (:v{id:1});
GRAPH WRITE (INSERT VERTEX 1, INSERT EDGE 0)
agens=# create (:v{id:1});
ERROR:  duplicate key value violates unique constraint "v_id_idx"
DETAIL:  Key ((properties.'id'::text))=(1) already exists.
agens=# create (:v{id:2});
ERROR:  current transaction is aborted, commands ignored until end of transaction block
agens=# commit;
ROLLBACK
agens=# match (n:v) return n;
 n 
---
(0 rows)

如何中止 AgnsGraph 上的失败语句?

标签: agens-graph

解决方案


使用 SAVEPOINT 中止部分回滚。

agens=# begin transaction;
BEGIN
agens=# create (:v{id:1});
GRAPH WRITE (INSERT VERTEX 1, INSERT EDGE 0)
agens=# savepoint sp;
SAVEPOINT
agens=# create (:v{id:1});
ERROR:  duplicate key value violates unique constraint "v_id_idx"
DETAIL:  Key ((properties.'id'::text))=(1) already exists.
agens=# rollback to sp;
ROLLBACK
agens=# create (:v{id:2});
GRAPH WRITE (INSERT VERTEX 1, INSERT EDGE 0)
agens=# commit;
COMMIT
agens=# match (n:v) return n;
        n        
-----------------
 v[3.1]{"id": 1}
 v[3.3]{"id": 2}
(2 rows)

推荐阅读