节点服务器无法连接到 postgres db

Posted

技术标签:

【中文标题】节点服务器无法连接到 postgres db【英文标题】:node server can't connect to postgres db 【发布时间】:2014-03-11 12:34:24 【问题描述】:

我最近从 mysql 切换到 postgres 作为我的 node.js 项目的数据库。虽然我可以从本地 pgAdmin III (OSX) 客户端访问我的远程 postgres 数据库,但到目前为止我还无法通过 node.js 连接到我的数据库。我确定我为 pgAdmin 和我的 node.js 输入的凭据完全相同。我尝试过的另一件事是在我的数据库服务器的 pg_hba.conf 中将我的本地 ipadress 设置为 trust 而不是 md5。是不是我做错了什么?我最喜欢的搜索引擎提出了一些关于重置我的本地操作系统的令人担忧的问题。我只是使用了 node-postgres 的 github repo doc 中的示例:

var pg = require('pg');

var conString = "postgres://myusername:mypassword@hostname:5432/dbname";

var client = new pg.Client(conString);
client.connect(function(err) 
  if(err) 
    return console.error('could not connect to postgres', err);
  
  client.query('SELECT NOW() AS "theTime"', function(err, result) 
    if(err) 
      return console.error('error running query', err);
    
    console.log(result.rows[0].theTime);
    client.end();
  );
);

这些是我每次尝试启动服务器时遇到的错误:

could not connect to postgres  [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' 

非常感谢您的帮助

【问题讨论】:

嗯,host hostname 从该服务器上的命令行获取什么?那是它的 IP 之一,它会听吗?该错误似乎主机不知道它应该是您认为应该调用它的“主机名”......附带说明:我只看到postgres://的示例,而不是pg://,我不知道如果这很重要...... 感谢您的回复 Wrikken。 db 服务器的输出是:Host hostname not found: 3(NXDOMAIN)。数据库服务器是一个 VPS。我想那应该没关系。 好吧,我的意思是:您输入的主机名是...不是服务器主机名?它告诉您它无法将名称转换为 IP,因此失败。所以,也许输入正确的(或者去localhost,如果你知道它是运行代码的同一台服务器,如下面的答案中提到的)。如果这也失败了:尝试提供正确的 IP 地址。 我也在数据库服务器上对其进行了测试。它似乎是密码。感谢您的荷兰帮助,您的见解帮助我实现了目标 “荷兰语帮助”?那是我第一次听到这个词。作为一个荷兰人,我不知道该怎么想;) 【参考方案1】:

node-postgres 似乎不接受您密码中的井号标签。删除主题标签后,我可以毫无问题地连接。没想到这一点,因为 pgAdmin 接受了它,我并没有把它当作问题。

最好的解决方案是使用encodeURIComponent 对您的密码字符串进行编码。这将允许在 URL 中使用主题标签。

【讨论】:

噢!当然,为您的网址编码您的密码;)很高兴知道它已被解决。 非常感谢。只是做 encodeURIComponent('passwordwith#') 解决了这个问题。 谢谢 - 无法想象通过调试找到这个,可能会放弃! 正是我的情况。我使用 encodeURIComponent 并且问题已解决。谢谢大家的帮助 密码中的“#”字符导致无法连接..更改密码和连接db的节点【参考方案2】:

我使用的node.js中的接口可以在这里找到https://github.com/brianc/node-postgres

var pg = 需要('pg'); var conString = "postgres://YourUserName:YourPassword@localhost:5432/YourDatabase";

尝试将 pg:// 更改为 postgres://

这是从另一篇 *** 文章中摘录的: How to make connection to Postgres via Node.js

【讨论】:

我也试过了,在 postgres:// 不起作用后,我将 postgres:// 更改为 pg://。忘记说了

以上是关于节点服务器无法连接到 postgres db的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Spring Boot 将 Docker Desktop Kubernetes (Windows) 服务连接到本地 Postgres db

为啥我的一些 kubernetes 节点无法连接到我的 postgres 集群而其他节点成功?

无法从另一个容器连接到 Postgres 容器

Postgres 无法连接到服务器

无法通过 python 通过 SSH 连接到 postgres 服务器

如何在Docker环境中启动时,如何从节点服务器连接到postgres