2 个不稳定版本
0.2.0 | 2023年11月21日 |
---|---|
0.1.0 | 2023年11月15日 |
1449 在 数据库接口
24KB
554 行
pgdump2sqlite
使用 pg_dump 创建 sqlite 数据库
目标是直接使用备份文件。其他解决方案也可以使用,但您需要从语句中删除类似 public.table_name
的模式。
用法
pdump2sqlite pg_dump_file.<tar or sql> extracted_db.sqlite
Usage: pgdump2sqlite [OPTIONS] <PGDUMP_FILENAME> <SQLITE_FILENAME>
Arguments:
<PGDUMP_FILENAME> the file of the dump. can be .sql or .tar
<SQLITE_FILENAME>
Options:
-f delete the dst sqlite file if exists
-h, --help Print help
基准测试
对我来说,使用一个16MB的tar备份文件,包含39个表和约500K行,耗时0.4秒。可以说相当快
方法
- 使用 pest 解析器 获取语句
- 创建所有表
- 使用准备好的插入语句,每个表一个事务(为了速度)从tar或sql文件中插入数据
支持
create table
指令复制..从<stdin 或路径>
- sqlite 中的整数、文本、布尔、实数数据类型
- 纯文本 (
.sql
) 或 tar 备份
待办事项
检查 // TODO:
注释
- 支持
insert into
语句(尽管这不是默认行为,并且占用更多空间,不要这样做) - 使用缓冲区通过 pest 解析。参见 pest:支持流输入
- 懒惰地获取复制的行,不要读取整个文件,而是使用生成器(类似于 Python)返回每一行(我不知道如何这样做)
- 将
f
和t
值映射到布尔数据类型中的0
和1
- 支持
directory
、压缩 tar 和custom
备份类型 - 为测试提供测试数据(我只有本地数据,但不能上传)
受 scala 版本 postgresql-to-sqlite 的启发
依赖关系
27–37MB
~611K SLoC