2011-09-11 91 views
8

Estoy tratando de importar un archivo delimitado por tabuladores en mi base de datos PostgreSQL. Uno de los campos en mi archivo es un campo "título", que ocasionalmente contiene comillas reales. Por ejemplo, mi TSV podría ser:¿Ignorar comillas al importar un archivo CSV en PostgreSQL?

id title 
5  Hello/Bleah" Foo 

(Sí, sólo hay que marca una cita en el título.)

Cuando intento importar el archivo en mi base de datos:

copy articles from 'articles.tsv' with delimiter E'\t' csv header; 

consigo este error, haciendo referencia a esa línea:

ERROR: unterminated CSV quoted field 

¿Cómo puedo solucionar esto? Las comillas nunca se usan para rodear campos enteros en el archivo. Intenté copy articles from 'articles.tsv' with delimiter E'\t' escape E'\\' csv header; pero obtengo el mismo error en la misma línea.

Respuesta

4

Tab separado es el formato predeterminado para las instrucciones de copia. Tratarlos como CSV es simplemente una tontería. (¿Toma este camino solo para omitir el encabezado?)

copy articles from 'articles.tsv'; 

hace exactamente lo que quiere.

+2

Suena bastante simple, pero ¿y si los datos CSV contienen barras diagonales inversas como contenido de campo válido? (Sí, me he encontrado con esto) El formato predeterminado para COPY trata una barra invertida como un carácter de escape, por lo que TIENE que usar COPIA con formato CSV ... –

+0

No había pensado en eso. Sí, tiene sentido. – wildplasser

6

Suponiendo que el archivo de trata en realidad nunca citar sus campos:

La opción que desea es "con cita", ver http://www.postgresql.org/docs/8.2/static/sql-copy.html

Por desgracia, no estoy seguro de cómo apagar el procesamiento de las cotizaciones por completo, un kludge sería especificar un carácter que no aparece en su archivo en absoluto.

+10

Cool, gracias! Probé al azar 'quote E '\ b'', que terminó funcionando. – grautur

+0

@grautur ¿Qué significa E '\ b'? Retroceso? ¿y la 'E'? "escape string constant" - lo tengo. –

Cuestiones relacionadas