diff --git a/doc/src/sgml/ref/createuser.sgml b/doc/src/sgml/ref/createuser.sgml index 58ed1116420..ba7ed1f8531 100644 --- a/doc/src/sgml/ref/createuser.sgml +++ b/doc/src/sgml/ref/createuser.sgml @@ -82,10 +82,10 @@ PostgreSQL documentation - + - Indicates an existing role that will be automatically added as a member of the new + Specifies an existing role that will be automatically added as a member of the new role with admin option, giving it the right to grant membership in the new role to others. Multiple existing roles can be specified by writing multiple switches. @@ -149,10 +149,10 @@ PostgreSQL documentation - + - Indicates the new role should be automatically added as a member + Specifies the new role should be automatically added as a member of the specified existing role. Multiple existing roles can be specified by writing multiple switches. @@ -222,10 +222,10 @@ PostgreSQL documentation - + - Indicates the specified existing role should be automatically + Specifies an existing role that will be automatically added as a member of the new role. Multiple existing roles can be specified by writing multiple switches. diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c index 0c7f454be50..2d5e2452f78 100644 --- a/src/bin/scripts/createuser.c +++ b/src/bin/scripts/createuser.c @@ -28,19 +28,21 @@ int main(int argc, char *argv[]) { static struct option long_options[] = { - {"admin", required_argument, NULL, 'a'}, + {"with-admin", required_argument, NULL, 'a'}, {"connection-limit", required_argument, NULL, 'c'}, {"createdb", no_argument, NULL, 'd'}, {"no-createdb", no_argument, NULL, 'D'}, {"echo", no_argument, NULL, 'e'}, {"encrypted", no_argument, NULL, 'E'}, - {"role", required_argument, NULL, 'g'}, + {"role", required_argument, NULL, 'g'}, /* kept for backward + * compatibility */ + {"member-of", required_argument, NULL, 'g'}, {"host", required_argument, NULL, 'h'}, {"inherit", no_argument, NULL, 'i'}, {"no-inherit", no_argument, NULL, 'I'}, {"login", no_argument, NULL, 'l'}, {"no-login", no_argument, NULL, 'L'}, - {"member", required_argument, NULL, 'm'}, + {"with-member", required_argument, NULL, 'm'}, {"port", required_argument, NULL, 'p'}, {"pwprompt", no_argument, NULL, 'P'}, {"createrole", no_argument, NULL, 'r'}, @@ -414,19 +416,19 @@ help(const char *progname) printf(_("Usage:\n")); printf(_(" %s [OPTION]... [ROLENAME]\n"), progname); printf(_("\nOptions:\n")); - printf(_(" -a, --admin=ROLE this role will be a member of new role with admin\n" + printf(_(" -a, --with-admin=ROLE ROLE will be a member of new role with admin\n" " option\n")); printf(_(" -c, --connection-limit=N connection limit for role (default: no limit)\n")); printf(_(" -d, --createdb role can create new databases\n")); printf(_(" -D, --no-createdb role cannot create databases (default)\n")); printf(_(" -e, --echo show the commands being sent to the server\n")); - printf(_(" -g, --role=ROLE new role will be a member of this role\n")); + printf(_(" -g, --member-of=ROLE new role will be a member of ROLE\n")); printf(_(" -i, --inherit role inherits privileges of roles it is a\n" " member of (default)\n")); printf(_(" -I, --no-inherit role does not inherit privileges\n")); printf(_(" -l, --login role can login (default)\n")); printf(_(" -L, --no-login role cannot login\n")); - printf(_(" -m, --member=ROLE this role will be a member of new role\n")); + printf(_(" -m, --with-member=ROLE ROLE will be a member of new role\n")); printf(_(" -P, --pwprompt assign a password to new role\n")); printf(_(" -r, --createrole role can create new roles\n")); printf(_(" -R, --no-createrole role cannot create roles (default)\n")); diff --git a/src/bin/scripts/t/040_createuser.pl b/src/bin/scripts/t/040_createuser.pl index da99d0ccb92..40452fcae3b 100644 --- a/src/bin/scripts/t/040_createuser.pl +++ b/src/bin/scripts/t/040_createuser.pl @@ -60,6 +60,22 @@ $node->issues_sql_like( [ 'createuser', '--no-bypassrls', 'regress_user8' ], qr/statement: CREATE ROLE regress_user8 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS;/, 'create a role without BYPASSRLS'); +$node->issues_sql_like( + [ 'createuser', '--with-admin', 'regress_user1', 'regress_user9' ], + qr/statement: CREATE ROLE regress_user9 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS ADMIN regress_user1;/, + '--with-admin'); +$node->issues_sql_like( + [ 'createuser', '--with-member', 'regress_user1', 'regress_user10' ], + qr/statement: CREATE ROLE regress_user10 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS ROLE regress_user1;/, + '--with-member'); +$node->issues_sql_like( + [ 'createuser', '--role', 'regress_user1', 'regress_user11' ], + qr/statement: CREATE ROLE regress_user11 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS IN ROLE regress_user1;/, + '--role (for backward compatibility)'); +$node->issues_sql_like( + [ 'createuser', '--member-of', 'regress_user1', 'regress_user12' ], + qr/statement: CREATE ROLE regress_user12 NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS IN ROLE regress_user1;/, + '--member-of'); $node->command_fails([ 'createuser', 'regress_user1' ], 'fails if role already exists');