public inbox for [email protected]
help / color / mirror / Atom feedFrom: Matheus Alcantara <[email protected]>
To: [email protected]
Subject: Re: docs: Include database collation check on SQL from alter_collation.sgml
Date: Mon, 13 Apr 2026 18:08:40 -0300
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
On Thu Apr 9, 2026 at 3:00 PM -03, Matheus Alcantara wrote:
> Hi,
>
> The ALTER COLLATION 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.
>
> The attached patch change the query to include the database collation
> check to report collation version miss match for objects that use the
> database default collation as they are not stored on pg_depend.
>
The proposed SQL on the v1 patch still don't handle the cases where an
index is using the database default collation.
The new v2 attached handle it properly. The new query is based on the
query suggested on Locale data changes wiki page [1] but with some
changes to check the collation version mismatch.
[1] https://wiki.postgresql.org/wiki/Locale_data_changes
--
Matheus Alcantara
EDB: https://www.enterprisedb.com
From d7fec1cf714d7688b256edcdbd3a683d923a6465 Mon Sep 17 00:00:00 2001
From: Matheus Alcantara <[email protected]>
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:
<programlisting><![CDATA[
-SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",
- pg_describe_object(classid, objid, objsubid) AS "Object"
- FROM pg_depend d JOIN pg_collation c
- ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid
- WHERE c.collversion <> 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');
]]></programlisting></para>
</refsect1>
--
2.53.0
Attachments:
[text/plain] v2-0001-docs-Include-database-collation-check-on-SQL-from.patch (2.6K, 2-v2-0001-docs-Include-database-collation-check-on-SQL-from.patch)
download | inline diff:
From d7fec1cf714d7688b256edcdbd3a683d923a6465 Mon Sep 17 00:00:00 2001
From: Matheus Alcantara <[email protected]>
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:
<programlisting><![CDATA[
-SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",
- pg_describe_object(classid, objid, objsubid) AS "Object"
- FROM pg_depend d JOIN pg_collation c
- ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid
- WHERE c.collversion <> 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');
]]></programlisting></para>
</refsect1>
--
2.53.0
view thread (2+ messages)
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: docs: Include database collation check on SQL from alter_collation.sgml
In-Reply-To: <[email protected]>
* 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