如何将postgres数据库转换为sqlite

时间:2011-05-27 06:02:56

标签: database postgresql sqlite

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

6 个答案:

答案 0 :(得分:13)

我发现this blog entry指导您执行以下步骤:

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

    ssh -C username@hostname.com pg_dump --data-only --inserts YOUR_DB_NAME > dump.sql
    
  2. 删除/修改转储。

    1. 删除以SET
    2. 开头的行
    3. 删除以SELECT pg_catalog.setval
    4. 开头的行
    5. 将“t
    6. 替换为true
    7. 将“f
    8. 替换为false
  3. 添加BEGIN;作为第一行,END;作为最后一行

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

  5. 导入转储。

    sqlite3 db/development.sqlite3
    sqlite> delete from schema_migrations;
    sqlite> .read dump.sql
    
  6. 当然通过ssh连接并使用rake创建一个新的db是可选的

答案 1 :(得分:6)

有一些转换工具:

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

  

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

可能这样做非常简单。

答案 2 :(得分:3)

第1步:转储数据库结构和数据

pg_dump --create --inserts -f myPgDump.sql -d myDatabaseName -U myUserName -W myPassword

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

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

sqlite3 myNewSQLiteDB.db -init -myPgDump.sql

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

答案 3 :(得分:1)

来自https://stackoverflow.com/a/31521432/1680728(在此投票): sequel宝石使此过程非常轻松:

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

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

积分@lulalala。

答案 4 :(得分:0)

万一需要更自动化的解决方案,这是一个开门红:

#!/bin/bash

$table_name=TABLENAMEHERE

PGPASSWORD="PASSWORD" /usr/bin/pg_dump --file "results_dump.sql" --host "yourhost.com" --username "username" --no-password --verbose --format=p --create --clean --disable-dollar-quoting --inserts --column-inserts --table "public.${table_name}" "memseq"

# Some clean ups
perl -0777 -i.original -pe "s/.+?(INSERT)/\1/is" results_dump.sql
perl -0777 -i.original -pe "s/--.+//is" results_dump.sql

# Remove public. preffix from table name
sed -i "s/public.${table_name}/${table_name}/g" results_dump.sql

# fix binary blobs
sed -i "s/'\\\\x/x'/g" results_dump.sql

# use transactions to make it faster
echo 'BEGIN;' | cat - results_dump.sql > temp && mv temp results_dump.sql
echo 'END;' >> results_dump.sql

# clean the current table 
sqlite3 results.sqlite "DELETE FROM ${table_name};"

# finally apply changes
sqlite3 results.sqlite3 < results_dump.sql && \
rm results_dump.sql && \
rm results_dump.sql.original

答案 5 :(得分:-1)

使用这里描述的水龙头宝石非常容易: http://railscasts.com/episodes/342-migrating-to-postgresql

我已经开始在我的Mac上使用Postgres.app(无需安装,将应用程序放在Applications目录中,尽管可能需要在文档中描述的PATH环境变量中添加一行)和Induction .app作为查看/查询数据库的GUI工具。