Почему current_time отличается от current_timestamp и now () в PostgreSQL 12 при использовании JDB C? - PullRequest
0 голосов
/ 27 апреля 2020

Когда я запускаю следующий запрос в PgAdmin4 или psql, я получаю те же значения для current_time, now() и current_timestamp:

SELECT now(), CURRENT_TIME, CURRENT_TIMESTAMP;
              now              |    current_time    |       current_timestamp
-------------------------------+--------------------+-------------------------------
 2020-04-27 11:54:55.443006+01 | 11:54:55.443006+01 | 2020-04-27 11:54:55.443006+01

Но когда я запускаю то же самое запрос изнутри DBeaver путем подключения к той же базе данных PostgreSQL, с использованием драйвера JDB C, существует разница между current_time и now()current_timestamp):

now                |current_time|current_timestamp  |
-------------------|------------|-------------------|
2020-04-27 12:57:00|    11:57:00|2020-04-27 12:57:00|

Очевидно, что драйвер JDB C каким-то образом создает несоответствие между current_time и current_timestamp.

Мои вопросы:

  • Это ожидаемое поведение от Драйвер JDB C? (Почему?)
  • Есть ли способ управлять этим поведением через некоторую конфигурацию самого драйвера JDB C без изменения приложений и запросов, опирающихся на драйвер JDB C?

1 Ответ

1 голос
/ 27 апреля 2020

current_time - это time WITH time zone то, что не поддерживается JDB C.

Приложения должны предпринять специальные шаги для правильного получения этого значения. Так что да, это несколько ожидаемо. Я предполагаю, что DBEaver использует getTime(), который возвращает время как UT C

Это одна из причин, по которой использование current_time не рекомендуется

...