Use version for builtin collations.
authorJeff Davis
Fri, 29 Mar 2024 17:52:24 +0000 (10:52 -0700)
committerJeff Davis
Fri, 29 Mar 2024 17:53:26 +0000 (10:53 -0700)
Given that the version field already exists, there's little reason not
to use it. Suggestion from Peter Eisentraut.

Discussion: https://postgr.es/m/613c120a-5413-4fa7-a501-6590eae558f8@eisentraut.org
Reviewed-by: Peter Eisentraut
src/backend/utils/adt/pg_locale.c
src/include/catalog/catversion.h
src/include/catalog/pg_collation.dat

index e10d328fc3a806bbafb3f64e13d7ab3444cb7dc0..377f5837a05ce36be719c25f413411a4e626d4f7 100644 (file)
@@ -1732,13 +1732,23 @@ get_collation_actual_version(char collprovider, const char *collcollate)
 
    /*
     * The only two supported locales (C and C.UTF-8) are both based on memcmp
-    * and are not expected to change.
+    * and are not expected to change, but track the version anyway.
     *
     * Note that the character semantics may change for some locales, but the
     * collation version only tracks changes to sort order.
     */
    if (collprovider == COLLPROVIDER_BUILTIN)
-       return NULL;
+   {
+       if (strcmp(collcollate, "C") == 0)
+           return "1";
+       else if (strcmp(collcollate, "C.UTF-8") == 0)
+           return "1";
+       else
+           ereport(ERROR,
+                   (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+                    errmsg("invalid locale name \"%s\" for builtin provider",
+                           collcollate)));
+   }
 
 #ifdef USE_ICU
    if (collprovider == COLLPROVIDER_ICU)
index fd4a482d90b61eac8f54da7903a85ab0d8930b8a..7d8e002c776c67aa537740f9cccb556553020839 100644 (file)
@@ -57,6 +57,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 202403272
+#define CATALOG_VERSION_NO 202403291
 
 #endif
index 083b0cdccaa53e0c3b1d73886a5d0478fbf9f099..dcf554bbd581dfd7542c55c7712052a0e1dab9ae 100644 (file)
   collcollate => 'POSIX', collctype => 'POSIX' },
 { oid => '962', descr => 'sorts by Unicode code point, C character semantics',
   collname => 'ucs_basic', collprovider => 'b', collencoding => '6',
-  colllocale => 'C' },
+  colllocale => 'C', collversion => '1' },
 { oid => '963',
   descr => 'sorts using the Unicode Collation Algorithm with default settings',
   collname => 'unicode', collprovider => 'i', collencoding => '-1',
   colllocale => 'und' },
 { oid => '811', descr => 'sorts by Unicode code point; Unicode and POSIX character semantics',
   collname => 'pg_c_utf8', collprovider => 'b', collencoding => '6',
-  colllocale => 'C.UTF-8' },
+  colllocale => 'C.UTF-8', collversion => '1' },
 
 ]