Postgresql 如何将postgres数据库转换为sqlite

Postgresql 如何将postgres数据库转换为sqlite,postgresql,sqlite,Postgresql,Sqlite,我们正在开发一个网站,当我们中的一个人从Windows本地开发时,我们使用sqlite3,但在linux服务器上我们使用postgres。我们希望能够将生产数据库导入到我们的开发过程中,因此我想知道是否有一种方法可以将postgres数据库转储转换为sqlite3可以理解的内容—只需将其输入postgres转储的SQL就会产生很多很多错误。或者仅仅在windows上安装postgres会更容易些?谢谢。这里有一些转换器工具: 在windows上安装postgres会更容易吗 很可能,这样做非常简

我们正在开发一个网站,当我们中的一个人从Windows本地开发时,我们使用sqlite3,但在linux服务器上我们使用postgres。我们希望能够将生产数据库导入到我们的开发过程中,因此我想知道是否有一种方法可以将postgres数据库转储转换为sqlite3可以理解的内容—只需将其输入postgres转储的SQL就会产生很多很多错误。或者仅仅在windows上安装postgres会更容易些?谢谢。

这里有一些转换器工具:

在windows上安装postgres会更容易吗


很可能,这样做非常简单。

我很容易使用这里描述的taps gem:

我已经开始在我的Mac电脑上使用Postgres.app无需安装,将该应用程序放在你的应用程序目录中,尽管可能需要向你的PATH环境变量添加一行,如文档中所述,使用inclution.app作为GUI工具来查看/查询数据库。

我找到了指导你执行以下步骤的方法:

创建PostgreSQL数据库的转储

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

sqlite3 db/development.sqlite3
sqlite> delete from schema_migrations;
sqlite> .read dump.sql
删除以SET开头的行 删除以SELECT pg_catalog.setval开头的行 将“t”替换为true 将false替换为“f” 添加开始;作为第一行和第二行;作为最后一行

重新创建一个空的开发数据库。bundle exec rake数据库:迁移

导入转储文件

sqlite3 db/development.sqlite3
sqlite> delete from schema_migrations;
sqlite> .read dump.sql

当然,通过ssh连接和使用rake创建新数据库是可选的。步骤1:转储数据库结构和数据

pg_dump --create --inserts -f myPgDump.sql \
   -d myDatabaseName -U myUserName -W myPassword
步骤2:使用文本编辑器从myPgDump.sql中删除除创建表和插入语句之外的所有内容

步骤3:初始化SQLite数据库,传递Postgres转储的结构和数据

sqlite3 myNewSQLiteDB.db -init myPgDump.sql

第四步:使用你的数据库

如果需要一个更自动化的解决方案,这里有一个开端:

#!/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. prefix 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
摘自上一页: sequel gem让这成为一个非常放松的过程:

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

对于sqlite,它将是这样的:sequel-Cpostgres://user@localhost/dbsqlite://db/production.sqlite3


归功于@lulalala。

我只想将您的开发环境切换到PostgreSQL,在一个数据库上开发,尤其是在一个像SQLite一样松散和宽容的数据库上开发,但在另一个数据库上部署,特别是在像PostgreSQL一样严格的数据库上部署通常会让人恼火和咒骂,别这样别这样别这样别这样。在同一事物上开发和部署。否则做是不好的工程实践。在SQLite上开发和在postgres上运行是完全可以接受的,如果您使用的ORM能够为您处理方言和模式上的所有差异。@Zaz您的意思是我不确定我是否会使用非常简单的词语来完成它。尽管这样做是值得的,因为它允许您在更严格的Postgres到达生产服务器之前捕获使用它们发生的SQL查询错误。但这个问题是关于反过来的——从Postgres到sqlite,而不是Postgres,正如你的评论和参考资料所表明的那样。你是对的-我没有仔细阅读它,因为在一百年内我永远不会想到当我在同一标题中看到“convert”+“postgres”+“sqlite”时,有人想走另一个方向。对我来说,t和f不起作用,我必须使用1和0,正如这些帖子中所描述的:以不同格式保存的blob。sqlite使用x'010101',而postgres'\x0101'我创建了一个基于此和其他来源的要点:很棒的脚本!布尔值呢?你用这些做什么?