【问题标题】:Load sqlite database into Postgres将 sqlite 数据库加载到 Postgres
【发布时间】:2012-08-14 19:20:48
【问题描述】:

我已经在本地开发了一段时间,现在正在将所有内容推向生产。当然,我也在向开发服务器添加数据时没有想到我没有将其重新配置为 Postgres。

现在我有一个 SQLite 数据库,我需要将其信息放在 Postgres 数据库上的远程 VPS 上。

我尝试转储到 .sql 文件,但收到很多来自 Postgres 的语法投诉。最好的方法是什么?

【问题讨论】:

  • 可以使用像 CSV 这样的中间格式吗?虽然如果 Pg 模式匹配 .sql 转储中的“仅插入”应该没问题.. 验证 .sql 转储中没有 DDL/DML?此外,请考虑在 Pg 中发布 生成 语法错误的转储部分,以及确切的错误消息..
  • DDL/DML?它在抱怨 AUTOINCREMENT
  • 还有一些我认为可以安全删除的 PRAGMA
  • DDL = 数据定义语言 = CREATE TABLE。 (忘记我在那种情况下对 DML 说过的话。)只要确保 Pg 具有 same schema —— Pg 将使用 sequence 作为“autoincrement”列——并且然后确保导入 only 包含 DML(例如 INSERT)。

标签: sqlite postgresql vps


【解决方案1】:

PostgreSQL 支持“外部数据包装器”,它允许您通过 DB 直接访问任何数据源,包括 sqlite。甚至可以自动导入架构。然后您可以使用create table localtbl as (select * from remotetbl) 将您的数据放入实际的 PG 存储中。

【讨论】:

    【解决方案2】:

    Heroku 的数据库转换工具叫做sequel。以下是您需要的红宝石:

    gem install sequel
    gem install sqlite3
    gem install pg
    

    然后这对我来说适用于当前工作目录中名为“tweets.db”的 sqlite 数据库文件:

    sequel -C sqlite://tweets.db postgres://pgusername:pgpassword@localhost/pgdatabasename
    

    【讨论】:

    • 谢谢!谷歌搜索的提示:我必须安装 gem sqlite3 而不是 sqlite。否则你会得到:Error: Sequel::AdapterNotFound: LoadError: cannot load such file -- sqlite3 <internal:/usr/local/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in 'require'
    • 谢谢@hraban,我更新了 gem 安装。
    【解决方案3】:

    对于两个数据库之间的几乎任何转换,选项如下:

    1. 从源数据库执行仅模式转储。手动转换它并将其加载到目标数据库中。然后以它提供的最兼容的 SQL 转储形式从源数据库中执行仅数据转储。尝试将其加载到目标数据库中。当您遇到问题时,使用 sed/awk/perl/whatever 将脚本转换为转储,然后重试。重复直到加载并且结果匹配。

    2. 与 (1) 一样,手动转换架构。然后用你喜欢的语言编写一个脚本,连接到两个数据库,从一个数据库中选择,从一个数据库中插入到另一个数据库中,可能需要对数据类型和表示进行一些转换。

    3. 使用 Talend 或 Pentaho 等 ETL 工具连接到两个数据库并在它们之间进行转换。 ETL 工具就像 (2) 的“其他人已经写过”版本,但它们需要一些学习。

    4. 希望您也能找到预先编写的转换。 Heroku 一个名为 sequel 的 Heroku 将适用于 SQLite -> PostgreSQL;它是否可以在没有 Heroku 的情况下使用并且能够在没有所有其他 Heroku 基础设施和代码的情况下运行?

    在其中任何一个之后,通常需要一些传输后步骤,例如使用 setval() 初始化序列。

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2012-11-22
      • 2021-09-21
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多