当我尝试使用 psql -h localhost -p 5432 -U myuser 进行连接时,PostgreSQL 将用户名 (myuser) 解释为默认数据库名称,因此我无法继续,除非我也指定数据库(请参见下面的示例) );但是,使用用户名“postgres”我能够访问,我想原因是我确实有一个名为“postgres”的数据库。
MacBook % psql -h localhost -p 5432 -U myuser
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: database "myuser" does not exist
MacBook % psql -h localhost -p 5432 -U private
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: database "private" does not exist
MacBook % psql -h localhost -p 5432 -U postgres
psql (14.11 (Homebrew))
Type "help" for help.
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
myuser | | {}
postgres | Superuser | {}
private | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+---------+----------+---------+-------+---------------------
mydatabase | private | UTF8 | C | C | =Tc/private +
| | | | | private=CTc/private+
| | | | | myuser=CTc/private
postgres | private | UTF8 | C | C |
template0 | private | UTF8 | C | C | =c/private +
| | | | | private=CTc/private
template1 | private | UTF8 | C | C | =c/private +
| | | | | private=CTc/private
(4 rows)
postgres=# \q
MacBook % psql -h localhost -p 5432 -U myuser -d mydatabase
psql (14.11 (Homebrew))
Type "help" for help.
mydatabase-> \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
myuser | | {}
postgres | Superuser | {}
private | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
版本:
x86_64-apple-darwin23.2.0 上的 PostgreSQL 14.11 (Homebrew),由 Apple clang 版本 15.0.0 (clang-1500.1.0.2.5) 编译,64 位
我也尝试通过“私人”用户名进行访问,但正如您从终端中看到的那样,它与“myuser”的工作方式不同,没有数据库名称“private”和“myuser”......这就是我的方式结论是问题出在其他地方。我也尝试过更改 search_path
“postgres=# ALTER ROLE myuser SET search_path TO mydatabase, pg_catalog;”
但这并没有帮助。
我希望能够访问:% psql -h localhost -p 5432 -U myuser 但是,现在我只能通过以下方式访问: % psql -h localhost -p 5432 -U myuser -d mydatabase
附注我在其相应的 fdolders (share/postgresql@14/) 中丢失了 pg_hba.conf 和 postgresql.conf 文件,也许这是正常的,因为只有它们的示例文件可用,无论如何我尝试重新创建它们,但它无助于解决我的问题。
首先,从postgresql连接时必须记下数据库名称。由于数据库名称是强制性的,而不是可选的,因此即使您提供 -U 选项,它也会将其识别为数据库。
因此,您可以访问“psql -d