- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在连接到 mysql 数据库的 ruby 脚本中有一些 ruby 代码。当我连接时我做了一个 MySQL2.query("BEGIN") 来开始一个事务,如果我想回滚我做了 MySQL2.query("ROLLBACK") 或者如果一切顺利并且我想提交我做了 MySQL2.query (“提交”)。
我现在已经转移到 postgres 数据库,而 PG.exec("BEGIN")、PG.exec("ROLLBACK") 和 PG.exec("COMMIT") 似乎没有错误,我确实收到了警告当我提交时“没有正在进行的事务”,所以它似乎正在执行自动提交(即在完成时提交每个 SQL INSERT/UPDATE)。基本上我希望能够手动回滚或提交。
我想也许我需要关闭自动提交但无法弄清楚如何,我尝试了@dbase.exec('SET AUTOCOMMIT TO OFF') 但得到错误'lib/database.rb:28:in `exec':错误:无法识别的配置参数“autocommit”(PG::UndefinedObject)。
我做了相当多的谷歌搜索,但没有任何运气;(。
我正在使用 postgres 9.5 和 ruby 2.4.1。
最佳答案
PostgreSQL 没有禁用自动提交的设置:
https://stackoverflow.com/a/17936997/3323777
你只需要使用 BEGIN/COMMIT/ROLLBACK。顺便说一句,您使用哪个适配器 gem? PG.exec 语法似乎很奇怪。考虑以下片段(使用 pg 0.20):
conn = PGconn.open(:dbname => 'database', user: "user", password: "...")
conn.exec("DELETE FROM setting_entries")
conn.exec("INSERT INTO setting_entries(name) VALUES ('1')")
conn.exec("BEGIN")
conn.exec("DELETE FROM setting_entries")
conn.exec("INSERT INTO setting_entries(name) VALUES ('1')")
conn.exec("ROLLBACK")
这是 postgre 日志:
(0-22/70) 2017-08-31 12:37:12 MSK [19945-1] user@database LOG: statement: DELETE FROM setting_entries
(0-22/71) 2017-08-31 12:37:12 MSK [19945-2] user@database LOG: statement: INSERT INTO setting_entries(name) VALUES ('1')
(0-22/72) 2017-08-31 12:37:12 MSK [19945-3] user@database LOG: statement: DELETE FROM setting_entries
(5948637-22/72) 2017-08-31 12:37:12 MSK [19945-4] user@database LOG: statement: INSERT INTO setting_entries(name) VALUES ('1')
如您所见,最后两行的事务 ID 相同 (/72)。为确保您可以编写一个单元测试,在其中您将在一个事务中进行两次更新,回滚它们并查看两者是否都会回滚。
关于ruby - 如何在 postgres ruby 中手动提交或回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45971559/
我是一名优秀的程序员,十分优秀!