From 464cc1509fab719b1698719e196a86b6757f6645 Mon Sep 17 00:00:00 2001 From: Dave Page Date: Tue, 9 Jun 2026 11:54:08 +0100 Subject: [PATCH] Fix index column not shown when its name requires quoting. #6481 The is_exp flag compared pg_get_indexdef() (which returns the SQL-quoted identifier) directly against a.attname (the raw name). For any column name needing quoting these differ, so a plain column was wrongly treated as an expression and not rendered, and validation reported it empty. Compare against pg_catalog.quote_ident(a.attname) instead, which matches pg_get_indexdef()'s output for both normal and quoted names; real expressions (attname NULL) still evaluate as expressions. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/en_US/release_notes_9_16.rst | 2 ++ .../exclusion_constraint/sql/default/get_constraint_cols.sql | 2 +- .../tables/templates/indexes/sql/11_plus/column_details.sql | 2 +- .../tables/templates/indexes/sql/default/column_details.sql | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/en_US/release_notes_9_16.rst b/docs/en_US/release_notes_9_16.rst index a7ec92e1bee..11d3e0687fb 100644 --- a/docs/en_US/release_notes_9_16.rst +++ b/docs/en_US/release_notes_9_16.rst @@ -25,3 +25,5 @@ Housekeeping Bug fixes ********* + + | `Issue #6481 `_ - Fixed an issue where an index or exclusion constraint column was not shown in the Properties panel (and reported as empty) when the column name required quoting (e.g. it contained a double quote or special characters). diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_constraint_cols.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_constraint_cols.sql index 325656de814..a621dac5fad 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_constraint_cols.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/default/get_constraint_cols.sql @@ -12,7 +12,7 @@ SELECT coll.collname, nspc.nspname as collnspname, pg_catalog.format_type(ty.oid,NULL) AS datatype, - CASE WHEN pg_catalog.pg_get_indexdef(i.indexrelid, {{loop.index}}, true) = a.attname THEN FALSE ELSE TRUE END AS is_exp + CASE WHEN pg_catalog.pg_get_indexdef(i.indexrelid, {{loop.index}}, true) = pg_catalog.quote_ident(a.attname) THEN FALSE ELSE TRUE END AS is_exp FROM pg_catalog.pg_index i JOIN pg_catalog.pg_attribute a ON (a.attrelid = i.indexrelid AND attnum = {{loop.index}}) JOIN pg_catalog.pg_type ty ON ty.oid=a.atttypid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/11_plus/column_details.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/11_plus/column_details.sql index 05c468df5f2..cc53e6877c3 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/11_plus/column_details.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/11_plus/column_details.sql @@ -9,7 +9,7 @@ SELECT END::text[] AS options, i.attnum, pg_catalog.pg_get_indexdef(i.indexrelid, i.attnum, true) as attdef, - CASE WHEN pg_catalog.pg_get_indexdef(i.indexrelid, i.attnum, true) = a.attname THEN FALSE ELSE TRUE END AS is_exp, + CASE WHEN pg_catalog.pg_get_indexdef(i.indexrelid, i.attnum, true) = pg_catalog.quote_ident(a.attname) THEN FALSE ELSE TRUE END AS is_exp, a.attstattarget as statistics, CASE WHEN (o.opcdefault = FALSE) THEN o.opcname ELSE null END AS opcname, op.oprname AS oprname, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/column_details.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/column_details.sql index 9e79b0cff67..560ae843ef1 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/column_details.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/indexes/sql/default/column_details.sql @@ -9,7 +9,7 @@ SELECT END::text[] AS options, i.attnum, pg_catalog.pg_get_indexdef(i.indexrelid, i.attnum, true) as attdef, - CASE WHEN pg_catalog.pg_get_indexdef(i.indexrelid, i.attnum, true) = a.attname THEN FALSE ELSE TRUE END AS is_exp, + CASE WHEN pg_catalog.pg_get_indexdef(i.indexrelid, i.attnum, true) = pg_catalog.quote_ident(a.attname) THEN FALSE ELSE TRUE END AS is_exp, a.attstattarget as statistics, CASE WHEN (o.opcdefault = FALSE) THEN o.opcname ELSE null END AS opcname, op.oprname AS oprname,