ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

pgloader 完整上手:一条命令把 MySQL、SQLite 和 CSV 安全迁入 PostgreSQL

pgloader 完整上手:一条命令把 MySQL、SQLite 和 CSV 安全迁入 PostgreSQL pgloader 完整上手一条命令把 MySQL、SQLite 和 CSV 安全迁入 PostgreSQL【免费下载链接】pgloaderMigrate to PostgreSQL in a single command!项目地址: https://gitcode.com/gh_mirrors/pg/pgloaderpgloader 是一款专为 PostgreSQL 设计的数据迁移与导入工具能把 MySQL、SQL Server、SQLite 数据库和 CSV、DBF 等文件用一条命令搬进 PostgreSQL坏数据自动隔离迁移全程不中断。它适合 DBA、数据工程师以及需要自动化数据迁移的运维团队。先搞清楚它是什么把 pgloader 想象成搬家公司的分拣员。数据从门口进来分拣员一边搬一边拆检完好的箱子直接上架写入表破损的放进专用木箱reject 文件传送带从不停下。这正是它和 psql 自带 \copyPostgreSQL 客户端里的批量导入命令的本质区别。PostgreSQL 的事务是全有或全无\copy 导入时只要有一行格式不对整张表全部回滚。pgloader 把坏行单独记进台账好数据照常入库事后你再查账补数。它还会顺手做数据改写比如把 MySQL 里常见的0000-00-00脏日期自动转成 NULL——PostgreSQL 的日历里根本没有公元零年。对比项psql 的 \copypgloader遇到一行坏数据整批导入中止并回滚坏行进 reject 文件好数据继续跨数据库迁移不支持只能导文件直连 MySQL/SQL Server/SQLite 等类型与格式转换需事先清洗数据用 CAST 规则在线改写当前 v4 版是 Clojure 重写发布为单个 JAR 包机器上有 Java 21 就能跑v3 版仍在 Debian/Ubuntu 官方源中两者接受同一套 .load 语法。一句话要点pgloader 的核心卖点不是导得快而是一行坏数据毁不掉整场迁移。快速上手3 步跑通第一次迁移第 1 步安装。Debian/Ubuntu 用户直接走官方软件源sudo apt-get install pgloader pgloader --version第一条命令装上官方维护的版本第二条确认安装可用若要用 v4 版只需装 Java 21 再运行它发布的单一 JAR 包没有任何原生库依赖。第 2 步一条命令迁库。仓库自带一个 SQLite 演示库直接迁到本地 PostgreSQLcreatedb newdb pgloader ./test/sqlite/sqlite.db postgresql:///newdbpgloader 会连上 SQLite读出全部表结构表、主键、外键、索引在 newdb 里自动创建同样的结构再用 COPYPostgreSQL 的批量数据导入协议把数据流式写入——整个过程只敲两条命令。第 3 步验证结果。用psql -d newdb -c \dt列出新建的表再挑一张表SELECT count(*)与源库对一下行数一致即迁移成功。一句话要点pgloader 源 目标两个参数就是一条完整工作流无需先写配置。一个真实场景完整走通带脏行的 CSV 进销售表这是使用频率最高的姿势业务系统导出一份 sales.csv第一行是表头中间混着几行金额写成--的脏数据。目标是好数据全部入库脏行留档可查。输入一份带表头的 CSV少量行存在类型错误。操作写一个几行的迁移描述文件 sales.loadLOAD CSV FROM sales.csv INTO postgresql:///sales?tablesales WITH truncate, skip header 1, fields terminated by ,这份 .load 文件就是 pgloader 的指挥单读哪个文件、进哪张表、是否先清空旧数据truncate、跳过一行表头全部在这里声明。然后执行pgloader sales.load cat sales.rej.log第一条命令完成导入第二条查看 reject 日志。reject 文件是 pgloader 为每次导入生成的问题台账.rej 存被拒行的原始内容.rej.log 存错误原因。结果终端汇总会打印成功写入行数与被拒行数打开 .rej.log 能看到每个脏行原文和具体原因。拿这些问题让上游修数后重跑同一份 .load 文件即可——因为声明了 truncate重跑是幂等的这正是把迁移写成 .load 文件而非临时命令的价值所在。一句话要点reject 台账 可重跑的 .load 文件构成迁移—查账—补数的闭环。用好它的 3 个关键习惯先跑 --dry-run 再全量迁移。pgloader --dry-run只检查连接与表结构、不写入数据能在正式开跑前暴露绝大多数连接与权限问题。每次迁移后都翻一遍 reject 文件。行数要靠核对不靠感觉.rej/.rej.log 是唯一能告诉你少迁了什么的账本迁移报告里应包含被拒行数。把迁移固化成 .load 文件并纳入版本管理。连接串、CAST 转换规则、BEFORE/AFTER LOAD 里的手写 SQL 都写在同一份文件里新环境复现时一条命令即可不依赖某个人记得当时怎么敲的命令。一句话要点试跑、对账、留档这三步把运气换成了流程。遇到问题先看这里现象报invalid byte sequence for encoding UTF8。原因源文件是 latin1 等非 UTF8 编码与目标库不匹配。解法在 .load 文件的 WITH 段写SET client_encoding to latin1按源文件真实编码读取。现象迁移到第一行错误就整体中止。原因加了--on-error-stop或误用了 psql 的 \copy。解法pgloader 默认就是出错继续去掉该参数让坏行进 reject 文件、完成后统一补数。现象could not connect to server。原因地址端口不对、密码错误或目标库未对来源授权。解法用--dry-run先定位是连不上源还是连不上目标再查网络与目标库的访问控制配置。现象MySQL 的0000-00-00日期导致整列转换失败。原因PostgreSQL 没有公元零年直接 COPY 会拒绝该值。解法pgloader 默认已将其映射为 NULL若要其它取值在 CAST 段写一条自定义转换规则。一句话要点报错多落在编码、连接、坏行三类上先归类再动手。下一步从仓库 test/ 目录的 SQLite 演示库开始走通一次完整迁移再把你的真实数据源替换进同一份 .load 文件。更细的语法参考 docs/quickstart.rst各种快速上手姿势与 docs/intro.rst各数据源能力矩阵它们都在仓库内随手可查。【免费下载链接】pgloaderMigrate to PostgreSQL in a single command!项目地址: https://gitcode.com/gh_mirrors/pg/pgloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表