【问题标题】:psql restore sql dump syntax errorpsql恢复sql转储语法错误
【发布时间】:2017-09-23 22:14:39
【问题描述】:

我正在尝试将 https://www.yelp.com/dataset/documentation/sql 导入 PostgreSQL 实例。它有重音符号/反引号的问题。除了做字符替换之外,还有其他方法可以解决这个问题吗?

ERROR:  syntax error at or near "PaxHeader"
LINE 1: PaxHeader/yelp_db.sql17 uid=998889796
    ^
ERROR:  syntax error at or near "`"
LINE 1: CREATE DATABASE /*!32312 IF NOT EXISTS*/ `yelp_db` /*!40100 ...
                                             ^
ERROR:  syntax error at or near "USE"
LINE 1: USE `yelp_db`;
    ^
ERROR:  syntax error at or near "`"
LINE 1: DROP TABLE IF EXISTS `attribute`;

【问题讨论】:

  • 您可能正在为 Postgres 数据库使用 MySQL 代码。确保您下载了正确的代码。
  • 他们只有一个文件可以下载。 yelp.com/dataset/download
  • 有没有办法将 MySQL 转储转换为 PostgeSQL 转储?
  • 我查了一下,脚本是MySql特有的。您必须将其转换为 Postgres 脚本。
  • 你可以把它加载到mysql中,转储为csv然后加载到postgresql中

标签: sql postgresql psql restore yelp


【解决方案1】:

这些是 PostgreSQL 符合标准的典型 MySQL 语法问题,因此不支持。 GitHub 上有一些不同的转换器可能会有所帮助。当我最后不得不这样做时,有一些工具可以转换文本转储。他们没有完美地工作,但他们已经足够接近了。回顾今天的工具,他们倾向于假设您有一个实际的 MySQL 数据库,而不仅仅是一个转储文件。

因此,今天解决此问题的适当方法是将数据加载到 MySQL,然后将其移动到 PostgreSQL。在这方面,您似乎有四个我能想到的用于转换架构和数据的选项:

  1. 有一些工具可以从 MySQL 转换 XML 转储并将它们加载到 PostgreSQL 中。
  2. 您可以设置一个从 PostgreSQL 到 MySQL 数据库的外部数据包装器,然后将架构和数据复制进去。
  3. 您可以手动转换架构,然后通过 CSV 使用 ETL 过程转储/重新加载数据。
  4. 有一些工具可以读取实时 MySQL 数据库并将数据插入 PostgreSQL。

【讨论】:

  • 谢谢!我最终找到了其中一些脚本,但遇到了你提到的小问题。最终降低了 MySQL 路由中的负载。
  • 您仍然使用外部数据包装器方法。那么搬家就很简单了。 github.com/EnterpriseDB/mysql_fdw
  • 作为外部数据包装器的替代品,使用github.com/dimitri/pgloader 将数据从 MySQL 导入 Postgresql
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2023-03-05
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多