Другой результат при запросе PostgreSQL через интерфейс командной строки и через Node.js сервер - PullRequest
1 голос
/ 21 июня 2020

У меня есть простой 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

Дата не совпадает, и она не возвращает время, когда я запрашиваю, используя node.js. Тип данных даты, который я использовал для создания таблицы, - это стандартный тип данных DATE из PostgreSQL. Почему это происходит и как мне это разрешить?

Что я пробовал: я пробовал повторно запрашивать и перезапускать оба раза несколько раз, чтобы убедиться, что это не какая-то ошибка времени, а каждый раз одно и то же result, и я запросил show timezone и получил одинаковый результат на обоих концах.

Кроме того, при запросе select now() я получаю правильную и одинаковую дату в обоих представлениях, но когда я запрашиваю select CURRENT_DATE, они различаются на день, что указывает на то, что проблема связана с ключевым словом CURRENT_DATE.

1 Ответ

2 голосов
/ 21 июня 2020

node- postgres преобразует типы Date в Datetime в локальном часовом поясе , поэтому он преобразуется в часовой пояс вашего сервера / узла.

Итак, либо измените даты после их получения настройте часовой пояс сервера / узла или переопределите парсер типов .

...