web-dev-qa-db-ja.com

PostgreSQLでタイムゾーンなしの時間をタイムゾーンなしのタイムスタンプに変換する方法は?

タイプtimeの列をタイプtimestampに変更しようとしたときにこのエラーを受け取りました:

PG::CannotCoerce: ERROR:  cannot cast type time without time zone to timestamp without time zone

既存の時間の変換方法は重要ではありませんが、この列を変更する必要があります。これを強制したり、キャストしたりするにはどうすればよいですか?

これはSQLステートメントです。

ALTER TABLE "students" ALTER COLUMN "time_since_missing_schedule_notification" TYPE timestamp USING CAST(time_since_missing_schedule_notification AS timestamp)

Rails/ActiveRecordを使用していますが、これは上記のSQLステートメントを生成したRubyコードです。

change_column :students, :time_since_missing_schedule_notification, 'timestamp USING CAST(time_since_missing_schedule_notification AS timestamp without time zone)'

HerokuのPostgreSQLサーバーに接続すると、次のバージョンが表示されます。

psql (9.3.1, server 9.2.7)
5
at.

時間にはdateコンポーネントがないため、日付を指定する必要があります。 ALTER TABLEステートメントにdatetimeの値を追加するだけです。

ALTER TABLE students ALTER COLUMN time_since_missing_schedule_notification
 TYPE timestamp USING ('2000-1-1'::date + time_since_missing_schedule_notification)
6