some validate_relation_kind() tidying
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-02-18T15:15:09Z
Lists: pgsql-hackers
Attachments
- 0001-Change-error-message-for-sequence-validate_relation_.patch (text/plain) patch 0001
- 0002-Flip-logic-in-table-validate_relation_kind.patch (text/plain) patch 0002
We have three different functions called validate_relation_kind(), namely in src/backend/access/index/indexam.c src/backend/access/sequence/sequence.c src/backend/access/table/table.c These all check which relkinds are permitted by index_open(), sequence_open(), and table_open(), respectively, which are each wrappers around relation_open() (which accepts any relkind). I always found the one in table.c a little too mysterious, because it just checks which relkinds it does *not* want, and so if you want to know whether a particular relkind is suitable for table_open(), you need to do additional research and check what all the possible relkinds are and so on, and there is no real explanation why those choices were made. I think it would be clearer and more robust and also more consistent with the other ones if we flipped that around and listed the ones that are acceptable and why. Secondly, the sequence.c one was probably copied from the table.c one, but I think we can make the error message a bit more direct by just saying "... is not a sequence" instead of "cannot open relation". These are the two attached patches. This is just something I found while working on something else nearby.
Commits
-
Sort out table_open vs. relation_open in rewriter
- d537f59fbbfc 19 (unreleased) landed
-
Rename validate_relation_kind()
- 797872f6b9c9 19 (unreleased) landed
-
Flip logic in table validate_relation_kind
- d7be57ad85da 19 (unreleased) landed
-
Change error message for sequence validate_relation_kind()
- 55f385932920 19 (unreleased) landed