Improving the names generated for indexes on expressions

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@lists.postgresql.org
Date: 2025-09-16T01:56:50Z
Lists: pgsql-hackers

Attachments

In the wake of the discussion around bug #18959 [1], here is
a modest proposal for improving the names we pick for expression
indexes.  The commit message explains the details, but this
example should give the flavor:

postgres=# create table mytab (f1 int, f2 text, f3 text);
CREATE TABLE
postgres=# create index on mytab(abs(f1 + 1));
CREATE INDEX
postgres=# create index on mytab((f2 || f3));
CREATE INDEX
postgres=# \d mytab
               Table "public.mytab"
 Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------
 f1     | integer |           |          | 
 f2     | text    |           |          | 
 f3     | text    |           |          | 
Indexes:
    "mytab_abs_f1_+_1_idx" btree (abs(f1 + 1))
    "mytab_f2_||_f3_idx" btree ((f2 || f3))

Formerly you got:

    "mytab_abs_idx" btree (abs(f1 + 1))
    "mytab_expr_idx" btree ((f2 || f3))

There's plenty of room for differing opinions about how to do this,
so have at it.

			regards, tom lane

[1] https://www.postgresql.org/message-id/flat/18959-f63b53b864bb1417%40postgresql.org

Commits

  1. Improve the names generated for indexes on expressions.