Re: [SQL] Find rows with "timestamp out of range"
От | Tom Lane |
---|---|
Тема | Re: [SQL] Find rows with "timestamp out of range" |
Дата | |
Msg-id | 19153.1497879190@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | [SQL] Find rows with "timestamp out of range" (Saiful Muhajir <saifulmuhajir@gmail.com>) |
Ответы |
Re: [SQL] Find rows with "timestamp out of range"
|
Список | pgsql-sql |
Saiful Muhajir <saifulmuhajir@gmail.com> writes: > I have a table with around *133 million rows* with two timestamp columns. > While trying to copy some columns for a new database, using *\COPY *, the > error occurred with: *timestamp out of range* > *select comment_id, create_time from comments where create_time < '1 Jan > 1800';* > ERROR: 22008: timestamp out of range > LOCATION: timestamp_out, timestamp.c:226 As you can see, the error is occurring in timestamp_out(), ie in the attempt to display the specific value. You could probably do this successfully: select comment_id from comments where create_time < '1 Jan 1800'; and to fix, maybe update comments set create_time = '-infinity' where create_time < '1 Jan 1800'; As to what's actually going on, we made an effort a few years back to tighten up the logic concerning exactly what is the minimum legal timestamp value --- it's somewhere in 4714BC, but as I recall, the exact boundary where it failed used to depend on your TimeZone setting. (Maybe it still does, for you ... what PG version is this exactly?) I'm betting that you have a value right on the hairy edge of failure, that was accepted when input but is now rejected during display, either because of the aforesaid logic changes or because you're using a different TimeZone setting than it was input under. It might be entertaining to try select comment_id, create_time + interval '1 year' from comments where create_time < '1 Jan 1800'; and see if that is able to produce output. regards, tom lane
В списке pgsql-sql по дате отправления: