sql >> Databáze >  >> RDS >> PostgreSQL

jednoduché uvozovky se objeví kolem hodnoty po spuštění kopie v postgresu 9.2

To, co popisujete ve své otázce, se zjevně neděje. COPY by selhal při pokusu o import řetězcových literálů s nadbytečnými jednoduchými uvozovkami do date sloupec.

Chcete-li se zbavit nadbytečných uvozovek, importujte do dočasné tabulky s text a poté INSERT INTO cílová tabulka ořezávání uvozovek:

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

Dočasná tabulka se na konci vaší relace automaticky zruší.

Vyhrazená slova jako identifikátory

Vidím, že jsi zkopíroval příklad z manuálu. Zde je přímý odkaz na aktuální příručku .

I když je to správné, tento příklad v návodu je nešťastný. Doporučuji nepoužívat vyhrazená slova jako date jako názvy sloupců. Jak můžete vidět zde date je vyhrazené slovo v každém standardu SQL. V Postgresu je to povoleno a vidím, jak to svádí k jednoduchému příkladu. Ale to z toho nedělá dobrý nápad. Obecně byste měli mít ve zvyku vyhýbat se vyhrazená slova jako identifikátory. Vede to k matoucím chybovým zprávám a zbytečně nekompatibilnímu kódu SQL.



  1. Souhrnná funkce v dotazu aktualizace SQL?

  2. SECOND() Příklad – MySQL

  3. Pomalý dotaz na zobrazení UNION ALL

  4. Urychlete operace hromadného vkládání pomocí NHibernate