Knex:错误池2 - 错误:用户密码验证失败

时间:2016-06-29 23:14:56

标签: postgresql ubuntu knex.js

我在迁移到Ubuntu Linux时遇到问题。我可以在终端中使用Postgres。所以我对Postgres密码没有任何问题。

当我输入:knex migrate:latest --env development
我明白了:
Using environment: development Knex:warning - Pool2 - Error: Pool was destroyed Knex:Error Pool2 - error: password authentication failed for user "user"
我已经从相关问题的其他答案中读到了pg_hba.conf并将方法设置为信任。我做到了这一点,但没有改变。 我的knex.js文件如下所示:
module.exports = { devolopment: {client: 'pg', connection: 'postres://localhost/bikesdb' }, production: { client: 'pg', connection: process.env.DATABASE_URL } };
我不确定我做错了什么。

5 个答案:

答案 0 :(得分:9)

您最有可能在节点6.x.x上运行,因此您需要升级pg包版本npm install --save pg@4.5.5

参考:https://github.com/tgriesser/knex/issues/1371

答案 1 :(得分:3)

如果Andrei Stalbe的解决方案没有帮助......这里有更多的想法。

如何从命令行连接到postgres?

如果您只是编写psql bikesdb,它实际上使用unix套接字进行连接,默认情况下它在postgres中具有与通过TCP不同的安全设置。您可以尝试将连接字符串更改为:postgres:///bikesdb,这使得knex也可以使用unix套接字。

您可以在pg_hba.conf中更改/检查安全政策。

此外,您在postres://localhost/bikesdb中也有拼写错误。

编辑:

我很确定你还有一些一般的postgresql配置问题。如果您想创建用户来访问您的数据库,您可以这样做:

CREATE ROLE bikesuser WITH LOGIN PASSWORD 'letmepass';
GRANT ALL PRIVILEGES ON DATABASE "bikesdb" TO bikesuser;

将连接字符串更改为:

'postgres://bikesuser:letmepass@localhost/bikesdb'

如果您想允许从localhost访问postgresdb,请在pg_hba.conf中执行此操作

host all all 127.0.0.1/32 trust

希望这一点有用,即使听起来你已经尝试过这一切。

答案 2 :(得分:1)

我遇到了同样的问题,而且knex正在尝试使用从命令行界面的环境变量(LOGNAME)中获取的用户名。 如果Postgres设置为使用其他用户(默认情况下,如果您还没有更改它,则会出现身份验证错误)。 您可以通过在用于连接到Postgres服务器的URL中指定身份验证凭据来解决此问题。

module.exports = { 
 devolopment: {client: 'pg',
 connection: 'postres://user:password@localhost/bikesdb'
 },
 production: {
 client: 'pg',
 connection: process.env.DATABASE_URL
 }

};

我突出显示了网址中的关键点: postres:// 用户:密码 @本地/ bikesdb

您可以从Postgresql提供的UI界面检查用户名以访问Postgresql服务器,密码是您在安装阶段定义的密码(如果您还没有更改)

答案 3 :(得分:0)

我已经将我的psql设置为我的用户而不是postgres。但是,我重置了postgres密码。我只是重置了postgres密码,而在开发连接中我包含了密码。 (我尝试在postgres密码重置之前包含它,它仍然无法正常工作)。这很奇怪,因为我在连接中指定的用户是我而不是postgres。

答案 4 :(得分:0)

我最近遇到了这个问题。我的问题是我可以在本地macOS上运行迁移,但不能在远程Linux Ubuntu计算机上运行迁移。我发现原因是我没有为用户设置密码,尽管由于某种原因它在本地(Linux)上需要密码,但一切都在本地正常运行。因此,为用户设置密码并将密码添加到连接即可解决我的问题。

示例:

在postgres上

\password username

然后输入并确认密码。

在您的配置文件中(例如knexfile.js)

module.export  = { client: ‘postgresql`, user: username, password: secret }