From d371bebd3d16949171282c8252dfd6f82d2e7378 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Thu, 22 Oct 2015 09:33:51 -0700 Subject: [PATCH] Remove redundant CREATEUSER/NOCREATEUSER options in CREATE ROLE et al. Once upon a time we did not have a separate CREATEROLE privilege, and CREATEUSER effectively meant SUPERUSER. When we invented CREATEROLE (in 8.1) we also added SUPERUSER so as to have a less confusing keyword for this role property. However, we left CREATEUSER in place as a deprecated synonym for SUPERUSER, because of backwards-compatibility concerns. It's still there and is still confusing people, as for example in bug #13694 from Justin Catterson. 9.6 will be ten years or so later, which surely ought to be long enough to end the deprecation and just remove these old keywords. Hence, do so. --- doc/src/sgml/ref/alter_role.sgml | 3 --- doc/src/sgml/ref/alter_user.sgml | 1 - doc/src/sgml/ref/create_group.sgml | 1 - doc/src/sgml/ref/create_role.sgml | 14 -------------- doc/src/sgml/ref/create_user.sgml | 1 - src/backend/parser/gram.y | 10 ---------- .../utils/mb/conversion_procs/regress_prolog | 2 +- src/bin/psql/tab-complete.c | 16 ++++++++-------- src/test/regress/expected/conversion.out | 2 +- src/test/regress/sql/conversion.sql | 2 +- 10 files changed, 11 insertions(+), 41 deletions(-) diff --git a/doc/src/sgml/ref/alter_role.sgml b/doc/src/sgml/ref/alter_role.sgml index 7638817b830..da36ad96967 100644 --- a/doc/src/sgml/ref/alter_role.sgml +++ b/doc/src/sgml/ref/alter_role.sgml @@ -28,7 +28,6 @@ ALTER ROLE <replaceable class="PARAMETER">role_specification</replaceable> [ WIT SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE - | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION @@ -160,8 +159,6 @@ ALTER ROLE { <replaceable class="PARAMETER">role_specification</replaceable> | A <term><literal>NOCREATEDB</></term> <term><literal>CREATEROLE</literal></term> <term><literal>NOCREATEROLE</literal></term> - <term><literal>CREATEUSER</literal></term> - <term><literal>NOCREATEUSER</literal></term> <term><literal>INHERIT</literal></term> <term><literal>NOINHERIT</literal></term> <term><literal>LOGIN</literal></term> diff --git a/doc/src/sgml/ref/alter_user.sgml b/doc/src/sgml/ref/alter_user.sgml index 0ffaa16da2f..84a0c52191f 100644 --- a/doc/src/sgml/ref/alter_user.sgml +++ b/doc/src/sgml/ref/alter_user.sgml @@ -28,7 +28,6 @@ ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> [ WIT SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE - | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION diff --git a/doc/src/sgml/ref/create_group.sgml b/doc/src/sgml/ref/create_group.sgml index 981ce51e5f4..1d5cc9b5969 100644 --- a/doc/src/sgml/ref/create_group.sgml +++ b/doc/src/sgml/ref/create_group.sgml @@ -28,7 +28,6 @@ CREATE GROUP <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <repla SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE - | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | [ ENCRYPTED | UNENCRYPTED ] PASSWORD '<replaceable class="PARAMETER">password</replaceable>' diff --git a/doc/src/sgml/ref/create_role.sgml b/doc/src/sgml/ref/create_role.sgml index 240c21ce85f..38cd4c83696 100644 --- a/doc/src/sgml/ref/create_role.sgml +++ b/doc/src/sgml/ref/create_role.sgml @@ -28,7 +28,6 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE - | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION @@ -124,19 +123,6 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac </listitem> </varlistentry> - <varlistentry> - <term><literal>CREATEUSER</literal></term> - <term><literal>NOCREATEUSER</literal></term> - <listitem> - <para> - These clauses are an obsolete, but still accepted, spelling of - <literal>SUPERUSER</literal> and <literal>NOSUPERUSER</literal>. - Note that they are <emphasis>not</> equivalent to - <literal>CREATEROLE</literal> as one might naively expect! - </para> - </listitem> - </varlistentry> - <varlistentry> <term><literal>INHERIT</literal></term> <term><literal>NOINHERIT</literal></term> diff --git a/doc/src/sgml/ref/create_user.sgml b/doc/src/sgml/ref/create_user.sgml index 065999c85a4..6c690b36df5 100644 --- a/doc/src/sgml/ref/create_user.sgml +++ b/doc/src/sgml/ref/create_user.sgml @@ -28,7 +28,6 @@ CREATE USER <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE - | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 8bd511952c9..fba91d53ac3 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -966,16 +966,6 @@ AlterOptRoleElem: $$ = makeDefElem("superuser", (Node *)makeInteger(TRUE)); else if (strcmp($1, "nosuperuser") == 0) $$ = makeDefElem("superuser", (Node *)makeInteger(FALSE)); - else if (strcmp($1, "createuser") == 0) - { - /* For backwards compatibility, synonym for SUPERUSER */ - $$ = makeDefElem("superuser", (Node *)makeInteger(TRUE)); - } - else if (strcmp($1, "nocreateuser") == 0) - { - /* For backwards compatibility, synonym for SUPERUSER */ - $$ = makeDefElem("superuser", (Node *)makeInteger(FALSE)); - } else if (strcmp($1, "createrole") == 0) $$ = makeDefElem("createrole", (Node *)makeInteger(TRUE)); else if (strcmp($1, "nocreaterole") == 0) diff --git a/src/backend/utils/mb/conversion_procs/regress_prolog b/src/backend/utils/mb/conversion_procs/regress_prolog index f5c71790cf2..f35241a2d09 100644 --- a/src/backend/utils/mb/conversion_procs/regress_prolog +++ b/src/backend/utils/mb/conversion_procs/regress_prolog @@ -1,7 +1,7 @@ -- -- create user defined conversion -- -CREATE USER conversion_test_user WITH NOCREATEDB NOCREATEUSER; +CREATE USER conversion_test_user WITH NOCREATEDB NOCREATEROLE; SET SESSION AUTHORIZATION conversion_test_user; CREATE CONVERSION myconv FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8; -- diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 4eb5058416c..0e8d3951a29 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1264,8 +1264,8 @@ psql_completion(const char *text, int start, int end) { static const char *const list_ALTERUSER[] = {"BYPASSRLS", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", - "CREATEUSER", "ENCRYPTED", "INHERIT", "LOGIN", "NOBYPASSRLS", - "NOCREATEDB", "NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", + "ENCRYPTED", "INHERIT", "LOGIN", "NOBYPASSRLS", + "NOCREATEDB", "NOCREATEROLE", "NOINHERIT", "NOLOGIN", "NOREPLICATION", "NOSUPERUSER", "PASSWORD", "RENAME TO", "REPLICATION", "RESET", "SET", "SUPERUSER", "UNENCRYPTED", "VALID UNTIL", "WITH", NULL}; @@ -1282,8 +1282,8 @@ psql_completion(const char *text, int start, int end) /* Similar to the above, but don't complete "WITH" again. */ static const char *const list_ALTERUSER_WITH[] = {"BYPASSRLS", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", - "CREATEUSER", "ENCRYPTED", "INHERIT", "LOGIN", "NOBYPASSRLS", - "NOCREATEDB", "NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", + "ENCRYPTED", "INHERIT", "LOGIN", "NOBYPASSRLS", + "NOCREATEDB", "NOCREATEROLE", "NOINHERIT", "NOLOGIN", "NOREPLICATION", "NOSUPERUSER", "PASSWORD", "RENAME TO", "REPLICATION", "RESET", "SET", "SUPERUSER", "UNENCRYPTED", "VALID UNTIL", NULL}; @@ -2671,8 +2671,8 @@ psql_completion(const char *text, int start, int end) { static const char *const list_CREATEROLE[] = {"ADMIN", "BYPASSRLS", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", - "CREATEUSER", "ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOBYPASSRLS", - "NOCREATEDB", "NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", + "ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOBYPASSRLS", + "NOCREATEDB", "NOCREATEROLE", "NOINHERIT", "NOLOGIN", "NOREPLICATION", "NOSUPERUSER", "PASSWORD", "REPLICATION", "ROLE", "SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", "WITH", NULL}; @@ -2690,8 +2690,8 @@ psql_completion(const char *text, int start, int end) /* Similar to the above, but don't complete "WITH" again. */ static const char *const list_CREATEROLE_WITH[] = {"ADMIN", "BYPASSRLS", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", - "CREATEUSER", "ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOBYPASSRLS", - "NOCREATEDB", "NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", + "ENCRYPTED", "IN", "INHERIT", "LOGIN", "NOBYPASSRLS", + "NOCREATEDB", "NOCREATEROLE", "NOINHERIT", "NOLOGIN", "NOREPLICATION", "NOSUPERUSER", "PASSWORD", "REPLICATION", "ROLE", "SUPERUSER", "SYSID", "UNENCRYPTED", "VALID UNTIL", NULL}; diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out index 13f1cf3447b..96ea3b9e190 100644 --- a/src/test/regress/expected/conversion.out +++ b/src/test/regress/expected/conversion.out @@ -3,7 +3,7 @@ SET bytea_output TO escape; -- -- create user defined conversion -- -CREATE USER conversion_test_user WITH NOCREATEDB NOCREATEUSER; +CREATE USER conversion_test_user WITH NOCREATEDB NOCREATEROLE; SET SESSION AUTHORIZATION conversion_test_user; CREATE CONVERSION myconv FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8; -- diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql index e27f06f5c75..fb184453c24 100644 --- a/src/test/regress/sql/conversion.sql +++ b/src/test/regress/sql/conversion.sql @@ -4,7 +4,7 @@ SET bytea_output TO escape; -- -- create user defined conversion -- -CREATE USER conversion_test_user WITH NOCREATEDB NOCREATEUSER; +CREATE USER conversion_test_user WITH NOCREATEDB NOCREATEROLE; SET SESSION AUTHORIZATION conversion_test_user; CREATE CONVERSION myconv FOR 'LATIN1' TO 'UTF8' FROM iso8859_1_to_utf8; -- -- GitLab