gpt4 book ai didi

postgresql - psql -d {databasename} 不指定用户或主机名

转载 作者:行者123 更新时间:2023-11-29 12:00:02 24 4
gpt4 key购买 nike

我有两个带有 Postgresql 的 Linux 系统:

  1. Ubuntu 12.04 和 Postgresql 9.1
  2. Ubuntu 14.04 和 Postgresql 9.3

在两者上,我都创建了相同的用户和数据库(具有相同的所有者)。它们也有相同的 .pgpass 文件和或多或少相同的 pg_hba.conf 文件。两个 pg_hba.conf 文件都包含:

local   all             postgres                                peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5

我还应该补充一点,两台机器上都没有指定 PGHOST。

但是,在 (1) 上我可以直接运行以下命令:

psql -d myDB

关于 (2) 我需要指定用户名和主机名:

psql -d myDB -U myDBuser -h localhost

或者出现以下错误:

psql: FATAL:  role "ubuntu" does not exist

为什么会这样,我怎样才能使 (2) 像 (1) 一样(以节省一些输入)?

最佳答案

为什么会这样?

psql(和其他 libpq 应用程序)默认连接:

  • 如果可用,通过 unix 套接字
  • 作为当前操作系统用户
  • 到与默认用户名同名的数据库

只需将客户端设置为默认使用 tcp/ip

您可以 create a .pgservice file允许您指定一组连接选项,例如

[mydb]
host=localhost
user=myDBUser
dbname=mydb

然后就跑

psql service=mydb

你也可以做一个shell别名,比如

alias mypsql='psql service=myservice'

或者没有服务文件:

alias mypsql='psql "dbname=myDB user=myDBuser host=localhost"

它允许您只运行 mypsql

或者为unix sockets配置用户名映射/密码认证

原始错误的根本原因可能是您为 local 连接配置了 peer 身份验证(或者这是默认设置)。因此,如果您连接的用户名与本地 unix 用户不同,您将收到一条错误消息:

FATAL:  Peer authentication failed for user "myunixusername"

这是由事物的声音,用户ubuntu

如果您希望允许通过 unix 套接字进行连接,那么您不必指定 -h localhost,您应该为 local< 使用 md5 密码验证 pg_hba.conf 中的连接,或 add a pg_ident.conf entry mapping the OS user ubuntu to the postgres user myDBuser so it's allowed to log in .

所以要么前置:

local   myDB             myDBuser                                md5

pg_hba.conf 中的其他条目之前(使用密码 auth)前置:

local   all             postgres                                peer map=peermap

并在 pg_ident.conf 添加:

peermap    ubuntu     myDBuser

改为使用 peer 身份验证(因此没有密码,只是安全的用户名匹配)但允许操作系统用户 ubuntu 以数据库用户 myDBuser 连接.

本地 使用 unix 域套接字的连接速度稍快,但与 TCP/IP 相比并没有真正的优势。

默认数据库

为用户名设置默认数据库没有捷径可走。因此,您仍然需要为此使用 pgservice 文件或 shell 别名。

关于postgresql - psql -d {databasename} 不指定用户或主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com