Re: SQL:2011 application time
Paul A Jungwirth <pj@illuminatedcomputing.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Rename gist stratnum support function
- 32edf732e8dc 18.0 landed
-
Remove support for temporal RESTRICT foreign keys
- b83e8a2ca2eb 18.0 landed
-
Cache NO ACTION foreign keys separately from RESTRICT foreign keys
- 9926f854d077 18.0 landed
-
Fix NO ACTION temporal foreign keys when the referenced endpoints change
- 1772d554b089 18.0 landed
-
Improve whitespace in without_overlaps test
- 888d4523f0c2 18.0 landed
-
Tests for logical replication with temporal keys
- 939b0908c87a 18.0 landed
-
Support for GiST in get_equal_strategy_number()
- 74edabce7a33 18.0 landed
-
Make the conditions in IsIndexUsableForReplicaIdentityFull() more explicit
- 13544e790ef8 18.0 landed
-
Replace get_equal_strategy_number_for_am() by get_equal_strategy_number()
- a2a475b011cf 18.0 landed
-
Improve internal logical replication error for missing equality strategy
- 321c287351f7 18.0 landed
-
Simplify IsIndexUsableForReplicaIdentityFull()
- 7727049e8f66 18.0 landed
-
Fix ALTER TABLE / REPLICA IDENTITY for temporal tables
- 79b575d3bc09 18.0 landed
-
doc: Update pg_constraint.conexclop docs for WITHOUT OVERLAPS
- f683ba0867da 18.0 landed
-
doc: Add PERIOD to ALTER TABLE reference docs
- d56af4c882e2 18.0 landed
-
doc: Add WITHOUT OVERLAPS to ALTER TABLE reference docs
- bf621059500b 18.0 landed
-
Add temporal FOREIGN KEY contraints
- 89f908a6d0ac 18.0 landed
- 34768ee36165 17.0 landed
-
Add temporal PRIMARY KEY and UNIQUE constraints
- fc0438b4e805 18.0 landed
- 46a0cd4cefb4 17.0 landed
-
Add stratnum GiST support function
- 7406ab623fee 18.0 landed
- 6db4598fcb82 17.0 landed
-
Avoid crashing when a JIT-inlined backend function throws an error.
- 5d6c64d29097 17.0 cited
-
Revert temporal primary keys and foreign keys
- 8aee330af55d 17.0 landed
-
Fix ON CONFLICT DO NOTHING/UPDATE for temporal indexes
- 144c2ce0cc75 17.0 landed
-
Add test for REPLICA IDENTITY with a temporal key
- 482e108cd38d 17.0 landed
-
Use half-open interval notation in without_overlaps tests
- 5577a71fb0cc 17.0 landed
-
Use daterange and YMD in without_overlaps tests instead of tsrange.
- a88c800deb6f 17.0 landed
-
Rename pg_constraint.conwithoutoverlaps to conperiod
- 030e10ff1a36 17.0 landed
-
Fix comment on gist_stratnum_btree
- 86232a49a437 17.0 landed
-
Add missing TAP test name
- 1ab763fc22ad 16.0 cited
-
Improve error handling of HMAC computations
- 5513dc6a304d 15.0 cited
-
Rename functions to avoid future conflicts
- ee419607381d 15.0 landed
Attachments
- v30-0001-Add-temporal-FOREIGN-KEYs.patch (text/x-patch) patch v30-0001
- v30-0002-Support-multiranges-in-temporal-FKs.patch (text/x-patch) patch v30-0002
- v30-0003-Add-support-funcs-for-FOR-PORTION-OF.patch (text/x-patch) patch v30-0003
- v30-0004-Add-UPDATE-DELETE-FOR-PORTION-OF.patch (text/x-patch) patch v30-0004
- v30-0005-Add-CASCADE-SET-NULL-SET-DEFAULT-for-temporal-fo.patch (text/x-patch) patch v30-0005
- v30-0006-Add-PERIODs.patch (text/x-patch) patch v30-0006
On 3/19/24 04:02, Peter Eisentraut wrote:
> On 16.03.24 22:37, Paul A Jungwirth wrote:
>> Here is a new patch series addressing the last few feedback emails
>> from Peter & Jian He. It mostly focuses on the FKs patch, trying to
>> get it really ready to commit,
>
> I have committed the test changes (range and date format etc.).
>
> The FOREIGN KEY patch looks okay to me now. Maybe check if any of the subsequent comments from jian
> should be applied.
Okay, specifics below.
> I think we could also handle multiranges in a hardcoded way? Ranges and multiranges are hardcoded
> concepts anyway. It's just when we move to arbitrary types supporting containment, then it gets a
> bit more complicated.
>
> What would a patch that adds just multiranges on the FK side, but without the full pluggable gist
> support, look like?
Attached a separate patch extending FKs to multiranges only. I'd still love to support arbitrary
types eventually but it's not part of the patches here now.
>> I don't see any drawbacks from supporting inferred REFERENCES with
>> temporal tables, so my vote is to break from the standard here, and
>> *not* apply that follow-up patch. Should I add some docs about that?
>> Also skipping the patch will cause some annoying merge conflicts, so
>> let me know if that's what you choose and I'll handle them right away.
>
> I agree we can allow this.
Great, thanks! Took out those changes.
On 3/19/24 02:01, jian he wrote:
> + * types matching the PERIOD element. periodprocoid is a GiST support
> function to
> + * aggregate multiple PERIOD element values into a single value
> + * (whose return type need not match its inputs,
> + * e.g. many ranges can be aggregated into a multirange).
> * And aggedperiodoperoid is also a ContainedBy operator,
> - * but one whose rhs is anymultirange.
> + * but one whose rhs matches the type returned by aggedperiodoperoid.
> * That way foreign keys can compare fkattr <@ range_agg(pkattr).
> */
> void
> -FindFKPeriodOpers(Oid opclass,
> - Oid *periodoperoid,
> - Oid *aggedperiodoperoid)
> +FindFKPeriodOpersAndProcs(Oid opclass,
> + Oid *periodoperoid,
> + Oid *aggedperiodoperoid,
> + Oid *periodprocoid)
>
> I think, aggedperiodoperoid is more descriptive than periodprocoid, in
> 0005, you don't need to rename it.
> aslo do we need to squash v29 0001 to 0005 together?
I changed the operator names to {,agged}containedbyoperoid. The proc names are not included now
because we only need them for supporting more than ranges + multiranges.
> --- a/doc/src/sgml/ref/create_table.sgml
> +++ b/doc/src/sgml/ref/create_table.sgml
> @@ -1167,7 +1167,8 @@ WITH ( MODULUS <replaceable
> class="parameter">numeric_literal</replaceable>, REM
> column(s) of some row of the referenced table. If the <replaceable
> class="parameter">refcolumn</replaceable> list is omitted, the
> primary key of the <replaceable class="parameter">reftable</replaceable>
> - is used. Otherwise, the <replaceable
> class="parameter">refcolumn</replaceable>
> + is used (omitting any part declared with <literal>WITHOUT
> OVERLAPS</literal>).
> + Otherwise, the <replaceable class="parameter">refcolumn</replaceable>
> list must refer to the columns of a non-deferrable unique or primary key
> constraint or be the columns of a non-partial unique index.
> </para>
> I think this does not express that
> foreign key is PERIOD, then the last column of refcolumn must specify PERIOD?
Okay, added a sentence about that (and adjusted some other things re allowing implicit REFERENCES
and only supporting ranges + multiranges).
> + <para>
> + If the last column is marked with <literal>PERIOD</literal>,
> + it is treated in a special way.
> + While the non-<literal>PERIOD</literal> columns are compared for equality
> + (and there must be at least one of them),
> + the <literal>PERIOD</literal> column is not.
> + Instead the constraint is considered satisfied
> + if the referenced table has matching records
> + (based on the non-<literal>PERIOD</literal> parts of the key)
> + whose combined <literal>PERIOD</literal> values completely cover
> + the referencing record's.
> + In other words, the reference must have a referent for its
> entire duration.
> + This column must be a column with a range type.
> + In addition the referenced table must have a primary key
> + or unique constraint declared with <literal>WITHOUT PORTION</literal>.
> + </para>
> you forgot to change <literal>WITHOUT PORTION</literal> to
> <literal>WITHOUT OVERLAPS</literal>
Oh! Thanks, I guess I was just blind.
> Oid pf_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (PK = FK) */
> Oid pp_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (PK = PK) */
> Oid ff_eq_oprs[RI_MAX_NUMKEYS]; /* equality operators (FK = FK) */
> in struct RI_ConstraintInfo, these comments need to be updated?
In earlier feedback Peter advised not changing the "equals" language (e.g. in KeysEqual). But I
added a comment at the top of the struct to clarify.
Rebased to 605721f819.
Yours,
--
Paul ~{:-)
pj@illuminatedcomputing.com