Как установить intervalstyle = iso_8601 и затем выполнить запрос на выборку в golang - PullRequest
0 голосов
/ 17 мая 2018

У меня есть таблица со столбцом interval, что-то вроде этого.

CREATE TABLE validity (
  window INTERVAL NOT NULL
);

Предположим, что сохранено значение «P3DT1H» в формате iso_8601. Когда я пытаюсь прочитать значение, оно приходит в обычном формате postgres.

3 days 01:00:00

Однако я хочу значение в формате iso_8601. Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018
so=# CREATE TABLE validity (
  w INTERVAL NOT NULL
);
CREATE TABLE
so=# insert into validity values ('3 days 01:00:00');
INSERT 0 1

вы, вероятно, ищете intervalstyle

so=# set intervalstyle to iso_8601;
SET
so=# select w From validity;
   w
--------
 P3DT1H
(1 row)

, конечно, можно установить для транзакции / сеанса / роли / базы данных / кластера

0 голосов
/ 17 мая 2018

Вы можете использовать запрос SET intervalstyle и установить стиль на iso_8601.Затем, когда вы выводите результаты, они будут в формате ISO 8601.

_, err := s.db.Exec("SET intervalstyle='iso_8601'")
res, err := s.db.Query("select interval '1d1m'")
// res contains a row with P1DT1M

Если вы ищете способ изменить intervalstyle для всех сеансов на уровне сервера, вы можете обновить его вваш файл конфигурации:

-- connect to your psql using whatever client, e.g. cli and run
SHOW config_file;
-- in my case: /usr/local/var/postgres/postgresql.conf

Отредактируйте этот файл и добавьте следующую строку:

intervalstyle = 'iso_8601'

В моем случае в файле уже была закомментированная строка с intervalstyle и его значениембыло postgres.Вы должны изменить его и перезапустить службу.

Таким образом, вам не придется менять стиль с golang при каждом запуске запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...