通过cli查询postgresql与通过node.js服务器查询postgresql的结果不同

px9o7tmv  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(295)

我有一个简单的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"}]

这很奇怪,因为最后收到的通知应该是今天的日期。当我使用postgresql cli检查时,我使用与node.js代码中相同的查询得到以下结果:

balance | last_received 
--------+--------------
 400    | 2020-06-21
 200    | 2020-06-21
 200    | 2020-06-21
 400    | 2020-06-21

日期不一样,它也不会像我使用node.js查询时那样返回时间。我用于创建表的日期数据类型是postgresql中的标准日期数据类型。为什么会这样?我该如何解决?
我尝试过的:我尝试过多次重新查询和重新启动这两个程序,以确保它不是某种计时错误,但每次都是相同的结果和我所查询的结果 show timezone 在两端得到相同的结果。
另外,查询时 select now() 我在两个视图上都得到了正确且相同的日期,但是当我查询时 select CURRENT_DATE 它们按天不同,表明问题出在当前日期关键字的某个地方。

bxgwgixi

bxgwgixi1#

节点postgres转换 Date 类型到 Datetime 在本地时区,因此它将转换为您的服务器/节点时区。
因此,要么在获取日期之后调整日期,要么调整服务器/节点时区,要么重写类型解析器。

相关问题