0

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

请参阅以下示例。

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 上的失败语句?

4

1 回答 1

0

使用 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)
于 2019-07-31T05:40:34.137 回答