通过 CLI 与通过 Node.js 服务器查询 PostgreSQL 时的不同结果
Different result when querying PostgreSQL through CLI vs through Node.js server
我有一个简单的 node.js 服务器,它接受请求并查询数据库。当我尝试使用以下函数查询所有余额时
const Pool = require('pg').Pool;
const pool = new Pool({
user: 'myUsername',
host: 'localhost',
database: 'myDatabase',
password: 'myPassword',
port: 5432,
});
const getBalances = (request, response) => {
pool.query('SELECT * FROM balances', (error, results) => {
if (error) {
throw error
}
response.status(200).json(results.rows)
})
};
我得到以下结果(忽略余额,相关部分日期)
[{"balance":400,"last_received":"2020-06-20T22:00:00.000Z"},
{"balance":200,"last_received":"2020-06-20T22:00:00.000Z"},
{"balance":200,"last_received":"2020-06-20T22:00:00.000Z"},
{"balance":400,"last_received":"2020-06-20T22:00:00.000Z"}]
这很奇怪,因为 last_received 应该指向今天的日期。当我使用 PostgreSQL CLI 检查时,我使用与 node.js 代码中相同的查询得到以下结果:
balance | last_received
--------+--------------
400 | 2020-06-21
200 | 2020-06-21
200 | 2020-06-21
400 | 2020-06-21
日期不一样,也不是 return 我使用 node.js 查询时的时间。我用于创建 table 的日期数据类型是来自 PostgreSQL 的标准 DATE 数据类型。为什么会这样,我该如何解决?
我尝试过的:
我试过多次重新查询和重新启动,以确保它不是某种计时错误,但每次都是相同的结果,我查询 show timezone
并在两端得到相同的结果。
此外,在查询 select now()
时,我在两个视图上得到了正确且相同的日期,但是当我查询 select CURRENT_DATE
时,它们一天都不同,表明问题出在 CURRENT_DATE关键字。
node-postgres converts Date
types to Datetime
in the local timezone,因此它正在转换为您的 server/node 时区。
因此,要么在获取日期后调整日期,调整您的 server/node 时区,要么 override the type parser。
我有一个简单的 node.js 服务器,它接受请求并查询数据库。当我尝试使用以下函数查询所有余额时
const Pool = require('pg').Pool;
const pool = new Pool({
user: 'myUsername',
host: 'localhost',
database: 'myDatabase',
password: 'myPassword',
port: 5432,
});
const getBalances = (request, response) => {
pool.query('SELECT * FROM balances', (error, results) => {
if (error) {
throw error
}
response.status(200).json(results.rows)
})
};
我得到以下结果(忽略余额,相关部分日期)
[{"balance":400,"last_received":"2020-06-20T22:00:00.000Z"},
{"balance":200,"last_received":"2020-06-20T22:00:00.000Z"},
{"balance":200,"last_received":"2020-06-20T22:00:00.000Z"},
{"balance":400,"last_received":"2020-06-20T22:00:00.000Z"}]
这很奇怪,因为 last_received 应该指向今天的日期。当我使用 PostgreSQL CLI 检查时,我使用与 node.js 代码中相同的查询得到以下结果:
balance | last_received
--------+--------------
400 | 2020-06-21
200 | 2020-06-21
200 | 2020-06-21
400 | 2020-06-21
日期不一样,也不是 return 我使用 node.js 查询时的时间。我用于创建 table 的日期数据类型是来自 PostgreSQL 的标准 DATE 数据类型。为什么会这样,我该如何解决?
我尝试过的:
我试过多次重新查询和重新启动,以确保它不是某种计时错误,但每次都是相同的结果,我查询 show timezone
并在两端得到相同的结果。
此外,在查询 select now()
时,我在两个视图上得到了正确且相同的日期,但是当我查询 select CURRENT_DATE
时,它们一天都不同,表明问题出在 CURRENT_DATE关键字。
node-postgres converts Date
types to Datetime
in the local timezone,因此它正在转换为您的 server/node 时区。
因此,要么在获取日期后调整日期,调整您的 server/node 时区,要么 override the type parser。