0

同じスキーマ、テーブル、およびデータを持つ 2 つの異なるマシンに 2 つのデータベースがあります。このクエリを起動します。

select mydate from mytable where date = '2013-10-03 14:25:00-07'::timestamp::date

最初のマシンは正しい行を返しますが、2 番目のマシンはそうではありません。どちらのマシンも同じ prostgres バージョン (9.2) です。

マシン間の唯一の違いは、最初のマシンが Windows で動作し、2 番目のマシンが Linux (Centos) で動作することです。

なにか提案を?

4

2 に答える 2

1

'2013-10-03'設定に応じて、10 月 3日または3 月10 日と解釈できます。@Chrisにはそれについての詳細があります。datestyle

それに加えて、クエリは一般的に正しくありません。この表現は誤解を招きます:

'2013-10-03 14:25:00-07'::timestamp

timestampPostgres のデフォルトはtimestamp without time zoneで、これはタイム ゾーン オフセットを認識しません。したがって、タイム ゾーン オフセット-07破棄されます。

代わりに使用してください:

'2013-10-03 14:25:00-07'::timestamptz

時点を一致させる:

SELECT * FROM mytable
WHERE mydate = '2013-10-03 14:25:00-07'::timestamptz

列のデータ型は後のコメントで明確にしたとおりであるため、ローカルタイムゾーンの設定には依存しませんtimestamp with time zone

マッチ・ザ・デイ:

...
WHERE mydate::date = '2013-10-03 14:25:00-07'::timestamptz::date

「日」の下端と上端を定義するローカル タイム ゾーンの設定によって異なります。

この関連する回答の詳細な説明:
Rails と PostgreSQL でタイムゾーンを完全に無視する

于 2013-11-22T17:01:01.917 に答える
0

最もクリーンな解決策は、セッションの開始時に次のコマンドを発行することです。

SET datestyle = "ISO, YMD";

これにより、入力形式に従ってタイムスタンプが適切に処理されるようになります。

于 2013-11-22T05:33:14.760 に答える