fma*_*ark 15 database postgresql postgis
我使用Postgresql和PostGIS扩展进行临时空间分析.我通常在psql中手工构造和发出SQL查询.我总是在一个事务中包装一个分析会话,所以如果我发出一个破坏性的查询,我可以回滚它.
但是,当我发出包含错误的查询时,它会取消该事务.任何进一步的查询都会引出以下警告:
错误:当前事务被中止,命令被忽略直到事务块结束
有没有办法可以解决这个问题?每次我输入错字时回滚事务并重新运行以前的查询都很烦人.
leo*_*loy 11
(更新:不需要手动,我在postgresql邮件列表中询问,并且它已经通过psql客户端中设置的ON_ERROR_ROLLBACK转换为已经实现了此行为)
要详细说明Simon的答案(+1),在您的场景中,您可以在每个交互式查询之后添加一个保存点,始终使用相同的名称(如果查询成功,则会覆盖前一个).如果出现错误,您将返回上次保存的并继续保存.
这种工作模式的一个例子:
db=# select * from test_gral ;
i | t | n
---+------+------
1 | text | 10.0
(1 row)
db=# begin;
BEGIN
db=# insert into test_gral values (2,'xx',20); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# insert into test_gral values (3,'xx',30); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# insert into test_gralxx values (4,'xx',40); savepoint sp;
ERROR: relation "test_gralxx" does not exist
LINE 1: insert into test_gralxx values (4,'xx',40);
^
ERROR: current transaction is aborted, commands ignored until end of transaction block
db=# ROLLBACK TO SAVEPOINT sp;
ROLLBACK
db=# insert into test_gral values (4,'xx',40); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# commit;
COMMIT
db=# select * from test_gral ;
i | t | n
---+------+------
1 | text | 10.0
2 | xx | 20
3 | xx | 30
4 | xx | 40
(4 rows)
Run Code Online (Sandbox Code Playgroud)
关闭该功能是不可能的,但是您可以使用其他功能。有类似保存点的内容:
http://www.postgresql.org/docs/8.4/interactive/sql-savepoint.html
因此您可以将事务回滚到某个较早的点,而不会使整个事务变黑。
| 归档时间: |
|
| 查看次数: |
16762 次 |
| 最近记录: |