无法通过用户名字段访问psql?

问题描述 投票:0回答:1

当我尝试使用 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 位

print screen terminal

我也尝试通过“私人”用户名进行访问,但正如您从终端中看到的那样,它与“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
1个回答
0
投票

首先,从postgresql连接时必须记下数据库名称。由于数据库名称是强制性的,而不是可选的,因此即使您提供 -U 选项,它也会将其识别为数据库。 因此,您可以访问“psql -d -U ”,当您希望在与当前服务器不同的服务器上访问 postgresql 时,记下 -h 选项,如果不是默认值,则放弃 -p 选项港口。如果不填写-U参数,请尝试使用与服务器主机名相同的用户进行连接。

© www.soinside.com 2019 - 2024. All rights reserved.