ОШИБКА: значение поля даты/времени вне допустимого диапазона в Postgresql

У меня есть файл CSV с кодировкой ASCII, сгенерированный из хранимой процедуры Oracle.

Мне нужно импортировать файл CSV в таблицу БД Postgres, используя хранимую процедуру, где в postgres по умолчанию set date to MDY

Вчера вечером я пытался set datestyle to SQL,DMY; в терминале postgres.

Сегодня утром, когда я вижу формат стиля данных, его формат MDY. До тех пор, пока он не настроен в файле postgres.conf, но мне он там не нужен, потому что он применим ко всем базам данных.

Поэтому мне нужно установить стиль даты во время импорта файла CSV в хранимую процедуру.

Вот скрипт в Postgres

begin
    set schema 'public';
    raise notice 'CSV PATH: %,TABLE NAME: %',csv_path,target_table;
   execute format('truncate %I ',target_table);
    execute format('copy %I from %L WITH (FORMAT csv)',target_table, csv_path);
    return;
end;

person Ajay Takur    schedule 25.05.2017    source источник
comment
Я откатился на предыдущую версию, так как вы ее не редактировали - задали новый вопрос. пожалуйста, попросите нового сделать это   -  person Vao Tsun    schedule 25.05.2017
comment
Вот ссылка для постоянной установки стиля даты dba.stackexchange.com/questions/19679/   -  person Ajay Takur    schedule 25.05.2017
comment
Итак, мне нужно установить стиль даты во время импорта файла CSV в хранимую процедуру?..   -  person Vao Tsun    schedule 25.05.2017
comment
Я думал, что в другом подходе, который не является точным, лучше использовать команду базы данных   -  person Ajay Takur    schedule 25.05.2017


Ответы (1)


чтобы установить конфигурацию для транзакции, используйте local. https://www.postgresql.org/docs/current/static/sql-set.html

SESSION используется по умолчанию, если ни SESSION, ни LOCAL не отображаются.

(жирный мой)

так например:

t=# begin;
BEGIN
t=# set local DateStyle to ISO,DMY;
SET
t=# show DateStyle;
 DateStyle
-----------
 ISO, DMY
(1 row)
t=# end;
COMMIT
t=# show DateStyle;
 DateStyle
-----------
 ISO, MDY
(1 row)

также обратите внимание, как вы устанавливаете DateStyle - это пара значений.

https://www.postgresql.org/docs/current/static/runtime-config-client.html

ДатаСтиль (строка)

Задает формат отображения значений даты и времени, а также правила интерпретации неоднозначных входных значений даты. По историческим причинам эта переменная содержит два независимых компонента: спецификацию формата вывода (ISO, Postgres, SQL или German) и спецификацию ввода/вывода для порядка года/месяца/дня (DMY, MDY или YMD). Они могут быть установлены по отдельности или вместе. Ключевые слова евро и европейский являются синонимами DMY; ключевые слова US, NonEuro и NonEuropean являются синонимами MDY. Дополнительную информацию см. в Разделе 8.5. Встроенное значение по умолчанию — ISO, MDY, но initdb инициализирует файл конфигурации с настройкой, соответствующей поведению выбранной локали lc_time.

person Vao Tsun    schedule 25.05.2017