web-dev-qa-db-ja.com

アップデートでpostgresのタイムゾーンを使用してbigintをタイムスタンプにキャストする方法

PostgresでBIGINTTIMESTAMPまたはTIMESTAMP WITH TIME ZONEにキャストする方法はありますか? BIGINT列からTIMESTAMP列にデータをコピーする必要があります。

これが私が試したものです:

update table
set date__timestamp = date__bigint::timestamp 
where foo = 1;

エラー:タイムゾーンなしでタイプbigintをタイムスタンプにキャストできません

私はタイムスタンプ列をタイムゾーン付きの列に変更してこれを試しました:

update table
set date__timestamp = date__bigint::timestamp with time zone at time zone 'PST' 
where foo = 1;

エラー:タイプbigintをタイムゾーン付きのタイムスタンプにキャストできません

update table
set date__timstamp = TO_CHAR(TO_TIMESTAMP(date__bi / 1000), 'DD/MM/YYYY HH24:MI:SS')
where foo = 1;

エラー:列「date__timestamp」はタイムゾーンなしのタイムスタンプタイプですが、式はテキストタイプですヒント:式を書き換えるかキャストする必要があります。

データは次のようになります。

date_bigint: 20181102
date_timestamp: 2018-11-02 17:00:00.000000

キャストにデフォルト値を渡す必要がありますか?

6
brettu

より簡単な方法は、bigintからvarcharに変更し、次にvarcharからtimestampに変更することです。

alter table tablename alter column colname type varchar(30) USING colname::varchar;

その後

alter table tablename alter column colname type timestamp USING colname::timestamp;
0