Това, което описвате във въпроса си, очевидно не е това, което наистина се случва. COPY
ще се провали при опит за импортиране на низови литерали с излишни единични кавички в date
колона.
За да се отървете от излишните кавички, импортирайте във временна таблица с text
колона, след което INSERT INTO
целевата таблица изрязва кавичките:
CREATE TEMP TABLE wtmp (
city text
, temp_lo int
, temp_hi int
, prcp real
, date text -- note how I use text here.
);
COPY wtmp FROM '~aviad/postsgres/playground/weather.txt';
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
SELECT city, temp_lo, temp_hi, prcp, trim(date, '''')::date
FROM wtmp
-- ORDER BY ?
;
Временната таблица се премахва автоматично в края на вашата сесия.
Запазени думи като идентификатори
Виждам, че сте копирали примера от ръководството. Ето дълбока връзка към текущото ръководство .
Въпреки че е правилен, този пример в ръководството е жалък. Бих посъветвал да не използвате запазени думи като date
като имена на колони. Както можете да видите тук
date
е запазена дума във всеки SQL стандарт. Разрешено е да се използва в Postgres и виждам колко е изкушаващо за прост пример. Но това не го прави добра идея. Като цяло трябва да имате навика да избягвате запазени думи като идентификатори. Това води до объркващи съобщения за грешка и ненужно несъвместим SQL код.