通过 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