1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-24 00:23:06 +03:00

Add note about CreateStatistics()'s selective use of check_rights.

Commit 5e4fcbe531 added a check_rights parameter to this function
for use by ALTER TABLE commands that re-create statistics objects.
However, we intentionally ignore check_rights when verifying
relation ownership because this function's lookup could return a
different answer than the caller's.  This commit adds a note to
this effect so that we remember it down the road.

Reviewed-by: Noah Misch <noah@leadboat.com>
Backpatch-through: 14
This commit is contained in:
Nathan Bossart
2025-11-14 13:20:09 -06:00
parent 7aa83ea578
commit 4c179ccb05

View File

@@ -139,7 +139,13 @@ CreateStatistics(CreateStatsStmt *stmt, bool check_rights)
errmsg("relation \"%s\" is not a table, foreign table, or materialized view",
RelationGetRelationName(rel))));
/* You must own the relation to create stats on it */
/*
* You must own the relation to create stats on it.
*
* NB: Concurrent changes could cause this function's lookup to find a
* different relation than a previous lookup by the caller, so we must
* perform this check even when check_rights == false.
*/
if (!pg_class_ownercheck(RelationGetRelid(rel), stxowner))
aclcheck_error(ACLCHECK_NOT_OWNER, get_relkind_objtype(rel->rd_rel->relkind),
RelationGetRelationName(rel));