Was Sie in Ihrer Frage beschreiben, ist offensichtlich nicht das, was wirklich passiert. COPY
Der Versuch, Zeichenfolgenliterale mit redundanten einfachen Anführungszeichen in ein date
zu importieren, würde fehlschlagen Spalte.
Um überflüssige Anführungszeichen zu entfernen, importieren Sie in eine temporäre Tabelle mit text
Spalte, dann INSERT INTO
die Zieltabelle, die die Anführungszeichen kürzt:
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 ?
;
Die temporäre Tabelle wird am Ende Ihrer Sitzung automatisch gelöscht.
Reservierte Wörter als Identifikatoren
Ich sehe, Sie haben das Beispiel aus dem Handbuch kopiert. Hier ist der deep link zum aktuellen Handbuch .
Das Beispiel im Handbuch ist zwar richtig, aber unglücklich. Ich rate davon ab, reservierte Wörter wie date
als Spaltennamen. Wie Sie hier
sehen können date
ist ein reserviertes Wort in jedem SQL-Standard. Es darf in Postgres verwendet werden, und ich kann sehen, wie verlockend es für ein einfaches Beispiel ist. Aber das macht es nicht zu einer guten Idee. Im Allgemeinen sollten Sie es sich angewöhnen, zu vermeiden reservierte Wörter als Bezeichner. Es führt zu verwirrenden Fehlermeldungen und unnötig inkompatiblem SQL-Code.