#dump #sqlite #postgresql

bin+lib pgdump2sqlite

使用 pgdump 创建 sqlite 数据库

2 个不稳定版本

0.2.0 2023年11月21日
0.1.0 2023年11月15日

1449数据库接口

MIT/Apache

24KB
554

pgdump2sqlite

crates.io

使用 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秒。可以说相当快

方法

  1. 使用 pest 解析器 获取语句
  2. 创建所有表
  3. 使用准备好的插入语句,每个表一个事务(为了速度)从tar或sql文件中插入数据

支持

  • create table 指令
  • 复制..<stdin 或路径>
  • sqlite 中的整数、文本、布尔、实数数据类型
  • 纯文本 (.sql) 或 tar 备份

待办事项

检查 // TODO: 注释

  • 支持 insert into 语句(尽管这不是默认行为,并且占用更多空间,不要这样做)
  • 使用缓冲区通过 pest 解析。参见 pest:支持流输入
  • 懒惰地获取复制的行,不要读取整个文件,而是使用生成器(类似于 Python)返回每一行(我不知道如何这样做)
  • ft 值映射到布尔数据类型中的 01
  • 支持 directory、压缩 tar 和 custom 备份类型
  • 为测试提供测试数据(我只有本地数据,但不能上传)

受 scala 版本 postgresql-to-sqlite 的启发

依赖关系

27–37MB
~611K SLoC