在pgAdmin中回滚DML语句

chr*_*arx 3 postgresql pgadmin

在pgAdmin中,如果我执行一个插入查询,我看不到提交或回滚我刚刚运行的语句的任何方法(我知道它自动提交).我已经习惯了Oracle和SQL开发人员,在那里我可以运行一个语句,然后只需按一下按钮就可以回滚我运行的最后一个语句.我怎么会在这里做同样的事情?

Fra*_*ens 11

在SQL窗口中使用transaction:

BEGIN;
DROP TABLE foo;
ROLLBACK; -- or COMMIT;
Run Code Online (Sandbox Code Playgroud)

- 编辑 - 另一个例子:

BEGIN;
INSERT INTO foo(bar) VALUES ('baz') RETURNING bar; -- the results will be returned
SELECT * FROM other_table; -- some more result
UPDATE other_table SET var = 'bla' WHERE id = 1 RETURNING *; -- the results will be returned

-- and when you're done with all statements and have seen the results:
ROLLBACK; -- or COMMIT 
Run Code Online (Sandbox Code Playgroud)


Rop*_*Rop 8

我也非常喜欢Oracle自动将所有内容放入事务中的方式,以帮助避免灾难性的手动错误.

默认情况下,在企业产品IMO中启用自动提交是非常恶毒的,只有完全,UTTERLY INSANE设计选择:(

无论如何---与Postgres合作,总是需要记住

开始;

在手动工作或sql脚本的开始.

作为一个实际习惯:然后,当你说:COMMIT; 在Oracle中,我使用该行

结束; 开始;

在Postgres做同样的事情,即提交当前交易并立即开始新交易.


使用JDBC或类似工具时,要创建连接,请始终使用某些方法,例如getPGConnection(),其中包括:

...
Connection dbConn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
dbConn.setAutoCommit(false);
...
Run Code Online (Sandbox Code Playgroud)

确保每个连接都已禁用自动提交.