postgresql 如何将postgres数据库转换为SQLite?

r6hnlfcb  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(8)|浏览(221)

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

cuxqih21

cuxqih211#

我找到了this blog entry,它指导你做这些步骤:
1.创建PostgreSQL数据库的转储。

ssh -C [email protected] pg_dump --data-only --inserts YOUR_DB_NAME > dump.sql

1.删除/修改转储。
1.删除以SET开头的行
1.删除以SELECT pg_catalog.setval开头的行
1.将“t”替换为true
1.为'f'替换false
1.添加BEGIN;作为第一行,END;作为最后一行
1.重新创建一个空的开发数据库。bundle exec rake db:migrate
1.导入转储。

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

当然,通过ssh连接和使用rake创建一个新数据库是可选的

cedebl8k

cedebl8k2#

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

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

STEP2:删除myPgDump.sql中除CREATETABLES和RESTATE语句以外的所有内容(使用文本编辑器)
STEP 3:初始化你的SQLite数据库,传递Postgres转储的结构和数据

sqlite3 myNewSQLiteDB.db -init myPgDump.sql

STEP 4:使用您的数据库;)

brvekthn

brvekthn3#

引用自https://stackoverflow.com/a/31521432/1680728(upvote there):sequel gem使这是一个非常轻松的过程:
首先安装Ruby,然后运行gem install sequel安装gem。
在sqlite的情况下,它会像这样:sequel -C postgres://user@localhost/db sqlite://db/production.sqlite3
感谢@lulalala。

9rbhqvlz

9rbhqvlz4#

您可以使用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

pg2sqlite不支持Schemas,如果您转储包含schema,则需要删除它。你可以使用这个脚本:

# sed 's/<schema name>\.//' -i  database.dump
sed 's/public\.//' -i  database.dump
pg2sqlite -d database.dump -o sqlite.db
col17t5w

col17t5w5#

尽管这里有很多非常有用的答案,但我只想将其标记为已回答。最后,我们采纳了评论中的建议:
我只是把你的开发环境切换到PostgreSQL,在一个数据库上开发(特别是像SQLite这样宽松和宽容的数据库),但在另一个数据库上部署(特别是像PostgreSQL这样严格的数据库)通常是一个令人恼火和咒骂的方法。- @mu太短了
为了呼应穆的回应,不要这样做..不要这样做..不要这样做。在同一个东西上开发和部署。不这样做是不好的工程实践。- @Kuberchaun
所以我们在我们的开发机器上安装了postgres。这是很容易开始和工作非常顺利。

fxnxkyjh

fxnxkyjh6#

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

#!/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
wfypjpf4

wfypjpf47#

当我面对同样的问题时,我在网上找不到任何有用的建议。我的源PostgreSQL数据库有非常复杂的模式。
你只需要从你的db文件中手动删除除了表创建之外的所有内容
更多详情-here

hjzp0vay

hjzp0vay8#

对我来说,使用tap gem很容易,如下所述:http://railscasts.com/episodes/342-migrating-to-postgresql
我已经开始在我的Mac上使用Postgres.app(不需要安装,将应用程序放在你的应用程序目录中,尽管可能需要像文档中所描述的那样在你的PATH环境变量中添加一行),使用 Induction.app作为一个GUI工具来查看/查询数据库。

相关问题