PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

einfache Anführungszeichen werden um den Wert herum angezeigt, nachdem die Kopie in Postgres 9.2 ausgeführt wurde

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.