我在将数据库从 MYSQL 迁移到 postgrSQL 的过程中遇到了反向斜杠() 问题。我的问题是我有很多大型 mysql 表转储(使用 sql formate)大约 2gb,并尝试导入 postgreSQL 数据库。在 mysql 转储文件中,许多列中有许多反斜杠,因此如果我尝试在 postgreSQL 中通过异常导入它。我已经尝试了许多解决方案,但还没有奏效。并且 mysql 转储文件非常大,所以我无法手动设置它。您可以在下面看到 MySQL 代码。
MYSQL 代码:
INSERT INTO Leads
(921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
所以请提出任何解决方案。提前感谢....!!!!!
您需要通过加倍来转义这些斜杠:
插入引线 (921347,空,'李的 ...
如何做到这一点取决于您可以使用的工具。如果您没有可以为您搜索和替换的编辑器,那么您可以编写一个 php 脚本并使用 preg_replace 处理文件。
就个人而言,我不将使用sql转储文件来迁移数据,除了这种问题之外,它们太慢了。最好使用Navicat''Toad''Heidi之类的东西来做。Navicat 是最好的,但您必须付费,而其他人是免费的。
尝试:
shell> mysqldump --tab=/tmp yourdatabase
然后对于每个表使用 http://www.postgresql.org/docs/8.1/static/sql-copy.html
COPY country FROM '/tmp/yourtable';
因为对于大型数据库没有简单的解决方案,请阅读以下维基教科书:
将 MySQL 转换为 PostgreSQLhttp://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL
在这里,您可以找到如何迁移转储文件的示例,或者建议使用 CSV 文件而不是转储文件。
如果在带引号的字符串之前添加 E,它将运行,例如
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
将成为
INSERT INTO Leads (921347,NULL,e'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
您可以 sed 所有要,e'
,'
并运行 INSERT 语句
例如:我用你的语句创建了一个文件,并记录了所有出现的情况:
cat mysql.sql
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
sed -i.bak s/,'/,e'/g mysql.sql
cat mysql.sql
INSERT INTO Leads (921347,eNULL,e'Lee''s Summit',e'MO',e'64081',e'1983-09-24',eNULL,e'75.81.43.181',eNULL,e0,e'cash');
INSERT INTO Leads (921347,eNULL,e'Lee''s Summit',e'MO',e'64081',e'1983-09-24',eNULL,e'75.81.43.181',eNULL,e0,e'cash');
cat mysql.sql.bak
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
所以你有.bak原始和 mysql.sql转换为 postgres...
更新 2:您可以使用 Oracle 样式更改所有带引号的字符串,而只能更改转义引号:
sed -e "s/'''''/''/g" mysql.sql
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');
INSERT INTO Leads (921347,NULL,'Lee''s Summit','MO','64081','1983-09-24',NULL,'75.81.43.181',NULL,0,'cash');