【问题标题】:How to read PostgreSQL database dump with multiple tables into mySQL如何将具有多个表的 PostgreSQL 数据库转储读入 mySQL
【发布时间】:2023-04-09 19:42:01
【问题描述】:

我对 mySQL 还很陌生。今天,我使用教程(http://www.elated.com/articles/mysql-for-absolute-beginners/)练习阅读 .sql 文件。 .sql 文件名为 books.sql,仅包含一个没有记录的表:

USE bookstore;

DROP TABLE IF EXISTS books;
CREATE TABLE books
(
  id              int unsigned NOT NULL auto_increment, # Unique ID for the record
  title           varchar(255) NOT NULL,                # Full title of the book
  author          varchar(255) NOT NULL,                # The author of the book
  price           decimal(10,2) NOT NULL,               # The price of the book

  PRIMARY KEY     (id)
);

现在,我正在尝试读取一个名为 db.sql 的 .sql 文件。这包含大约 200 行标题行和几个表和字段列表。然后,它包含实际记录。它非常大(751,933 行)。

我试图做的是打开 mysql,创建一个数据库,然后读入这个 db.sql 文件。我希望将 db.sql 中的所有表(及其记录)放入此数据库:

mysql -u root
create database myDataBase;
source /path/db.sql

我收到了一长串错误,开头是:

ERROR 1193 (HY000): Unknown system variable 'statement_timeout'
ERROR 1193 (HY000): Unknown system variable 'client_encoding'
ERROR 1193 (HY000): Unknown system variable 'standard_conforming_strings'
ERROR 1193 (HY000): Unknown system variable 'check_function_bodies'
ERROR 1193 (HY000): Unknown system variable 'client_min_messages'
ERROR 1193 (HY000): Unknown system variable 'escape_string_warning'
ERROR 1193 (HY000): Unknown system variable 'search_path'
ERROR 1193 (HY000): Unknown system variable 'default_tablespace'
ERROR 1193 (HY000): Unknown system variable 'default_with_oids'
ERROR 1046 (3D000): No database selected
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SEQUENCE academic_academic_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MAX' at line 1

然后以重复的语句结束:

ERROR 2005 (HY000): Unknown MySQL server host 'corey.vorland        0' (0)
No connection. Trying to reconnect...
ERROR 2005 (HY000): Unknown MySQL server host 'corey.vorland        0' (0)
ERROR: 
Can't connect to the server

db.sql文件开头如下:

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: academic; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE academic (
    academic_id integer NOT NULL,
    family_name text,
    given_name text,
    other_names text,
    standrews_link text,
    comments text,
    reference text,
    descendant_count integer
);

还有

--
-- Name: academic_academic_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--

CREATE SEQUENCE academic_academic_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;


--
-- Name: academic_academic_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--

ALTER SEQUENCE academic_academic_id_seq OWNED BY academic.academic_id;


--
-- Name: academic_academic_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--

SELECT pg_catalog.setval('academic_academic_id_seq', 190374, true);


--
-- Name: advises; Type: TABLE; Schema: public; Owner: -; Tablespace: 
--

CREATE TABLE advises (
    advisor integer NOT NULL,
    advisee integer NOT NULL,
    advice_type character varying(20),
    degree integer NOT NULL
);

我尝试了一些方法,例如在第一个 CREATE TABLE 命令之前从 db.sql 中删除一些标题行,但仍然有很多错误。由于我对数据库和 SQL 非常缺乏经验,我不知道如何解决这个问题。我假设这个 db.sql 文件显然来自 PostgreSQL,并且有多个表导致我尝试使用 source 命令将这个 db.sql 文件读入 mysql 时出现问题?我什至可以将它读入mysql吗?

感谢您的任何建议。

【问题讨论】:

  • 你想把它导入 MySQL 并且不能只使用 PostgreSQL 有什么具体原因吗?
  • 这只是我的看法,但 Postgresql 在另一个星球上。如果可以的话,学习和使用它。
  • SQL(有点遗憾)是一组不兼容的方言。您不能只从 PostgreSQL 或 MySQL 加载数据库转储,反之亦然。
  • 谢谢大家。我在尝试从 PostgreSQL 转换到 MySQL 时遇到很多错误。老实说,我没有考虑过使用 PostgreSQL。我现在就试一试……

标签: mysql database postgresql database-migration


【解决方案1】:

正如您所注意到的,您不能只将 .sql 文件从一个数据库引擎导入到另一个数据库引擎。转储输出中存在语法差异,在导入文件时会导致错误。您必须首先将转储文件从 postgre 语法/格式转换为 mysql 兼容的语法/格式。

幸运的是,您不是第一个(我相信也不是最后一个)遇到此问题的人。

首先你应该看看convert postgresql dump to mysql

您会注意到第二步是使用名为“pg2mysql”的 PHP 函数。它接受一个输入(要转换的 postgres 代码)并返回 mysql 代码。

有关此有用工具的更多信息,我将向您推荐创建者的githubwebsite。在网站上,您实际上可以使用提供的 textarea 将 PG 转换为 Mysql。虽然不建议对较大的文件使用 textarea 转换。

【讨论】:

  • 哇,非常感谢您的帮助!如果我理解正确,看来我必须运行三个命令:1)psql dbname
  • 但是,当我什至运行上面的第一个命令 (1) 时,我收到错误:“psql: FATAL: database "dbname" does not exist”。我不确定 dbname 应该是什么?我以为那是输出。我只有一个输入(我认为)是 db.sql 文件,我在同一命令中调用它。任何帮助将不胜感激。对于我在解释其中一些内容时缺乏智慧,我深表歉意。
  • 我现在很担心。我收到的只是 db.sql 文件!是的,我可以看到它是一个占位符名称,但我怎么知道我应该在那个占位符中放什么?这对你来说似乎很明显,但我不确定。
  • 如果这增加了混乱,我还应该补充一点,我从保存该数据库的网站的联系人那里收到了 db.sql 文件。我不是自己创建的。
  • 询问您的联系人数据库名称是什么...或查找类似于“create table dbname.tablename...”的内容
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2011-06-10
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多