将MySQL转储导入Postgres并转义\

时间:2018-01-22 21:15:07

标签: mysql postgresql escaping plpgsql

我收到了一个MYSQL转储,需要将其推送到Postgres表中。

在这个poi_dump.sql转储中,有很多行的插入。示例如下:

Insert into table values (1,'hello','\rthis is a beautiful Alan\'s cottage', '\nbyebye')
Insert into table values (1,'hello','\rthis is a big\"Work', '\nbyebye')

我正在使用PSQL命令:

psql analytics < poi_dump.sql

但是,postgres无法识别所有\'用于在''字段中转义。

Errors From Postgres:
Query buffer reset (cleared).
invalid command \nOn
invalid command \n
invalid command \'
invalid command \'
invalid command \'
invalid command \n
invalid command \"Without
invalid command \nPort-a-loo
Query buffer reset (cleared).
invalid command \n

如何让postgres接受引用字段中的\ r,\ n,?

1 个答案:

答案 0 :(得分:0)

默认情况下,PostgreSQL无法识别字符串中的反斜杠。但这种行为可以简单地改变:

ides_jmmaj_prac=# select 'hello\nworld';
┌──────────────┐
│   ?column?   │
╞══════════════╡
│ hello\nworld │
└──────────────┘
(1 row)

Time: 0,496 ms
ides_jmmaj_prac=# set standard_conforming_strings TO off;
SET
Time: 0,251 ms
ides_jmmaj_prac=# select 'hello\nworld';
WARNING:  nonstandard use of escape in a string literal
ŘÁDKA 1: select 'hello\nworld';
                ^
DOPORUČENÍ:  Use the escape string syntax for escapes, e.g., E'\r\n'.
┌──────────┐
│ ?column? │
╞══════════╡
│ hello   ↵│
│ world    │
└──────────┘
(1 row)

Time: 0,496 ms

通过以下方式禁用警告:

set escape_string_warning to off;

可能应删除\r。使用Unix行尾的PostgreSQL - 仅\n(我没有测试它)。