sql >> Database >  >> RDS >> PostgreSQL

enkele aanhalingstekens verschijnen rond de waarde na het uitvoeren van kopiëren in postgres 9.2

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.



  1. Automatisch verhogen in Oracle zonder een trigger te gebruiken

  2. Fout in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie

  3. Hoe verwijs ik twee keer naar een refererende sleuteltabel?

  4. Oracle PL/SQL:hulp bij het oplossen van PLS-00103:kwam het symbool LOOP tegen bij het verwachten van een van de volgende zaken:als