Jac*_*lla 11 postgresql ruby-on-rails
用于将"deleted_at"时间列转换为日期时间列的Rails迁移失败.关于如何解决这个问题的任何想法?如果相关的话,这是Postgres的全新安装.
-- change_column(:products, :deleted_at, :datetime)
PGError: ERROR: column "deleted_at" cannot be cast to type timestamp without time zone
: ALTER TABLE "products" ALTER COLUMN "deleted_at" TYPE timestamp
Run Code Online (Sandbox Code Playgroud)
Pau*_*eon 10
在Rails中,这看起来像
class ChangeStatusUpdatedAtToDateTime < ActiveRecord::Migration
def up
remove_column :bookings, :status_updated_at
add_column :bookings, :status_updated_at, :datetime
end
def down
remove_column :bookings, :status_updated_at
add_column :bookings, :status_updated_at, :time
end
end
Run Code Online (Sandbox Code Playgroud)
您不能在时间戳("datetime")之间更改字段的类型,因为无法转换值 - 数据库不知道日期.
但是,您可以删除并重新创建列:
ALTER TABLE products DROP COLUMN deleted_at;
ALTER TABLE products ADD COLUMN deleted_at timestamp;
Run Code Online (Sandbox Code Playgroud)
或者,如果此字段设置为NOT NULL,则应该执行以下操作:
ALTER TABLE products ADD COLUMN deleted_at timestamp NOT NULL;
Run Code Online (Sandbox Code Playgroud)
但是如果你像Sean一样坚持在这个表中保留假值,你可以使用ALTER ... TYPE ...使用像这样:
ALTER TABLE products ALTER COLUMN deleted_at TYPE timestamp USING
CASE WHEN deleted_at IS NOT NULL THEN timestamp '1970-01-01 00:00:00' END;
-- Or:
ALTER TABLE products ALTER COLUMN deleted_at
TYPE timestamp USING date '1970-01-01' + deleted_at;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12864 次 |
| 最近记录: |