Обсуждение: infinity as a date

Поиск
Список
Период
Сортировка

infinity as a date

От
Jean-Christian Imbeault
Дата:
I see that Postgres has a special keyword "infinity" for use with
timestamps. Is there an equivalent for dates?

It seems I can set a date field to be 'infinity'::timestamp, but I can't
find a way to then query a table for fields that are 'infinity' ...

I tried the following but it doesn't quite work:

JC=# create table test(a date);
CREATE TABLE
JC=# insert into test values('infinity'::timestamp);
INSERT 1030323 1
JC=# select * from test;
  a
---

(1 row)

JC=# select * from test where a='infinity'::timestamp;
  a
---
(0 rows)


Is there a correct way to represent a date that is "later/earlier than
any other date"?

Thanks!

Jc


Re: infinity as a date

От
Bruno Wolff III
Дата:
On Wed, Dec 11, 2002 at 16:11:12 +0900,
  Jean-Christian Imbeault <jc@mega-bucks.co.jp> wrote:
> I see that Postgres has a special keyword "infinity" for use with
> timestamps. Is there an equivalent for dates?

Dates cannot have a value of 'infinity'. Either you can store timestamps
instead of dates or use another column to indicate to indicate the date
is infinite and have your tests check that column as well as the date
column.

Re: infinity as a date

От
Jean-Christian Imbeault
Дата:
Bruno Wolff III wrote:
 >
 > Dates cannot have a value of 'infinity'. Either you can store timestamps
 > instead of dates or use another column to indicate to indicate the date
 > is infinite and have your tests check that column as well as the date
 > column.

Ok, so why does postgres let me get away with:

JC=# create table test(a date);
CREATE TABLE
JC=# insert into test values('infinity'::timestamp);
INSERT 1030323 1

If dates cannot hvae a value of infinity why can I insert 'infinity'
into a date field?

Should not postgres throw an error?

Jc




Re: infinity as a date

От
"Mark Wilson"
Дата:
I've just executed that code and the single row in the table contains null,
not infinity.

  insert into test values('infinity'::timestamp);
  select * from test where a > now();
will return no rows.

Of course, this is no use if you want the field to be part of your primary
key.

----- Original Message -----
From: "Jean-Christian Imbeault" <jc@mega-bucks.co.jp>
To: "Jean-Christian Imbeault" <jc@mega-bucks.co.jp>
Cc: "pgsql-general" <pgsql-general@postgresql.org>
Sent: Thursday, December 12, 2002 2:14 AM
Subject: Re: [GENERAL] infinity as a date


> Bruno Wolff III wrote:
>  >
>  > Dates cannot have a value of 'infinity'. Either you can store
timestamps
>  > instead of dates or use another column to indicate to indicate the date
>  > is infinite and have your tests check that column as well as the date
>  > column.
>
> Ok, so why does postgres let me get away with:
>
> JC=# create table test(a date);
> CREATE TABLE
> JC=# insert into test values('infinity'::timestamp);
> INSERT 1030323 1
>
> If dates cannot hvae a value of infinity why can I insert 'infinity'
> into a date field?
>
> Should not postgres throw an error?
>
> Jc
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>
>


Re: infinity as a date

От
Tom Lane
Дата:
Jean-Christian Imbeault <jc@mega-bucks.co.jp> writes:
> I see that Postgres has a special keyword "infinity" for use with
> timestamps. Is there an equivalent for dates?

There is not.

> I tried the following but it doesn't quite work:

> JC=# create table test(a date);
> CREATE TABLE
> JC=# insert into test values('infinity'::timestamp);
> INSERT 1030323 1
> JC=# select * from test;
>   a
> ---

> (1 row)

It appears that what actually gets stored in test.a is NULL ... which
is not surprising given the source code for timestamp_date():

    if (TIMESTAMP_NOT_FINITE(timestamp))
        PG_RETURN_NULL();

