在pgAdmin中,如果我执行一个插入查询,我看不到提交或回滚我刚刚运行的语句的任何方法(我知道它是自动提交)。我已经习惯了Oracle和SQL开发人员,在那里我可以运行一个语句,然后只需按一下按钮就可以回滚我运行的最后一个语句。我如何在这里实现同样的目标?
答案 0 :(得分:11)
在SQL窗口中使用事务:
BEGIN;
DROP TABLE foo;
ROLLBACK; -- or COMMIT;
- 编辑 - 另一个例子:
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
答案 1 :(得分:8)
我非常更喜欢Oracle自动将所有内容放入事务中的方式,以帮助避免灾难性的手动错误。
默认情况下,在 企业 产品IMO中启用自动提交功能已超出恶意,只有 完全无瑕,无所事事< / em> 设计选择:(
无论如何---与Postgres合作,总是需要记住
<强> BEGIN; 强>
在手动工作或sql-scripts开始时。
作为一种习惯:然后,当你说: COMMIT; 在Oracle中,我使用
行<强> END; BEGIN; 强>
Postgres中的做同样的事情,即提交当前交易并立即开始新交易。
使用JDBC或类似工具时,要创建连接,请始终使用某种方法,例如getPGConnection(),包括:
...
Connection dbConn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
dbConn.setAutoCommit(false);
...
确保每个连接都已禁用自动提交。
答案 2 :(得分:2)
如果您使用的是pgAdmin4,则可以打开和关闭自动提交和/或自动回滚。
转到“文件”下拉菜单,然后选择“首选项”选项。在“ SQL编辑器”标签->“选项”中,您可以看到用于打开和关闭自动提交/回滚的选项。