2016-08-03 55 views
0

postgresqlデータベース移行プロジェクトにoracleを使用しています。私はポストグルからオペレーティングシステムの日付と時刻を読む必要があります。 oracle sysdate()は、日付型データのシステム日付時刻を返し、systimestamp()は、time_zone変数の設定に関係なく、タイムスタンプ型データを返します。しかし、postgresでは、current_date()とcurrent_timestamp()は、そのデータベースに設定されたtimezone変数に相対的な結果を与えます。 タイムゾーン変数を同期させること(つまり、set timezone = 'utc')は1つの方法ですが、私は自分のタイムゾーン変数を変更したくありません。oracleのsystimestamp()のようなpostgresに等価な関数がありますか?

私が取得したいのは、システムの現在の日付と時刻(時間帯が含まれるかどうか)がoracleのようなものです。どんなpl/pgsqlでも便利です。ありがとう

+1

https://www.postgresql.org/docs/9.5/static/functions-datetime.html選択してください... BTW:タイムスタンプは現在のタイムゾーンではありません*、すべてのタイムスタンプはUTCでそれにtzが追加されています。これは、表示/日付フォーマットの問題ではない可能性があります。 – wildplasser

+0

['set local time zone local'](https://www.postgresql.org/docs/current/static/sql-set.html)は、PostgreSQLでもっとも近いものです。これは*サーバのデフォルトを設定しますタイムゾーンの値。これが明示的にどこにも設定されていない場合は、サーバのオペレーティングシステムがデフォルトの*となるゾーンになります。コミット/ロールバック後にリセットされるか、関数で使用するとリセットされます。その関数が実行されます。 – pozs

答えて

0

データタイプTIMESTAMP WITH TIME ZONEは、OracleとPostgreSQLでは異なります。
Oracleはタイムスタンプ情報をタイムスタンプと共に格納しますが、PostgreSQLはタイムスタンプをUTCに格納し、現在設定されているタイムゾーンに表示します(SQL文SHOW TimeZoneで利用可能)。

したがって、関数はPostgreSQLとOracleでは同じ時刻を返しますが、異なる方法で表示されます。それは通常問題ではありません。

タイムゾーン情報をタイムスタンプとともに保存する必要がある場合は、タイムゾーン情報を格納するために別のフィールドを使用する必要があります。 AT TIME ZONEを使用して、タイムスタンプをそのタイムゾーンに変換して表示することができます。

関連する問題