当前位置: 首页 > 知识库问答 >
问题:

active record::statement invalid:PG infailedsql transaction

单于越
2023-03-14

我正在尝试创建一个 ActiveRecord 对象。但是我在创建它时收到此错误。

(0.1ms)  ROLLBACK
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR:  current transaction is       aborted, commands ignored until end of transaction block

关于这个问题的任何想法。

共有3个答案

胡彭亮
2023-03-14

此问题发生在我的测试环境中,并且是由于每个测试都包装在自己的事务中而导致的。

我使用的是database_cleanergem,并对其进行了配置,以便在使用javascript的情况下不会将测试包装到事务中。所以为了解决这个问题,我在导致这个问题的每个规范中添加了js: true。(即使这些规范实际上并没有使用javascript,这也是确保测试不会包装在事务中的最方便的方法。不过,我相信有更少的黑客式方法可以做到这一点)。

作为参考,下面是来自< code > spec/support/database_cleaner . Rb 的database _ cleaner配置:

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with :deletion
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :deletion
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

如果您不使用database_cleaner,那么测试被包装在事务中的原因可能是use_transactional_fixtures选项在spec/spec_helper.rb中设置为true。尝试将其设置为false。

齐昆
2023-03-14

我遇到了这个问题。只需重新启动Rails服务器,它就可以工作了

宗政和韵
2023-03-14

其他答案都不能解决问题的根本原因。

问题在于,当Postgres引发异常时,它会毒害同一连接上的未来事务。

修复方法是回滚有问题的事务:

begin
  ActiveRecord...do something...
rescue Exception => e
  puts "SQL error in #{ __method__ }"
  ActiveRecord::Base.connection.execute 'ROLLBACK'

  raise e
end

参见参考文献。

 类似资料:
  • ActiveRecord 是个轻量级的核心数据的活动记录。

  • Castle ActiveRecord框架是一个基于.NET的ORM框架,它实现了ActiveRecord设计模式。它本身就是基于NHibernate,只是封 装了NHibernate的大部分烦杂细节,对于需要持久化的类,只需继承自ActiveRecordBase类,并对类中的property赋予正确的 Attribute,而无需编写烦杂的mapping file。对于大型系统复杂的数据库逻辑,C

  • php-activerecord 是一个基于 ActiveRecord 设计模式 开发的开源PHP ORM库。它旨在大大简化与数据库的交互和减少手写 SQL 语句。它不同于其他的ORM,你不需要使用任何的代码生成器,也不费劲去手写、维护模型层的表映射文件。这个库的灵感来自Ruby on Rails ,因此它也借鉴Ruby on Rails 的想法和实现。另外,它也很容易地整合到ZF、CodeIgn

  • Use the ActiveRecord Integration facility if you want to benefit from the transaction management offered by the Automatic Transaction Management Facility and if you want to have the Container configur

  • 问题内容: 我正在尝试从使用的模型中找到一个项目,但这给了我错误 全程跟踪 的第5行是 可能是什么问题?您可以在上面遮一下光吗?可能的解决方案是什么 问题答案: 它所需要的只是 在您的文件中

  • ActiveRecord 高级技巧 阿里云 Rails 项目调整 RDS MySQL 编码为 utf8mb4 的详细步骤 Rails 中的事务处理 MySQL 用 UUID 作为主键,实际使用中有什么问题 ActiveRecord Object Instantiate ActiveRecord 的三种数据预加载形式 - includes, preload, eager_load, Preload、

  • 问题内容: 如果s有分数,假设标准位置,我如何获得用户排名: 我得到的独特印象是这将是数据库密集型的。我对此不太担心,但是显然,需要较少处理能力的解决方案才是赢家! 如果给两个具有相同点数的用户相同的排名太复杂了,我准备接受上面的用户1可能是排名3,而用户3可能是排名4。 编辑: 实际上,我是在单独的一堂课中存储gmy分数-因为每个事件都需要一定数量的分数。 关于如何使其更简洁的任何想法? 提前致

  • 我正在尝试为我的Devise User模型添加一些额外的信息,如first_name、last_name、年龄、性别和城市。 当我填写注册表格并单击提交时,我会收到以下错误: SQLite3::ConstraintExc的:不是NULL约束失败:users.first_name:插入到用户(电子邮件,encrypted_password,created_at,updated_at)值 (?, ?,