Lo que describe en su pregunta obviamente no es lo que realmente está sucediendo. COPY
fallaría al intentar importar literales de cadena con comillas simples redundantes en una date
columna.
Para deshacerse de las comillas redundantes, importe a una tabla temporal con text
columna, luego INSERT INTO
la tabla de destino recortando las comillas:
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 tabla temporal se elimina automáticamente al final de su sesión.
Palabras reservadas como identificadores
Veo que copiaste el ejemplo del manual. Aquí está el enlace profundo al manual actual .
Si bien es correcto, ese ejemplo en el manual es desafortunado. Aconsejaría no usar palabras reservadas como date
como nombres de columna. Como puede ver aquí
date
es una palabra reservada en cada estándar SQL. Se permite su uso en Postgres y puedo ver cómo es tentador para un ejemplo simple. Pero eso no lo convierte en una buena idea. En general, debe tener el hábito de evitar palabras reservadas como identificadores. Conduce a mensajes de error confusos y código SQL innecesariamente incompatible.