[解決済み】PostgreSQLでタイムゾーンがある場合とない場合のタイムスタンプの違いについて
2022-04-19 20:52:39
質問
PostgreSQLでは、データ型が以下の場合、タイムスタンプの値の格納方法が異なります。
WITH TIME ZONE
対して
WITHOUT TIME ZONE
? 簡単なテストケースで違いを説明できますか?
どのように解決するのですか?
その違いについては
PostgreSQLの日付/時刻型に関するドキュメント
. そうです。
TIME
または
TIMESTAMP
は、1つの
WITH TIME ZONE
または
WITHOUT TIME ZONE
. これは、値がどのように保存されるかに影響するのではなく、値がどのように解釈されるかに影響するのです。
これらのデータ型に対するタイムゾーンの影響は 具体的には のドキュメントに記載されています。この違いは、システムがその値について合理的に知ることができるかどうかに起因する。
-
値の一部としてタイムゾーンがある場合、その値はクライアントでローカル時間としてレンダリングされる可能性があります。
-
値の一部としてタイムゾーンを指定しない場合、明らかなデフォルトのタイムゾーンはUTCであるため、そのタイムゾーンに合わせてレンダリングされます。
少なくとも3つの要因によって動作が異なる。
- クライアントのタイムゾーンの設定。
-
データ型(例.
WITH TIME ZONE
またはWITHOUT TIME ZONE
) の値を指定します。 - 値が特定のタイムゾーンで指定されているかどうか。
以下は、それらの組み合わせの例である。
foo=> SET TIMEZONE TO 'Japan';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 00:00:00+09
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 06:00:00+09
(1 row)
foo=> SET TIMEZONE TO 'Australia/Melbourne';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 00:00:00+11
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
timestamp
---------------------
2011-01-01 00:00:00
(1 row)
foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
timestamptz
------------------------
2011-01-01 08:00:00+11
(1 row)
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] JavaScriptでクライアントのタイムゾーン(およびオフセット)を取得する
-
[解決済み] textとvarcharの違い(character varying)
-
[解決済み] PostgreSQLデータベースへのSQLダンプのインポート
-
[解決済み] Ruby on Railsで、DateTime、Timestamp、Time、Dateの違いは何ですか?
-
[解決済み】PostgreSQLでタイムスタンプから日付(yyyy/mm/dd)を抽出する。
-
[解決済み】PostGISのバージョンを取得する
-
[解決済み】PostgreSQLでビューのCREATE VIEWコードを見るには?
-
[解決済み] RailsとPostgreSQLでタイムゾーンを完全に無視する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オペレーショナルエラーです。ERROR: pgbouncerはサーバーに接続できません。
-
[解決済み] Postgresql Select rows where column = array (列 = 配列)
-
[解決済み] Postgresqlの再起動方法
-
[解決済み] PostgreSQLのCASE ... 複数条件付きEND
-
[解決済み] postgres がサーバー構成の場所を知らない
-
[解決済み] Psql はサーバーに接続できませんでした。そのようなファイルまたはディレクトリがありません、5432エラー?
-
[解決済み] libpqのソースはどこで手に入りますか?
-
[解決済み】PostgreSQL ERROR:リカバリーと競合するため、ステートメントをキャンセルする
-
[解決済み】Docker化したPostgresデータベースのデータをボリュームで永続化する方法
-
[解決済み] RailsとPostgreSQLでタイムゾーンを完全に無視する