First of all, I am new to PostgreSQL.
So am I right thinking that one cannot run most of the psql util commands nor non-db-specified sql commands if there isn't a db with same name of the current user's?
That is saying e.g., if I run psql "show databases;" as user postgres while there isn't a db called "postgres", I won't be able to run the command.
Question is that in this case, one cannot find the list of the dbs before knowing any of db exits, is that how it works?

psql -l dbnameinstead ofpsql -lfor example.postgresandtemplate1basically always exist. If you were really stuck and had somehow lost track of all known DBs you could still recover by stopping Pg and putting it in single user mode. The reason you can't list DBs without knowing one is that authentication is against a specific database, there's no way to say "this user can access the whole system but not necessarily any particular database".