2017-01-22 25 views
0

現在、OracleデータベーススキーマをPostgresに移行する作業を進めています。その一部として、タイムゾーンに基づいてタイムスタンプを生成するOracleのカスタムユーティリティ関数を変換する必要があります。しかし、OracleとPostgresから得られた値は1時間ごとに変化するようです。oracleとpostgresのタイムスタンプの差異

オラクル:

SELECT (to_timestamp_tz('20300714 235959 CET','YYYYMMDD HH24MISS TZR') - to_timestamp_tz('19700101 000000 GMT','YYYYMMDD HH24MISS TZR')) 
    as foo FROM dual; 

利回り22109 21:59:59.000000

のPostgres:

select ('20300714 235959'::timestamp AT TIME ZONE 'CET') - ('19700101 000000'::timestamp AT TIME ZONE 'GMT') as foo; 

22109日夜09時59分59秒

を生み出します私はgこの違いの理由は夏時間のためですが、わかりません。誰もこの問題で私を助けることができます。 私はPostgres v9.6とOracle 12cを使用しています。

答えて

0

さて、私がやっていた間違いを見つけました。 Postgresは短縮されたタイムゾーン名とフルタイムゾーン名を別々に扱っているようです。昼光に関連する変更を組み込む場合は、フルタイムゾーン名を使用する必要があります。私の場合、「CET」ではなく「Europe/Amsterdam」を使用すると、Oracleと同じ結果が得られました。 Postgresでサポートされているフルタイムゾーン名の完全なリストを見つけるには、私はクエリを使用しました:

select * from pg_timezone_names where abbrev='CET'; 
関連する問題