Re: SQL:2011 application time
Peter Eisentraut <peter.eisentraut@enterprisedb.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
On 21.11.21 02:51, Paul A Jungwirth wrote: > Here are updated patches. They are rebased and clean up some of my > TODOs. This patch set looks very interesting. It's also very big, so it's difficult to see how to get a handle on it. I did a pass through it to see if there were any obvious architectural or coding style problems. I also looked at some of your TODO comments to see if I had something to contribute there. I'm confused about how to query tables based on application time periods. Online, I see examples using AS OF, but in the SQL standard I only see this used for system time, which we are not doing here. What is your understanding of that? v10-0001-Add-PERIODs.patch src/backend/commands/tablecmds.c Might be worth explaining somewhere why AT_PASS_ADD_PERIOD needs to be its own pass. -- Ah, this is explained in ATPrepCmd(). Maybe that is okay, but I would tend to prefer a comprehensive explanation here rather than sprinkled around. make_period_not_backward(): Hardcoding the name of the operator as "<" is not good. You should perhaps lookup the less-than operator in the type cache. Look around for TYPECACHE_LT_OPR for how this is usually done. validate_period(): Could use an explanatory comment. There are a bunch of output arguments, and it's not clear what all of this is supposed to do, and what "validating" is in this context. MergeAttributes(): I would perhaps initially just prohibit inheritance situations that involve periods on either side. (It should work for partitioning, IMO, but that should be easier to arrange.) AlterTableGetLockLevel(): The choice of AccessExclusiveLock looks correct. I think the whole thing can also be grouped with some of the other "affects concurrent SELECTs" cases? Maybe the node type Period could have a slightly more specific name, perhaps PeriodDef, analogous to ColumnDef? I didn't follow why indexes would have periods, for example, the new period field in IndexStmt. Is that explained anywhere? While reading this patch I kept wondering whether it would be possible to fold periods into pg_attribute, perhaps with negative attribute numbers. Have you looked into something like that? No doubt it's also complicated, but it might simplify some things, like the name conflict checking. v10-0002-Add-temporal-PRIMARY-KEY-and-UNIQUE-constraints.patch src/backend/catalog/Catalog.pm: I see you use this change in the subsequent patches, but I would recommend skipping all this. The comments added are kind of redundant with the descr fields anyway. transformIndexConstraint(): As above, we can't look up the && operator by name. In this case, I suppose we should look it up through the index AM support operators. Further, the additions to this function are very complicated and not fully explained. I'm suspicious about things like findNewOrOldColumn() -- generally we should look up columns by number not name. Perhaps you can add a header comment or split out the code further into smaller functions. pg_dump.c getIndexes() has been refactored since to make version-specific additions easier. But your patch is now failing to apply because of this. Of course, the main problem in this patch is that for most uses it requires btree_gist. I think we should consider moving that into core, or at least the support for types that are most relevant to this functionality, specifically the date/time types. Aside from user convenience, this would also allow writing more realistic test cases. v10-0003-Add-UPDATE-DELETE-FOR-PORTION-OF.patch Use of MINVALUE and MAXVALUE for unbounded seems problematic to me. (If it is some value, it is not really larger than any value.) We have the keyword UNBOUNDED, which seems better suited. src/backend/access/brin/brin_minmax_multi.c These renaming changes seem unrelated (but still seem like a good idea). Should they be progressed separately? Again, some hardcoded operator name lookup in this patch. I don't understand why a temporal primary key is required for doing UPDATE FOR PORTION OF. I don't see this in the standard. v10-0004-Add-temporal-FOREIGN-KEYs.patch Do we really need different trigger names depending on whether the foreign key is temporal? range_as_string() doesn't appear to be used anywhere. I ran out of steam on this patch, it's very big. But it seems sound in general. How to proceed. I suppose we could focus on committing 0001 and 0002 first. That would be a sensible feature set even if the remaining patches did not make a release. I do feel we need to get btree_gist into core. That might be a big job by itself. I'm also bemused why btree_gist is so bloated compared to btree_gin. btree_gin uses macros to eliminate duplicate code where btree_gist is full of copy-and-paste. So there are some opportunities there to make things more compact. Is there anything else you think we can do as preparatory work to make the main patches more manageable?