1
execute <<-SQL
  commit
  reindex database ActiveRecord::Base.configurations[Rails.env]['database'] 
SQL

显然这不起作用,但你明白了。我什至不知道上面的代码结构叫什么去查。

Postgres 不允许在事务中使用 db reindex,所以我希望上述 hack 能够奏效,因为在 Rails 4 之前似乎没有办法禁用事务

UPDATE

所以上面没有工作,但这个黑客做到了:

# force a reindex after we switched all those columns to citext
execute "commit;"
execute "reindex database #{ActiveRecord::Base.configurations[Rails.env]['database']} force;"
4

1 回答 1

1

<<-SQL...SQL部分创建一个多行字符串,它是函数的参数execute。您可以在该字符串中包含 ruby​​ 表达式,就像在通常的"value #{myObject.value}"字符串中一样。这将使:

execute <<-SQL
  commit
  reindex database #{ActiveRecord::Base.configurations[Rails.env]['database']}
SQL

我不能告诉你那个 SQL hack 是否有效。但似乎您正在关闭一个正在运行的事务,该事务后来再次关闭(由最初启动事务的代码)。另外,这笔交易可能是有原因的。我的意思是,如果 rails 稍后尝试回滚您的事务,它将失败(或至少不起作用),因为您已经提交了事务。

于 2013-05-01T20:33:24.523 回答