5

在 pgAdmin 中,如果我执行插入查询,我看不到任何提交或回滚我刚刚运行的语句的方法(我知道它会自动提交)。我习惯了 Oracle 和 SQL 开发人员,我可以在其中运行一条语句,然后通过按一下按钮回滚我运行的最后一条语句。我将如何在这里实现同样的目标?

4

3 回答 3

13

在 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 
于 2012-03-29T13:58:27.563 回答
9

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

企业产品 IMO 中默认启用自动提交是非常邪恶的,而且只是一个完全、完全疯狂的设计选择:(

无论如何 --- 使用 Postgres,总是需要记住

开始;

在手动工作或 sql 脚本开始时。

作为一个实际的习惯:那么,当你会说:COMMIT; 在 Oracle 中,我使用该行

结尾; 开始;

在 Postgres 中,它做同样的事情,即提交当前事务并立即开始一个新事务。


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

...
Connection dbConn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
dbConn.setAutoCommit(false);
...

确保每个连接都禁用了自动提交。

于 2013-07-16T02:00:48.743 回答
4

如果您使用 pgAdmin4,您可以打开和关闭自动提交和/或自动回滚。

转到文件下拉菜单并选择首选项选项。在 SQL 编辑器选项卡 -> 选项中,您可以看到打开和关闭自动提交/回滚的选项。

自动提交/回滚选项

于 2018-07-11T07:41:26.127 回答