Thread: BUG #1485: upper case user names / creatuser

BUG #1485: upper case user names / creatuser

From
"Hannes Erven"
Date:
The following bug has been logged online:

Bug reference:      1485
Logged by:          Hannes Erven
Email address:      h.e@gmx.at
PostgreSQL version: 7.4.7
Operating system:   2.6.10-gentoo-r6
Description:        upper case user names / creatuser
Details:

I tried creating a new user the way mentioned in the Docs, but (postgres
owning user removed from the output):


$ createuser
Enter name of user to add: Hannes
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER


$ psql template1
Welcome to psql 7.4.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=# alter user Hannes  password '***';
ERROR:  user "hannes" does not exist


template1=# select * from pg_catalog.pg_user
 usename  | usesysid | usecreatedb | usesuper | usecatupd |  passwd  |
valuntil | useconfig
----------+----------+-------------+----------+-----------+----------+------
----+-----------
 Hannes   |      100 | f           | f        | f         | ******** |
   |
(2 rows)



I then created another user, 'hannes', with createuser, and then I was able
to alter the passwords, altough I now had two users in pg_user: hannes and
Hannes.


template1=# drop user Hannes ;
DROP USER
template1=# select * from pg_user ;
 Hannes   |      100 | f           | f        | f         | ******** |
   |

template1=# drop user Hannes ;
ERROR:  user "hannes" does not exist



I had expected either createuser create a 'hannes' or the alter/drop user
commands to respect case in user names.


with best regards,
-hannes

Re: BUG #1485: upper case user names / creatuser

From
Richard Huxton
Date:
Hannes Erven wrote:
> The following bug has been logged online:
>
> Bug reference:      1485
> Logged by:          Hannes Erven
> Email address:      h.e@gmx.at
> PostgreSQL version: 7.4.7
> Operating system:   2.6.10-gentoo-r6
> Description:        upper case user names / creatuser
> Details:

> template1=# alter user Hannes  password '***';
> ERROR:  user "hannes" does not exist

> I then created another user, 'hannes', with createuser, and then I was able
> to alter the passwords, altough I now had two users in pg_user: hannes and
> Hannes.

The rules for SQL are: unquoted names get folded to lower case,
double-quoted names are left alone. The error message shows this - it
says "hannes" doesn't exist.

You could argue that the command-line tools should fold to lower-case
too, but that's not standard behaviour for command-line tools.

So - all you need to do is issue SQL like:
   ALTER USER "Hannes" ...

Personally, I keep all objects and users lower-case only, it makes my
life easier.
--
   Richard Huxton
   Archonet Ltd