sql >> Base de Datos >  >> RDS >> PostgreSQL

aparecen comillas simples alrededor del valor después de ejecutar la copia en postgres 9.2

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.