From: | Vik Fearing <vik(at)postgresfriends(dot)org> |
---|---|
To: | Paul Jungwirth <pj(at)illuminatedcomputing(dot)com>, Peter Eisentraut <peter(at)eisentraut(dot)org> |
Cc: | Corey Huinker <corey(dot)huinker(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: SQL:2011 application time |
Date: | 2023-09-01 22:41:13 |
Message-ID: | 5463561d-2e35-2e49-f516-df64dd5510e7@postgresfriends.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 9/1/23 21:56, Paul Jungwirth wrote:
> On 9/1/23 03:50, Vik Fearing wrote:
>> On 9/1/23 11:30, Peter Eisentraut wrote:
>>> 1) If I write UNIQUE (a, b, c WITHOUT OVERLAPS), does the WITHOUT
>>> OVERLAPS clause attach to the last column, or to the whole column
>>> list? In the SQL standard, you can only have one period and it has to
>>> be listed last, so this question does not arise. But here we are
>>> building a more general facility to then build the SQL facility on
>>> top of. So I think it doesn't make sense that the range column must
>>> be last or that there can only be one. Also, your implementation
>>> requires at least one non-overlaps column, which also seems like a
>>> confusing restriction.
>>>
>>> I think the WITHOUT OVERLAPS clause should be per-column, so that
>>> something like UNIQUE (a WITHOUT OVERLAPS, b, c WITHOUT OVERLAPS)
>>> would be possible. Then the WITHOUT OVERLAPS clause would directly
>>> correspond to the choice between equality or overlaps operator per
>>> column.
>>>
>>> An alternative interpretation would be that WITHOUT OVERLAPS applies
>>> to the whole column list, and we would take it to mean, for any range
>>> column, use the overlaps operator, for any non-range column, use the
>>> equals operator. But I think this would be confusing and would
>>> prevent the case of using the equality operator for some ranges and
>>> the overlaps operator for some other ranges in the same key.
>>
>> I prefer the first option. That is: WITHOUT OVERLAPS applies only to
>> the column or expression it is attached to, and need not be last in line.
>
> I agree. The second option seems confusing and is more restrictive.
>
> I think allowing multiple uses of `WITHOUT OVERLAPS` (and in any
> position) is a great recommendation that enables a lot of new
> functionality. Several books[1,2] about temporal databases describe a
> multi-dimensional temporal space (even beyond application time vs.
> system time), and the standard is pretty disappointing here. It's not a
> weird idea.
>
> But I just want to be explicit that this isn't something the standard
> describes. (I think everyone in the conversation so far understands
> that.) So far I've tried to be pretty scrupulous about following
> SQL:2011, although personally I'd rather see Postgres support this
> functionality. And it's not like it goes *against* what the standard
> says. But if there are any objections, I'd love to hear them before
> putting in the work. :-)
I have no problem with a first version doing exactly what the standard
says and expanding it later.
> If we allow multiple+anywhere WITHOUT OVERLAPS in PRIMARY KEY & UNIQUE
> constraints, then surely we also allow multiple+anywhere PERIOD in
> FOREIGN KEY constraints too. (I guess the standard switched keywords
> because a FK is more like "MUST OVERLAPS". :-)
Seems reasonable.
> Also if you have multiple application-time dimensions we probably need
> to allow multiple FOR PORTION OF clauses. I think the syntax would be:
>
> UPDATE t
> FOR PORTION OF valid_at FROM ... TO ...
> FOR PORTION OF asserted_at FROM ... TO ...
> [...]
> SET foo = bar
>
> Does that sound okay?
That sounds really cool.
> [1] C. J. Date, Hugh Darwen, Nikos Lorentzos. Time and Relational
> Theory, Second Edition: Temporal Databases in the Relational Model and
> SQL. 2nd edition, 2014.
> [2] Tom Johnston. Bitemporal Data: Theory and Practice. 2014.
Thanks! I have ordered these books.
--
Vik Fearing
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Geoghegan | 2023-09-02 00:38:13 | Re: Why doesn't Vacuum FULL update the VM |
Previous Message | Vik Fearing | 2023-09-01 21:48:22 | Re: Why doesn't Vacuum FULL update the VM |