To, co popisujete ve své otázce, se zjevně neděje. COPY
by selhal při pokusu o import řetězcových literálů s nadbytečnými jednoduchými uvozovkami do date
sloupec.
Chcete-li se zbavit nadbytečných uvozovek, importujte do dočasné tabulky s text
a poté INSERT INTO
cílová tabulka ořezávání uvozovek:
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 ?
;
Dočasná tabulka se na konci vaší relace automaticky zruší.
Vyhrazená slova jako identifikátory
Vidím, že jsi zkopíroval příklad z manuálu. Zde je přímý odkaz na aktuální příručku .
I když je to správné, tento příklad v návodu je nešťastný. Doporučuji nepoužívat vyhrazená slova jako date
jako názvy sloupců. Jak můžete vidět zde
date
je vyhrazené slovo v každém standardu SQL. V Postgresu je to povoleno a vidím, jak to svádí k jednoduchému příkladu. Ale to z toho nedělá dobrý nápad. Obecně byste měli mít ve zvyku vyhýbat se vyhrazená slova jako identifikátory. Vede to k matoucím chybovým zprávám a zbytečně nekompatibilnímu kódu SQL.