From d7fec1cf714d7688b256edcdbd3a683d923a6465 Mon Sep 17 00:00:00 2001 From: Matheus Alcantara Date: Thu, 9 Apr 2026 14:09:05 -0300 Subject: [PATCH v2] docs: Include database collation check on SQL from ALTER COLLATION Previously the alter_collation.sgml documentation section include a SQL that can be used to identity all collations in the current database that need to be refreshed due to a collation version miss match and the objects that depend on them. However if there is objects that use the database collation these objects are not returned by the query. This commit improve the query on alter_collation.sgml to include the database collation version check too to report such cases. --- doc/src/sgml/ref/alter_collation.sgml | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/ref/alter_collation.sgml b/doc/src/sgml/ref/alter_collation.sgml index a40a31442a8..6c40d1fb26f 100644 --- a/doc/src/sgml/ref/alter_collation.sgml +++ b/doc/src/sgml/ref/alter_collation.sgml @@ -160,12 +160,26 @@ HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg The following query can be used to identify all collations in the current database that need to be refreshed and the objects that depend on them: pg_collation_actual_version(c.oid) - ORDER BY 1, 2; +SELECT DISTINCT + currentdb AS database, + indrelid::regclass::text AS table, + indexrelid::regclass::text AS index, + collname, + collprovider, + CASE WHEN collprovider='d' THEN datcollversion ELSE collversion END AS collation_version, + CASE WHEN collprovider='d' THEN pg_database_collation_actual_version(d.oid) ELSE pg_collation_actual_version(c.oid) END AS actual_collation_version, + pg_get_indexdef(indexrelid) AS index_definition +FROM + (SELECT indexrelid, indrelid, indcollation[i] coll, current_database() AS currentdb FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s + JOIN pg_collation c ON coll=c.oid + JOIN pg_database d ON currentdb=d.datname +WHERE + ( + ((collprovider='d') AND (d.datlocprovider='c') AND d.datcollversion <> pg_database_collation_actual_version(d.oid)) + OR + ((collprovider='c') AND collversion <> pg_collation_actual_version(c.oid) ) + ) AND + collname NOT IN ('C', 'POSIX'); ]]> -- 2.53.0