当我创建一个新用户,但它不能登录数据库。 我是这样做的:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

然后创建一个数据库:

postgres@Aspire:/home/XXX$ createdb -O dev test_development

之后,我尝试psql -U dev -W test_development登录,但得到错误:

psql: FATAL:  Peer authentication failed for user "dev"

我试图解决这个问题,但失败了。


当前回答

为了方便以后看到这个,postgres在我的Ubuntu服务器的/usr/lib/postgresql/10/bin目录下。

我将它添加到.bashrc文件的PATH中,并在末尾添加这一行

PATH=$PATH:/usr/lib/postgresql/10/bin

然后在命令行上

$> source ./.bashrc

我刷新了bash环境。现在我可以在任何目录中使用postgres -D /

其他回答

当你指定:

psql -U user

它通过UNIX Socket连接,默认情况下使用对等身份验证,除非在pg_hba.conf中另有指定。

您可以指定:

host    database             user             127.0.0.1/32       md5
host    database             user             ::1/128            md5

在loopback接口上为指定的数据库和用户获取TCP/IP连接(包括IPv4和IPv6)。

更改后,您必须重新启动postgres或重新加载它的配置。 在现代基于RHEL/Debian的发行版中重新启动:

service postgresql restart

重新加载应该以以下方式工作:

pg_ctl reload

但是该命令可能会根据PATH配置而不同——你可能必须指定绝对路径,这可能会不同,这取决于postgres的安装方式。

然后你可以使用:

psql -h localhost -U user -d database

使用该用户通过TCP/IP登录到指定的数据库。 Md5代表加密密码,也可以在授权时为明文密码指定密码。只要数据库服务器只能在本地访问,没有网络访问,这两个选项就不应该有什么大问题。

重要提示: pg_hba.conf中的定义顺序很重要-规则是从上到下读取的,就像iptables一样,所以你可能想在规则上面添加建议的规则:

host    all             all             127.0.0.1/32            ident

最简单的解决方法:

CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;

pg_dump -h localhost -U postgres -F c -b -v -F mydb。备份mydb

当我遇到这种情况时,这对我来说很管用:

sudo -u username psql

在我的例子中,我使用了不同的端口。默认为5432。我用的是5433。这招对我很管用:

$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433