Det du beskriver i din fråga är uppenbarligen inte vad som verkligen händer. COPY
skulle misslyckas med att försöka importera strängliteraler med redundanta enstaka citattecken till ett date
kolumn.
För att bli av med överflödiga citat, importera till en tillfällig tabell med text
kolumn och sedan INSERT INTO
måltabellen trimmar citattecken:
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 ?
;
Temp-tabellen tas bort automatiskt i slutet av din session.
Reserverade ord som identifierare
Jag ser att du kopierade exemplet från manualen. Här är djuplänken till den aktuella manualen .
Även om det här exemplet i manualen är korrekt, är det olyckligt. Jag rekommenderar att du inte använder reserverade ord som date
som kolumnnamn. Som du kan se här
date
är ett reserverat ord i varje SQL-standard. Det är tillåtet att använda i Postgres och jag kan se hur det är frestande för ett enkelt exempel. Men det gör det inte till en bra idé. Generellt bör du ha för vana att undvika reserverade ord som identifierare. Det leder till förvirrande felmeddelanden och onödigt inkompatibel SQL-kod.