我在迁移到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
}
};
我不确定我做错了什么。
答案 0 :(得分:9)
您最有可能在节点6.x.x
上运行,因此您需要升级pg包版本npm install --save pg@4.5.5
答案 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 }