Wat u in uw vraag beschrijft, is duidelijk niet wat er werkelijk aan de hand is. COPY
zou mislukken bij het importeren van letterlijke tekenreeksen met overbodige enkele aanhalingstekens in een date
kolom.
Om overbodige aanhalingstekens te verwijderen, importeert u naar een tijdelijke tabel met text
kolom, dan INSERT INTO
de doeltabel die de aanhalingstekens bijsnijdt:
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 ?
;
De tijdelijke tabel wordt automatisch verwijderd aan het einde van je sessie.
Gereserveerde woorden als identifiers
Ik zie dat je het voorbeeld uit de handleiding hebt gekopieerd. Hier is de deeplink naar de huidige handleiding .
Hoewel het correct is, is dat voorbeeld in de handleiding ongelukkig. Ik raad af om gereserveerde woorden zoals date
als kolomnamen. Zoals je hier
kunt zien date
is een gereserveerd woord in elke SQL-standaard. Het is toegestaan om in Postgres te gebruiken en ik kan zien hoe verleidelijk het is voor een eenvoudig voorbeeld. Maar dat maakt het nog geen goed idee. Over het algemeen zou u de gewoonte moeten hebben om vermijden gereserveerde woorden als identifiers. Het leidt tot verwarrende foutmeldingen en onnodig incompatibele SQL-code.