为什么我在postgres上的rails迁移期间遇到ExclusiveLock错误

时间:2017-10-02 00:37:13

标签: ruby-on-rails postgresql migration

尝试运行迁移时出错

WARNING: you don't own a lock of type ExclusiveLock rake aborted! StandardError: An error has occurred, this and all later migrations canceled:

迁移看起来像

def up
    ActiveRecord::Base.establish_connection
    ActiveRecord::Base.connection.execute(
      File.read(File.expand_path('setup.sql'))
    )

    change_column :staff_members, :id, :integer, auto_increment: true
end 

sql文件分支到不同的数据库,这个特定的表需要重新定义它的id列。

2 个答案:

答案 0 :(得分:1)

我发现的解决方案是手动关闭连接 @Component({ .... animations: [ trigger('panelInOut', [ transition('void => *', [ style({transform: 'translateY(-100%)'}), animate(800) ]), transition('* => void', [ animate(800, style({transform: 'translateY(-100%)'})) ]) ]) ] })

答案 1 :(得分:0)

我有同样的问题,但在不同的情况下。

我编写了一个通用的rake任务,它允许我运行任何SQL脚本文件,并发现在直接运行rake任务时它可以正常工作,但如果作为迁移的一部分运行则会失败,从而导致ExclusiveLock警告和OP报告的错误。

我尝试在rake任务中明确关闭连接,但这并没有为我解决问题。

最后,通过一些额外的日志记录,我发现连接已经建立,并且我不需要在该上下文中明确地建立它(我最初有想法从this SO question开始) 。我的环境:Ruby 2.3.4上的Rails 5.1.4

删除ActiveRecord::Base.establish_connection调用解决了我的问题,我的rake任务现在可以在迁移内部或外部愉快地运行。

我稍后注意到PG::ConnectionBad: connection is closed: ROLLBACKPG::ConnectionBad: connection is closed: COMMIT错误在查看某些日志时,但这些错误可能是由显式关闭连接引起的(看起来迁移会尝试COMMIT但由于连接失败而失败关闭,然后尝试ROLLBACK但由于同样的原因失败了。)

相关问题