PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

le virgolette singole appaiono intorno al valore dopo aver eseguito copy in postgres 9.2

Ciò che descrivi nella tua domanda ovviamente non è ciò che sta realmente accadendo. COPY non riuscirebbe a importare stringhe letterali con virgolette singole ridondanti in una date colonna.

Per eliminare le virgolette ridondanti, importa in una tabella temporanea con text colonna, quindi INSERT INTO la tabella di destinazione rifilando le virgolette:

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 ?
;

La tabella temporanea viene eliminata automaticamente alla fine della sessione.

Parole riservate come identificatori

Vedo che hai copiato l'esempio dal manuale. Ecco il collegamento profondo al manuale corrente .

Pur essendo corretto, quell'esempio nel manuale è sfortunato. Consiglio di non utilizzare parole riservate come date come nomi di colonna. Come puoi vedere qui date è una parola riservata in ogni standard SQL. È consentito l'uso in Postgres e posso vedere come sia allettante per un semplice esempio. Ma questo non la rende una buona idea. In generale, dovresti avere l'abitudine di evitare parole riservate come identificatori. Porta a messaggi di errore confusi e codice SQL inutilmente incompatibile.