Make locale option behavior more consistent
authorPeter Eisentraut <[email protected]>
Tue, 13 Sep 2022 12:18:45 +0000 (14:18 +0200)
committerPeter Eisentraut <[email protected]>
Tue, 13 Sep 2022 12:28:10 +0000 (14:28 +0200)
Locale options can be specified for initdb, createdb, and CREATE
DATABASE.  In initdb, it has always been possible to specify --locale
and then some --lc-* option to override a category.  CREATE DATABASE
and createdb didn't allow that, requiring either the all-categories
option or only per-category options.  In
f2553d43060edb210b36c63187d52a632448e1d2, this was changed in CREATE
DATABASE (perhaps by accident?) to be more like the initdb behavior,
but createdb still had the old behavior.

Now we change createdb to match the behavior of CREATE DATABASE and
initdb, and also update the documentation of CREATE DATABASE to match
the new behavior, which was not done in the above commit.

Author: Marina Polyakova <[email protected]>
Reviewed-by: Justin Pryzby <[email protected]>
Discussion: https://www.postgresql.org/message-id/7c99c132dc9c0ac630e0127f032ac480@postgrespro.ru

doc/src/sgml/ref/create_database.sgml
src/bin/scripts/createdb.c

index 0ce0bd8a1a62b95fafdc92339790d4e1fda39eae..ea38c647313645bd6138e25d3ab99c95fa6a8c4d 100644 (file)
@@ -145,8 +145,7 @@ CREATE DATABASE <replaceable class="parameter">name</replaceable>
       <listitem>
        <para>
         This is a shortcut for setting <symbol>LC_COLLATE</symbol>
-        and <symbol>LC_CTYPE</symbol> at once.  If you specify this,
-        you cannot specify either of those parameters.
+        and <symbol>LC_CTYPE</symbol> at once.
        </para>
        <tip>
         <para>
index e523e58b2189275dc603a06324a2f28b0f49d8b7..a1482df3d981a680dd3322052e7c03ddacc8dc26 100644 (file)
@@ -161,12 +161,10 @@ main(int argc, char *argv[])
 
        if (locale)
        {
-               if (lc_ctype)
-                       pg_fatal("only one of --locale and --lc-ctype can be specified");
-               if (lc_collate)
-                       pg_fatal("only one of --locale and --lc-collate can be specified");
-               lc_ctype = locale;
-               lc_collate = locale;
+               if (!lc_ctype)
+                       lc_ctype = locale;
+               if (!lc_collate)
+                       lc_collate = locale;
        }
 
        if (encoding)