sql >> Databasteknik >  >> RDS >> PostgreSQL

enstaka citattecken visas runt värdet efter att ha kört kopia i postgres 9.2

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.



  1. Hur man representerar en kategoriserad många-till-många-databasrelation där kategorier är specifika för en sida av relationen

  2. Hämta namnet på anropsproceduren eller funktionen i Oracle PL/SQL

  3. Jämför strängar i PHP på samma sätt som MySQL gör

  4. Rails Heroku app fel