public inbox for [email protected]
help / color / mirror / Atom feedFrom: Shin Berg <[email protected]>
To: [email protected]
Subject: Re: Inconsistency in owner assignment between INDEX and STATISTICS
Date: Thu, 26 Feb 2026 18:52:38 +0900
Message-ID: <CACSdjfPuNND8dn8zYame6mRwoDPKxMKRQvih=W1Nrq5urvwTsg@mail.gmail.com> (raw)
In-Reply-To: <CACSdjfMWcR7aJUDf6XNt_yaDi+riz3Ku4EQ-x3xA=Xx1209n2g@mail.gmail.com>
References: <CACSdjfMWcR7aJUDf6XNt_yaDi+riz3Ku4EQ-x3xA=Xx1209n2g@mail.gmail.com>
Gentle ping on this thread — any thoughts or concerns about the
proposed alignment?
Thanks.
On Sat, Feb 14, 2026 at 5:48 PM Shin Berg <[email protected]> wrote:
> Hi,
>
> I'd like to raise a small consistency issue between how INDEX and extended
> STATISTICS handle object ownership, and ask whether aligning them would be
> desirable.
>
> Current behavior (tested on REL_17_STABLE):
>
> - When a superuser creates an INDEX on another user's table, the index is
> owned by the *table owner* (see catalog/index.c: index relation's relowner
> is set from the heap relation's relowner).
> - When a superuser creates STATISTICS on another user's table, the
> statistics object is owned by the *current user* (statscmds.c: stxowner =
> GetUserId()).
>
> So in a scenario where a DBA creates both an index and extended statistics
> on a user's table, the table owner can DROP the index (because they own it)
> but cannot DROP the statistics object (they get "does not exist" when
> lacking ownership, which hides the real permission issue). That can cause
> operational friction in multi-tenant or shared-schema setups (e.g. the
> table owner cannot drop the statistics to resolve dependency issues before
> altering the table).
>
> Reproduction (as superuser, then as table owner):
>
> CREATE SCHEMA shared_schema;
> CREATE USER bob;
> GRANT USAGE, CREATE ON SCHEMA shared_schema TO bob;
>
> SET ROLE bob;
> CREATE TABLE shared_schema.bob_table (a int, b int);
> RESET ROLE;
>
> CREATE INDEX idx_bob ON shared_schema.bob_table(a);
> CREATE STATISTICS stat_bob ON a, b FROM shared_schema.bob_table;
>
> SELECT 'INDEX', c.relname, pg_get_userbyid(c.relowner) FROM pg_index i
> JOIN pg_class c ON c.oid = i.indexrelid
> WHERE indrelid = 'shared_schema.bob_table'::regclass
> UNION ALL
> SELECT 'STATISTICS', stxname, pg_get_userbyid(stxowner) FROM
> pg_statistic_ext
> WHERE stxrelid = 'shared_schema.bob_table'::regclass;
> -- INDEX owner = bob, STATISTICS owner = superuser
>
> SET ROLE bob;
> DROP INDEX shared_schema.idx_bob; -- succeeds
> DROP STATISTICS shared_schema.stat_bob; -- ERROR: statistics object
> "..." does not exist
>
> I'm not sure if the current STATISTICS ownership behavior was intentional.
> If it wasn't, would it make sense to assign the statistics object's owner
> to the relation owner (same as INDEX) for consistency and to avoid the
> above scenario?
>
> Thanks for your time.
>
view thread (7+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: Inconsistency in owner assignment between INDEX and STATISTICS
In-Reply-To: <CACSdjfPuNND8dn8zYame6mRwoDPKxMKRQvih=W1Nrq5urvwTsg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox