Hi, Maksim!

On Wed, Feb 25, 2026 at 6:37 PM Maksim.Melnikov
<[email protected]> wrote:
> There is an issue on new feature dump statistics related to index
> processing.
> In case when table has more then one index and if one of them is index
> on expressions
> we can get error like this:
>
> pg_dump --verbose --statistics-only > /dev/null
> ...
> pg_dump: reading subscriptions
> pg_dump: reading subscription membership of tables
> pg_dump: reading dependency data
> pg_dump: saving encoding = UTF8
> pg_dump: saving "standard_conforming_strings = on"
> pg_dump: saving "search_path = "
> pg_dump: error: could not find index attname "source_system"
>
> For clarity, schema ddl attached
>
> CREATE TABLE test_table_stats (
>      id uuid NOT NULL,
>      body jsonb,
>      source_system character varying,
>      source_id character varying,
>      model_name character varying NOT NULL
> );
>
> CREATE INDEX test_table_stats_source_system_text ON test_table_stats
> USING btree (upper((source_system)::text));
> CREATE UNIQUE INDEX test_table_stats_json_system_un ON test_table_stats
> USING btree (source_system, source_id, model_name);
>
> When pg_dump sequentially process indexes in case when index is
> processed after index on expression,
> it can use index attrs names of previously processed index. I've
> attached simple patch to fix it.

I see this is a bug indeed: an index with no expression can get its
indAttNames and nindAttNames from the previous index.  But I didn't
manage to reproduce your case.  dumpRelationStats_dumper() only
iterates indexes with pg_stats entry, and those are indexes with
expressions.  Could you give more details on how did you reproduce
user-facing error?  Which particular git commit did you use?  How did
you fill the database step by step?

------
Regards,
Alexander Korotkov
Supabase


Reply via email to