PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

les guillemets simples apparaissent autour de la valeur après l'exécution de la copie dans postgres 9.2

Ce que vous décrivez dans votre question n'est évidemment pas ce qui se passe réellement. COPY échouerait à essayer d'importer des littéraux de chaîne avec des guillemets simples redondants dans une date colonne.

Pour vous débarrasser des guillemets redondants, importez dans une table temporaire avec text colonne, puis INSERT INTO le tableau cible en supprimant les guillemets :

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 table temporaire est supprimée automatiquement à la fin de votre session.

Mots réservés comme identifiants

Je vois que vous avez copié l'exemple du manuel. Voici le lien profond vers le manuel actuel .

Tout en étant correct, cet exemple dans le manuel est malheureux. Je vous conseille de ne pas utiliser mots réservés comme date comme noms de colonne. Comme vous pouvez le voir ici date est un mot réservé dans toutes les normes SQL. Il est autorisé à utiliser dans Postgres et je peux voir à quel point c'est tentant pour un exemple simple. Mais cela n'en fait pas une bonne idée. Généralement, vous devriez avoir l'habitude d'éviter mots réservés comme identificateurs. Cela conduit à des messages d'erreur confus et à un code SQL inutilement incompatible.