【发布时间】:2021-05-10 09:57:45
【问题描述】:
我正在尝试对本地数据库执行一个简单的查询。我希望这个查询能够返回数据库的模式名称。
我正在运行 Postgres 13.1 版,并按照此处显示的步骤安装它:https://postgresapp.com/
根据 Postgres Wiki 上的指南,我将配置文件更改包括在内,我只手动编辑设置以启用日志记录。
这台电脑运行的是 MacOS Big Sur 版本 11.0.1。 我使用的是 Node.js,而 Postgres 在端口 5432 上运行,我可以使用 psql 访问它。
我所做的相关更改如下:
server.js 中的端点:
router.post('/mock_call', async (ctx) => {
try {
console.log('sup')
await sql.mockCall()
ctx.body = {
status: "It's good",
data: 'good'
}
} catch (e) {
console.log(e)
ctx.body = {
status: "Failed",
data: e
}
ctx.res.statusCode = 422;
}
})
SQL 文件:
require("openssl")
const { Pool, Client } = require('pg');
const client = new Client({
user: 'user1',
host: 'localhost',
database: 'postgres',
password: 'mypass',
port: 5432,
});
module.exports = {
mockCall: function () {
console.log('mockCall begin')
client.connect(err => {
if (err) {
console.error('connection error', err.stack)
} else {
console.log('connected')
}
})
console.log('before query')
client.query("SELECT schema_name FROM information_schema.schemata", (err, res) => {
if (err) {
console.log('theres an error:')
console.log(err)
};
console.log('theres a response:')
console.log(res)
for (let row of res.rows) {
console.log(JSON.stringify(row));
}
client.end();
});
}
}
当我点击 localhost 上的端点时实际打印出来的日志:
支持
模拟呼叫开始
查询前
Postgresql 日志(没有帮助,就好像服务器永远不会被击中一样):
这个确切的项目和代码正在我的个人本地计算机上运行,并且查询按预期进行。它曾经在我设置的 Heroku 服务器上工作。与 Heroku 服务器的唯一区别是连接是这样建立的:
const client = new Client({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
此连接已在我拥有一年多的服务器上运行。我的数据库空间不足,所以我从一个爱好数据库升级到 Heroku 上的标准计划,该应用程序继续工作。在这次升级几周后,我推送了一个新的提交,其中包括应用程序上的几个新功能,这破坏了 postgresql 连接。在此推送之后,我立即检查了我的最后一个正在工作的提交并推送了那个,但是问题仍然存在。
我目前在我的个人本地计算机上运行该程序,但我需要尽快将其移回 Heroku。我上面包含的图片和日志是在我朋友的计算机上本地运行我的应用程序的结果,这似乎与我在 Heroku 上遇到的问题相同,所以我希望我能在他的本地解决问题我将能够解决 Heroku 中发生的问题。
这些是从我的个人本地计算机打印出来的日志:
编辑:
在命令行运行psql -d postgres -U user1 -h localhost -p 5432 成功将我连接到数据库。
我添加的新功能是为我的应用客户提供的新端点。此提交在我的个人本地计算机上运行良好,因此我认为这不是我添加的新功能的问题。此外,从那以后,我恢复了以前的提交,该提交曾经可以正常工作,因此不再存在任何新代码。
我正在我朋友的计算机上本地运行整个应用程序。就像一年前在我的电脑上一样,我从头开始设置 Postgres。但是现在,只有我的个人本地计算机在工作。
我没有在任何设置上更改 pg_hba.conf 上的任何内容。这就是他们俩的样子:
起初我认为问题出在 Heroku,因为我的本地应用程序运行良好。然而,在伸出援手并在支持下交谈了几天后,他们说:
你好,
看起来您的应用程序能够成功连接到数据库,但应用程序或框架中的其他东西阻止了数据被检索。不幸的是,由于这是一个应用程序问题,它不属于 Heroku 支持政策的性质。我建议搜索我们的知识库或在 Stack Overflow 上向社区询问更多答案。
【问题讨论】:
-
您可以使用
psql连接吗?服务器实际上是否在端口 5432 上运行并侦听?每个环境中的操作系统是什么? Postgres 是如何安装的? -
@AdrianKlaver 有问题更新
-
对服务器的推送是什么?
process.env.DATABASE_URL解决了什么问题?在postgresql.conf中,listen_addresses设置为什么? -
我有一段时间的工作提交,我的数据库空间不足,所以我从爱好数据库升级到标准计划,应用程序继续工作。在这次升级几周后,我推送了一个新的提交,其中包括应用程序上的几个新功能,这破坏了 postgresql 连接。在此推送之后,我立即检查了我的最后一个正在工作的提交并推送了那个,但是问题仍然存在。
-
我从未在两台本地计算机上编辑过listen_addresses(我的工作正常,我的朋友不工作)它被这样注释掉:#listen_addresses = 'localhost'
标签: node.js postgresql heroku