Йа тестер, нах!
Jan. 29th, 2016 09:40 am
create table test (d date);
postgres=# insert into test values ('5874897-01-01'::date);
INSERT 0 1
postgres=# insert into test values ('5874897-01-01'::date - '1D'::interval);
ERROR: date out of range for timestamp
STATEMENT: insert into test values ('5874897-01-01'::date - '1D'::interval);
ERROR: date out of range for timestamp
no subject
Date: 2016-01-29 06:44 am (UTC)no subject
Date: 2016-01-29 06:45 am (UTC)no subject
Date: 2016-01-29 06:53 am (UTC)А я сразу создал тестовую таблицу с полем timestamp и получил консистентный результат - везде out of range,
no subject
Date: 2016-01-29 06:54 am (UTC)http://www.postgresql.org/docs/current/static/datatype-datetime.html
Есть ли смысл прописать очные минимальные и максимальные значения. Потому что date по факту имеет минимальное значение 4714-11-24 BC а не просто заявленное 4713 BC
no subject
Date: 2016-01-29 06:57 am (UTC)А вот должно ли оно быть так -- вопрос отдельный...
Потому как один день в современных датах вычитают именно так, и не парятся,
то что кто-то захочет вычитать дни на пределами 295го века -- это крайне сомнительно. Но все равно как-то неаккуратненько получается...
no subject
Date: 2016-01-29 07:00 am (UTC)Для того, чтобы поддержать весь диапазон типа date в операциях с интервалами, нужно завести отдельный тип dayinterval с гранулярностью в днях. Чтобы его прибавление-отнимание к дате никогда не могло породить времени, отличного от полуночи.
А пока придется оперировать с integer-ами - числом дней. Не слишком удобно, конечно, так как месяцы и годы придется по формуле Цольнера руками пересчитывать.
no subject
Date: 2016-01-29 07:03 am (UTC)no subject
Date: 2016-01-29 07:12 am (UTC)5876265-12-16
5874897
1368 лет разницы, однако :-))
no subject
Date: 2016-01-29 07:15 am (UTC)no subject
Date: 2016-01-29 07:18 am (UTC)INSERT 0 1
postgres=# select * from test order by d;
d
---------------
8612804-01-05
(1 row)
postgres=# insert into test values ('8612804-01-05');
ERROR: date out of range: "8612804-01-05" at character 26
STATEMENT: insert into test values ('8612804-01-05');
ERROR: date out of range: "8612804-01-05"
LINE 1: insert into test values ('8612804-01-05');
no subject
Date: 2016-01-29 07:22 am (UTC)postgres=# insert into test values ('5874897-01-01'::date + 2147483647);
INSERT 0 1
postgres=# select * from test order by d;
d
---------------
4715-06-22 BC
(1 row)
no subject
Date: 2016-01-29 07:40 am (UTC)no subject
Date: 2016-01-29 07:58 am (UTC)no subject
Date: 2016-01-29 07:59 am (UTC)