6

Will it work?

MySQL export:

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

There is missing columns for some reason. So I believe there is problem in delimiter. Am I correct, what can I do? I can inspect row with cause error below. But which characters I must look for?

ERROR:  missing data for column "Column21"
CONTEXT:  COPY table, line 88219: ...
Bruce
  • 1,542
  • 13
  • 17
FirstTimePoster
  • 251
  • 2
  • 9
  • So at 88219 line contain sting with escaped quote: " ... \" ... " Seems like postgres fail to unquote this. Is there special option for this? – FirstTimePoster Sep 20 '11 at 12:06

2 Answers2

16
  1. As mentioned by @knitti postgres need to know escape character: ESCAPE '\'
  2. OPTIONALLY ENCLOSED BY '"' is bad format for csv. It's better to force quoting.

Full code:

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 E'\t' NULL AS '\\N' ESCAPE E'\\' CSV
vitalyster
  • 4,980
  • 3
  • 19
  • 27
FirstTimePoster
  • 251
  • 2
  • 9
0

Default quote character in PostgreSQL is double-quote, but the documentation says, you can use any single one-byte-character. Try adding

ESCAPE '\\'
knitti
  • 6,817
  • 31
  • 42