I think that this is an outright bug: if type DATE doesn't have a
concept of infinity then it should throw an error, not translate
infinity to NULL.  NULL means "unknown", not "I cannot cope with this
value".

Comments?

            regards, tom lane

Re: infinity as a date

От
Jean-Christian Imbeault
Дата:
Tom Lane wrote:
>
> I think that this is an outright bug: if type DATE doesn't have a
> concept of infinity then it should throw an error, not translate
> infinity to NULL.  NULL means "unknown", not "I cannot cope with this
> value".

I agree, which is why I brought it up.

As an aside, why is there a concept of an infinite timestamp but not one
for date? I am puzzled as to why the there is no concept of an infinite
date.

Thanks!

Jc


Re: infinity as a date

От
Tom Lane
Дата:
Jean-Christian Imbeault <jc@mega-bucks.co.jp> writes:
> As an aside, why is there a concept of an infinite timestamp but not one
> for date?

Purely historical, I'd imagine.  The various Postgres datatypes were
developed at different times by different people.  Tom Lockhart perhaps
remembers more about this particular discrepancy.

If you are sufficiently annoyed, please submit patches to make DATE
treat MAXINT and MININT as +infinity and -infinity instead of normal
dates.  I would expect we'd accept such a patch.

            regards, tom lane

Re: infinity as a date

От
Jean-Christian Imbeault
Дата:
Tom Lane wrote:
>
> Purely historical, I'd imagine.

Fair enough.

> If you are sufficiently annoyed, please submit patches to make DATE
> treat MAXINT and MININT as +infinity and -infinity instead of normal
> dates.  I would expect we'd accept such a patch.

I am not annoyed, just curious. And I would love to submit patches but I
am not up to it. My programming skills are only slightly better than
that of a highly trained monkey ... But when I do feel proficient enough
  postgres is definitely the open-source project I would most like to
contribute to.

Jc


Re: infinity as a date

От
"Peter Darley"
Дата:
Tom and Everyone,
    Not that I feel that I get a vote, but it seems to me that an infinite date
doesn't make any sense.  An interval is a measure of something (a value),
which could be infinite, but a date is a point in time (not a value),
similar to a location, and I don't think that the concept of an infinite
point in time makes any more sense than an infinite street address.
    Just my $0.02.
Thanks,
Peter Darley

-----Original Message-----
From: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org]On Behalf Of Tom Lane
Sent: Wednesday, December 11, 2002 10:35 PM
To: Jean-Christian Imbeault
Cc: pgsql-general
Subject: Re: [GENERAL] infinity as a date


Jean-Christian Imbeault <jc@mega-bucks.co.jp> writes:
> As an aside, why is there a concept of an infinite timestamp but not one
> for date?

Purely historical, I'd imagine.  The various Postgres datatypes were
developed at different times by different people.  Tom Lockhart perhaps
remembers more about this particular discrepancy.

If you are sufficiently annoyed, please submit patches to make DATE
treat MAXINT and MININT as +infinity and -infinity instead of normal
dates.  I would expect we'd accept such a patch.

            regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)


Re: infinity as a date

От
Jean-Christian Imbeault
Дата:
Peter Darley wrote:
>
>     Not that I feel that I get a vote, but it seems to me that an infinite date
> doesn't make any sense.

I agree, but if you are going to have infinite timestamps, you should
have infinite dates. A timestamp is a point in time after all ... just
like a date.

I don't care either way, I just want consistency.

Jc


Re: infinity as a date

От
Bruce Momjian
Дата:
Added to TODO:

    * Allow infinite dates just like infinite timestamps

---------------------------------------------------------------------------

Jean-Christian Imbeault wrote:
> Peter Darley wrote:
> >
> >     Not that I feel that I get a vote, but it seems to me that an infinite date
> > doesn't make any sense.
>
> I agree, but if you are going to have infinite timestamps, you should
> have infinite dates. A timestamp is a point in time after all ... just
> like a date.
>
> I don't care either way, I just want consistency.
>
> Jc
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073