次のスキーマを持つPostgreSQLテーブルがあります-
CREATE TABLE test (
id serial NOT NULL PRIMARY KEY,
username varchar(100) NOT NULL, -- The user name
dob timestamp with time zone NOT NULL -- The date of birth
);
次に、次のようなデータを含むデータをテーブルに挿入しました-
INSERT INTO "test" ("username", "dob") VALUES (E'Scotty', E'2009-05-14 15:44:43');
そして、DBでデータをチェックすると、次のようになります-
mydb=> select username, dob from test where username='Scotty';
username | dob
----------+---------------------------
Scotty | 2009-05-14 15:44:43+05:30
(1 row)
1946年より前の日付のデータを挿入しようとするまでは、すべてが順調でダンディです-
INSERT INTO "test" ("username", "dob") VALUES (E'James T Kirk', E'1945-01-01 11:30:11');
mydb=> select username, dob from test where username='James T Kirk';
username | dob
-------------- +---------------------------
James T Kirk | 1945-01-01 11:30:11+06:30
(1 row)
上記の結果を見てください。タイムゾーンの値が+05:30から+06:30にどのように変化したかに注目してください
1942年より前の日付を挿入すると、実際にはさらに悪化します-
INSERT INTO "test" ("username", "dob") VALUES (E'Spock', E'1941-01-01 11:30:11');
mydb=> select username, dob from test where username='Spock';
username | dob
----------+------------------------------
Spock | 1941-01-01 11:30:11+05:53:20
(1 row)
これで、タイムゾーン値が完全にマングルされ、日付を解析できなくなりました。
これについて何か助けていただければ幸いです。
私のタイムゾーンはアジア/コルカタ(GMT + 05:30)です。
更新:次のように明示的にTZを指定してデータを入力してみました-
INSERT INTO "test" ("username", "dob") VALUES (E'McCoy', E'1941-01-25 00:20:30+05:30');
それでもうまくいきませんでした。
mydb=> select username, dob from test where username='McCoy';
username | dob
----------+------------------------------
McCoy | 1941-01-25 00:43:50+05:53:20
(1 row)