I’m a newbie to PostgreSQL.
I’m trying to create a new role named pgdba like below…
localhost.localdomain:[/home/postgres]createuser -d -i -l -P -r -s pgdba
new role's password : pgdba
retype password : pgdba
password : postgres
localhost.localdomain:[/home/postgres]psql
Password: postgres
psql (9.0.1)
Type "help" for help.
postgres=# select * from pg_shadow;
usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig
----------+----------+-------------+----------+-----------+-------------------------------------+----------+-----------
postgres | 10 | t | t | t | md53175bce1d3201d16594cebf9d7eb3f9d | |
pgdba | 16385 | t | t | t | md53cd688326933adcdedd77097c95d131d | |
(2 rows)
postgres=# \q
localhost.localdomain:[/home/postgres]psql -U pgdba
Password for user pgdba: pgdba
FATAL: database "pgdba" does not exist
psql: FATAL: database "pgdba" does not exist
What am I doing wrong?
See how the message is that database pgdba does not exist?
By default, PostgreSQL will connect to a database named after the current user (see the psql docs. Since you aren’t specifying a database to connect to, it’s trying to connect to a DB named
pgdba– which doesn’t exist.Try:
to connect to the
postgresdatabase using rolepgdba.You may also need to examine
pg_hba.conf(see docs if you wish to tweak the authentication rules.BTW, you are running an outdated PostgreSQL version with known bugs. Please update to 9.0.8, the latest patch release in the 9.0 series. You do not need to dump and reload your database or use
pg_upgradefor this, it’s a simple drop-in replacement. See the release notes for all the fixes you’re missing.Also, rather than
SELECTing frompg_shadow, consider using psql’s user information functions\duand\dg, which produce much better formatted and integrated information.