127*_*127 6 migration postgresql timestamp ruby-on-rails
我使用它的常用方法是
psql > ALTER TABLE transactions ALTER COLUMN date SET DEFAULT CURRENT_TIMESTAMP\g
它工作正常.
在我的RoR应用程序中,我试图以两种方式创建迁移.
1.
class TransactionsSetDefaultDateChange < ActiveRecord::Migration
change_column :transactions, :date, :datetime, :null=>false, :default=>'CURRENT_TIMESTAMP'
end
Run Code Online (Sandbox Code Playgroud)
2.
class TransactionsSetDefaultDateChange < ActiveRecord::Migration
execute <<-SQL
ALTER TABLE transactions ALTER COLUMN date SET DEFAULT CURRENT_TIMESTAMP
SQL
end
Run Code Online (Sandbox Code Playgroud)
都失败了.有什么想法吗?
PS这种情况适用于迁移("rake db:migrate"),但未在"rake db:setup"上正确应用(丢失SQL语句)
class TransactionsSetDefaultDateChange < ActiveRecord::Migration
def change
execute <<-SQL
ALTER TABLE transactions ALTER COLUMN date SET DEFAULT CURRENT_TIMESTAMP
SQL
end
end
Run Code Online (Sandbox Code Playgroud)
der*_*rek 10
对于Rails 5+,现在可以使用了
... null: false, default: -> { 'NOW()' } ...
Run Code Online (Sandbox Code Playgroud)
在Postgresql Modifiers中生成类似的东西
not null default now()
Run Code Online (Sandbox Code Playgroud)
你的问题和答案让我走了.使用Rails 4.2.4和Postgres 9.3,以下迁移代码对我有用:
create_table :goodies do |t|
t.datetime :last_read_at, null: false
end
execute "ALTER TABLE goodies ALTER COLUMN last_read_at SET DEFAULT CURRENT_TIMESTAMP"
Run Code Online (Sandbox Code Playgroud)
它产生了一段有效的SQL:
last_read_at timestamp without time zone NOT NULL DEFAULT now(),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4905 次 |
| 最近记录: |