Я получаю следующее сообщение об ошибке
ОШИБКА: значение поля даты/времени вне диапазона: "13/01/2010" СОВЕТ. Возможно, вам нужна другая настройка "datestyle".
Я хочу получить свою дату в формате DD/MM/YYYY
Я получаю следующее сообщение об ошибке
ОШИБКА: значение поля даты/времени вне диапазона: "13/01/2010" СОВЕТ. Возможно, вам нужна другая настройка "datestyle".
Я хочу получить свою дату в формате DD/MM/YYYY
SHOW datestyle;
DateStyle
-----------
ISO, MDY
(1 row)
INSERT INTO container VALUES ('13/01/2010');
ERROR: date/time field value out of range: "13/01/2010"
HINT: Perhaps you need a different "datestyle" setting.
SET datestyle = "ISO, DMY";
SET
INSERT INTO container VALUES ('13/01/2010');
INSERT 0 1
SET datestyle = default;
SET
http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE
DateStyle - устанавливает формат отображения для значений даты и времени, а также правила для толкования двусмысленных даты. По историческим причинам эта переменная содержит два независимых компонента: спецификация выходного формата (ISO, Postgres, SQL или немецкий язык) и спецификация ввода/вывода для год/месяц/день (DMY, MDY или ГМД).
Конечно, лучше всего использовать однозначный формат ввода (ISO 8601), но нет никаких проблем с его настройкой по мере необходимости.
Вы можете установить стиль даты для европейского (дд/мм/гггг):
SET DateStyle TO European;
Я бы советовал против этого. Обычно я пытаюсь преобразовать между форматами и сохранять даты в формате ISO в источнике данных. В конце концов, это всего лишь вопрос представления, а не разные данные.
Edit:
При использовании этого COPY допустимый формат ввода определяется конфигурацией сервера и может быть изменен для текущего сеанса с помощью команды SET, как описано Berry, или путем настройки конфигурации сервера.
Описание DateStyle в руководстве:
http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE
Следующие действия недействительны для реальной ситуации, но я все равно сохраняю ее для справки
При использовании литералов даты (или временной метки) всегда указывается маска формата для их преобразования. В противном случае ваши заявления не переносятся и не будут запускаться при каждой установке.
Стандарт ANSI SQL для литералов даты выглядит следующим образом:
UPDATE some_table
SET date_column = DATE '2011-05-25'
WHERE pk_column = 42;
Если вы не можете изменить буквенный формат, вам необходимо применить функцию to_date()
UPDATE some_table
SET date_column = to_date('13/01/2010', 'dd/mm/yyyy')
WHERE pk_column = 42;
Если это не то, что вы делаете, вы должны показать нам полную инструкцию SQL, которая сгенерировала ошибку.