更改PSQL默认用户

8
希望我解释一下为什么要这样做。我大部分的开发工作都在公司提供的笔记本电脑上完成,但是当我回到家时,我想使用我的台式机。我有许多Rails项目,其中用户名和密码已经定义为“postgres”,因此我不想更改这些项目中的.yml文件中的用户名和密码,只是为了让它在我的台式机上运行。太麻烦了。所以,我想要做的就是将我的postgres环境更改为默认查找用户名“postgres”。我也不想每次登录时都必须传递-U或-W。那么,如何更改psql / postgres的默认角色呢?从命令行输入:
$ psql

我回到了原处

psql: FATAL:  role "crash" does not exist

它正在寻找“crash”,因为这是我PC登录的用户帐户 - 然而,我希望我的默认用户名是“postgres”,而不是“crash”。如何更改PSQL在init上查找的角色?
事实证明,谷歌有许多关于为postgres创建新角色或更改密码或任何其他有用信息的资源; 然而,我已经搜索了几个小时,但找不到特定于更改postgres应使用哪个角色作为默认值的任何内容。
如果有人能指点我正确的方向,我会感激不尽。
系统- Ubuntu 12.04 LTS 64位
2个回答

9

在Ubuntu社区网站上,有关于在Ubuntu上使用PostgreSQL的入门信息

您还可以查看客户端身份验证的PostgreSQL手册

您需要设置PGUSER环境变量以覆盖默认用户。

~/.pg_service.conf中定义libpq服务也很有用,根据libpq服务定义文档,然后您就可以在psql中使用service=myservice引用该服务,避免重复详细信息。这是处理此问题的“正确”方法-定义服务,在database.yml中引用服务,并且在版本控制之外的.pg_service.conf文件中指定实际含义,方便起见,版本控制中有一个模板副本。

~/.psqlrc文件也可能很有用,请参见psql的文档。)

Shell别名也很方便。我经常做一些像添加的事情

alias psomedb 'psql "service=somedb"'

为方便访问常用的数据库和主机,将它们添加到我的~/.bashrc中。

~/.pgpass文件可用于存储不同主机/端口/数据库/用户名组合的密码。

话虽如此,通常以postgres用户身份工作是一个糟糕的想法。这不应该是您的默认设置。创建一个普通用户,可能具有CREATEDB权限,但不是超级用户。对于大多数任务,请使用该用户,仅在需要超级用户权限时切换到超级用户(postgres或其他为此目的而创建的用户)。这与“不要以root身份工作,仅在必要时使用sudo”的原理相同。


我不明白你如何使用.psqlrc来设置默认连接信息 - 请问你能否澄清一下? - hbn
1
@hbn 你说得对,我写那个的时候脑子一片空白。已经改正了。 - Craig Ringer

0
这是一个小的bash片段,用于使用在~/.pgpass中指定的第一个用户名:
alias psql=psql_wrapper

psql_wrapper() {
    local args=("$@") username="" override=1
    while [[ $# -gt 0 ]]; do
        if [[ $1 == "-h" ]]; then
            username=$(grep $2 ~/.pgpass | head -n 1 | cut -d : -f 4)
        elif [[ $1 == "-U" ]]; then
            override=""
        fi
        shift
    done
    if [[ $username && $override ]]; then
        echo "-U" "$username"
        args+=("-U" "$username")
    fi
    \psql "${args[@]}"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接