COPY
довольно неумолим с недопустимым вводом. (Таким образом, это может быть быстро и надежно.)
может быть достаточно установить соответствующий datestyle
:
SET datestyle = 'ISO,DMY'; -- DMY being the relevant part
... и повторите попытку. (Устанавливает настройку только для вашего сеанса.) Связанные:
Информация в вашем вопросе не совсем ясна, вам, возможно, придется сделать больше:
скопировать во временную "промежуточную" таблицу со столбцом text
, а оттуда INSERT
в реальную целевую таблицу, используя to_date()
- с пользовательским шаблоном, указывающим ваш нестандартный формат даты:
CREATE TABLE public.ride_details(ride_id int,created_at date); -- target table
CREATE TABLE pg_temp.step1(ride_id int, created_at text); -- temporary staging table
COPY TO pg_temp.step1 ...;
INSERT INTO public.ride_details(ride_id, created_at)
SELECT ride_id, to_date(created_at, 'DD/MM/YY') -- or whatever
FROM pg_temp.step1;
to_date()
игнорирует висячие символы после заданного шаблона , поэтому нам не нужно иметь дело с вашей странной спецификацией hmm
(hh
?).
Я выбрал формат YY
, отображаемый в сообщении об ошибке, а не yyyy
, о котором вы говорите вверху. В любом случае ввод должен быть в непротиворечивом формате, иначе вам нужно сделать больше, но...
Все в одном сеансе БД, так как это область временных таблиц. Временная таблица не сохраняется и автоматически умирает в конце сеанса. Я использую его из соображений производительности.
В противном случае вам понадобится простая таблица в качестве трамплина, которая сохраняется между сеансами и может быть удалена после того, как выполнила свою задачу.
Связанный:
person
Erwin Brandstetter
schedule
21.08.2019