2011-09-20 28 views
5

¿Funcionará?¿Importación csv de PostgreSQL desde una exportación csv de MySQL?

MySQL de exportación:

SELECT * INTO OUTFILE 'C:/data.csv' 
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM table; 

PostgreSQL:

COPY table FROM 'C:/data.csv' WITH DELIMITER AS '\t' NULL AS '\\N' CSV 

Hay falta columnas por alguna razón. Entonces creo que hay un problema en el delimitador. Estoy en lo cierto, ¿qué puedo hacer? Puedo inspeccionar la fila con el error de causa a continuación. Pero, ¿qué personajes debo buscar?

ERROR: missing data for column "Column21" 
CONTEXT: COPY table, line 88219: ... 
+0

Así que en la línea 88219 contienen picar citando escapado: "... \" ... "Parece que postgres fallan en este fin de la cita. ¿Hay una opción especial para esto? – FirstTimePoster

Respuesta

11
  1. Como se ha mencionado por @knitti postgres necesitan saber carácter de escape: escape '\'
  2. OPCIONALMENTE SE ADJUNTA A '"' es malo formato para csv Es mejor para forzar citando
  3. ..

código completo:

MySQL 5.5.15:

SELECT * 
INTO OUTFILE 'C:/data.csv' 
FIELDS TERMINATED BY '\t' ENCLOSED BY '"' ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM table; 

postgres 9.0.3:

COPY table FROM 'C:/data.csv' WITH DELIMITER AS '\t' NULL AS '\\N' ESCAPE E'\\' CSV 
+0

¡Justo lo que estaba buscando, amigo! –

+0

Necesitaba escapar del delimitador como E '\ t' para que lo anterior funcione – Zabuzzman

0

carácter de comillas defecto en PostgreSQL es de comillas dobles, pero the documentation dice, se puede utilizar cualquier de un byte-carácter individual. Trate de añadir

ESCAPE '\\' 
Cuestiones relacionadas