如何将postgres数据库转换为sqlite

luq*_*qui 11 database sqlite postgresql

我们正在开发一个网站,当我们在本地开发时(我们中的一个来自Windows),我们使用sqlite3,但在服务器(linux)上我们使用postgres.我们希望能够将生产数据库导入到我们的开发过程中,所以我想知道是否有一种方法可以将postgres数据库转换转换为sqlite3可以理解的东西(只是将它添加到postgres的转储SQL中给了很多,许多错误).或者只是在Windows上安装postgres会更容易吗?谢谢.

tut*_*uju 14

我发现此博客条目指导您执行以下步骤:

  1. 创建PostgreSQL数据库的转储.

    ssh -C username@hostname.com pg_dump --data-only --inserts YOUR_DB_NAME > dump.sql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除/修改转储.

    1. 删除以.开头的行 SET
    2. 删除以.开头的行 SELECT pg_catalog.setval
    3. 替换为' t'的真实
    4. 为' f' 替换为false
  3. 添加BEGIN;为第一行和END;最后一行

  4. 重新创建一个空的开发数据库. bundle exec rake db:migrate

  5. 导入转储.

    sqlite3 db/development.sqlite3
    sqlite> delete from schema_migrations;
    sqlite> .read dump.sql
    
    Run Code Online (Sandbox Code Playgroud)

当然,通过ssh连接并使用rake创建一个新的db是可选的

  • 对我来说,`t`和`f`不起作用,我不得不使用这些帖子中描述的`1`和`0`:http://stackoverflow.com/questions/5768364/activerecordstatementinvalid-sqlite3sqlexception-no-such -column真 (3认同)

Art*_*sev 8

STEP1:转储您的数据库结构和数据

pg_dump --create --inserts -f myPgDump.sql \
   -d myDatabaseName -U myUserName -W myPassword
Run Code Online (Sandbox Code Playgroud)

STEP2:从 myPgDump.sql 中删除除 CREATE TABLES 和 INSERT 语句之外的所有内容(使用文本编辑器)

STEP3:初始化您的 SQLite 数据库,传递 Postgres 转储的结构和数据

sqlite3 myNewSQLiteDB.db -init myPgDump.sql
Run Code Online (Sandbox Code Playgroud)

第 4 步:使用您的数据库 ;)


Fel*_*lix 7

摘自/sf/answers/2206500271/(在那里投票):sequel宝石使这成为一个非常轻松的过程:

首先安装 Ruby,然后通过运行安装 gem gem install sequel

如果是 sqlite,它会是这样的:sequel -C postgres://user@localhost/db sqlite://db/production.sqlite3

感谢@lulalala。


Den*_*rdy 6

有一些转换器工具:

http://sqlite.com/cvstrac/wiki?p=ConverterTools

在Windows上安装postgres会更容易吗?

可能,这样做非常简单.

  • 我不确定我是否会使用"非常简单"的字眼,我不得不经历[很多痛苦](http://stackoverflow.com/questions/7086654/installing-postgres-on-windows-for-use -with-ruby-on-rails/7133391#7133391)这样做.值得一提,因为它允许您在到达生产服务器之前捕获使用更严格的Postgres发生的SQL查询错误. (3认同)
  • 该链接指向自2009年以来不推荐使用的页面。 (3认同)

cai*_*cuk 6

您可以使用pg2sqlite将 pg_dump 输出转换为 sqlite。

#  Making dump
pg_dump -h host -U user -f database.dump database

#  Making sqlite database
pg2sqlite -d database.dump -o sqlite.db
Run Code Online (Sandbox Code Playgroud)

pg2sqlite 不支持模式,如果转储包含模式,则需要将其删除。您可以使用这个脚本:

# sed 's/<schema name>\.//' -i  database.dump
sed 's/public\.//' -i  database.dump
pg2sqlite -d database.dump -o sqlite.db
Run Code Online (Sandbox Code Playgroud)


luq*_*qui 2

尽管这里有很多非常有用的答案,但我只想将其标记为已回答。我们最终采纳了评论的建议:

\n
\n

我只是将你的开发环境切换到 PostgreSQL,在一个数据库(尤其是像 SQLite 这样宽松和宽容的数据库)之上进行开发,但在另一个数据库(尤其是像 PostgreSQL 这样严格的数据库)上部署通常会导致恼怒和咒骂。\xe2\x80\x93\n@mu 太短

\n
\n
\n

为了回应 mu 的回应,不要这样做……不要这样做……不要这样做。开发和部署在同一件事上。否则的话,这是不好的工程实践。\xe2\x80\x93 @Kuberchaun

\n
\n

所以我们只是在我们的开发机器上安装了 postgres。上手很容易,工作也很顺利。

\n