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.