Token导航 LogoToken导航

Agent Skill · 效率

mysql2postgres(mysql2postgres 数据库)

用于辅助数据库表结构、查询语句、迁移脚本和数据维护任务。它适合让 Agent 分析 schema、编写 SQL、排查查询问题、整理索引或生成迁移建议。使用时需要明确数据库类型、连接环境和目标表,区分只读分析与写入变更;涉及删除、更新、迁移和批量导入时,应优先 dry-run、备份或事务保护,避免误操作。

mysql2postgres 是效率类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为权限未标注;许可证为 MIT-0,第三方扫描已通过,按安装量在效率类的 21,003 个 Skill 里排第 9,906。

总安装 5,587周安装 240GitHub Stars 公开资料未说明下载 1,958核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.1

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:mysql2postgres(mysql2postgres 数据库)
来源仓库:https://github.com/lawrencehe/mysql2postgres
安装命令:
openclaw skills install mysql2postgres
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install mysql2postgres

这个 Skill 是做什么的

效率类 Skill 把重复的整理、汇总、转换工作交给助手完成,减少手工复制粘贴。

mysql2postgres 协助将项目数据库从 MySQL 迁移至 PostgreSQL。涵盖 SQL 方言转换、ORM 配置与数据类型映射。适用于架构升级或多数据库兼容改造场景。mysql2postgres 属于效率类 Skill,可作为该场景下的辅助能力补充。迁移前务必备份源数据并验证目标环境兼容性。

建议分阶段实施,优先处理核心表与外键关系。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install mysql2postgres;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    权限没有明确标注,第一次使用时只给一个无关紧要的任务,观察它到底读了哪些文件和网络。

常见问题

6 条

mysql2postgres 怎么安装?

在终端执行 openclaw skills install mysql2postgres。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

mysql2postgres 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

mysql2postgres 需要什么权限?

权限级别没有明确标注。第一次使用时建议只给无关紧要的任务,观察它实际读写了哪些内容。

mysql2postgres 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

mysql2postgres 用的人多吗?

公开数据是累计安装 5,587 次,近一周安装 240 次,下载 1,958 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

mysql2postgres 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理效率类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

效率类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
github

GitHub 代码协作 · OpenClaw

7,632,918545需要联网MIT-0通过
nano-pdf

Nano PDF 文档 · OpenClaw

4,249,476231需要联网MIT-0通过
auto-updater

自动更新程序 · OpenClaw

2,964,063386操作浏览器MIT-0通过
video-frames

视频帧 · OpenClaw

2,621,304112需要联网MIT-0通过
gemini

Gemini 助手 · OpenClaw

2,547,39648需要联网MIT-0有提醒
mysql2postgres

mysql2postgres 数据库 · 本页

5,587—权限未标注MIT-0通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
mysql2postgres
description
>
compatibility
Java / Spring Boot / MyBatis / MyBatis-Plus projects

MySQL → PostgreSQL 迁移 Skill

概览

本 Skill 总结了将 Java(Spring Boot + MyBatis/MyBatis-Plus)项目从 MySQL 迁移到 PostgreSQL 的完整经验,涵盖五类核心改动,以及各类运行时报错的根因与修复方法。


一、JDBC 连接配置

application.yaml 改动

# MySQL(原)
spring.datasource.url: jdbc:mysql://host/dbname
validation-query: SELECT 1 FROM DUAL

# PostgreSQL(改后)
spring.datasource.url: jdbc:postgresql://host/dbname?currentSchema=your_schema
validation-query: SELECT 1

关键点:

  • currentSchema=your_schema 指定默认 schema,避免每条 SQL 都加 schema 前缀
  • SELECT 1 FROM DUAL 是 MySQL/Oracle 方言,PG 直接用 SELECT 1

二、SQL 方言转换速查表(MyBatis XML)

类别MySQL 写法PostgreSQL 写法备注
空值处理IFNULL(a, b)COALESCE(a, b)标准 SQL,推荐
日期格式化DATE_FORMAT(d, fmt)TO_CHAR(d, fmt)格式符略有差异
日期加减DATE_ADD(d, INTERVAL 1 DAY)d + INTERVAL '1 day'PG 用运算符
当前日期CURDATE()CURRENT_DATE
当前时间NOW()CURRENT_TIMESTAMPPG 也支持 NOW(),可保留
类型转换-时间CAST(x AS DATETIME)CAST(x AS TIMESTAMP)PG 无 DATETIME 类型
类型转换-日期DATE(x)CAST(x AS DATE)
Upsert-忽略INSERT IGNORE INTOINSERT INTO ... ON CONFLICT DO NOTHING
Upsert-更新INSERT ... ON DUPLICATE KEY UPDATEINSERT INTO ... ON CONFLICT (col) DO UPDATE SET ...
多表更新UPDATE t1 INNER JOIN t2 ON ... SET t1.col=...UPDATE t1 SET col=... FROM t2 WHERE ...见下方详解

UPDATE JOIN → UPDATE FROM 详解

-- MySQL
UPDATE orders o
INNER JOIN users u ON o.user_id = u.id
SET o.name = u.name
WHERE o.status = 1;

-- PostgreSQL
UPDATE orders o
SET name = u.name
FROM users u
WHERE o.user_id = u.id
  AND o.status = 1;
规律: PG 把 JOIN 的表放到 FROM 子句,WHERE 里写关联条件。

三、数据类型陷阱

BIT(1) 类型与逻辑删除

MySQL 的 bit(1) 迁移到 PG 后仍是 BIT / BIT(1) 类型,但 PG 严格禁止 BIT 与整数直接比较。

报错:

operator does not exist: bit = integer

两处修复:

① MyBatis-Plus 逻辑删除配置(application.yaml):

# 原(MySQL 兼容)
mybatis-plus.global-config.db-config.logic-delete-value: 1
mybatis-plus.global-config.db-config.logic-not-delete-value: 0

# 改后(PG BIT literal)
mybatis-plus.global-config.db-config.logic-delete-value: "B'1'"
mybatis-plus.global-config.db-config.logic-not-delete-value: "B'0'"

② XML 手写 SQL 中的 deleted 字段:

-- MySQL / 错误写法
WHERE deleted = 0
WHERE deleted = 1

-- PostgreSQL 正确写法
WHERE deleted = B'0'
WHERE deleted = B'1'
⚠️ 注意: MyBatis-Plus 自动生成的 deleted=0 和 XML 里手写的都要改,两处独立,不要遗漏。建议用全局搜索:deleted = 0 / deleted = 1,统计 XML 文件中所有出现位置后批量替换。

四、自增主键 / Sequence

MySQL 的 AUTO_INCREMENT 在 PG 中对应 SEQUENCE。

MyBatis-Plus @KeySequence

// Java DO 类上标注
@KeySequence("demo_entity_seq")
public class DemoEntityDO { ... }

运行时 MyBatis-Plus 会执行:

SELECT nextval('demo_entity_seq')

常见报错:

ERROR: relation "demo_entity_seq" does not exist

修复:在对应 schema 下创建 Sequence:

-- 对齐现有数据的最大 ID,避免主键冲突
CREATE SEQUENCE your_schema.demo_entity_seq
  START WITH 10001      -- 从当前最大 id + 1 开始
  INCREMENT BY 1
  NO MINVALUE
  NO MAXVALUE
  CACHE 1;
最佳实践: 迁移数据后,用 SELECT MAX(id) FROM table 确认最大 ID,再设置 Sequence 的起始值。

五、GROUP BY 严格模式

PG 严格遵循 SQL 标准:SELECT 中所有非聚合列必须出现在 GROUP BY 中。MySQL 可通过 sql_mode 去掉 ONLY_FULL_GROUP_BY 来绕过,但 PG 没有对应的宽容模式。

报错:

ERROR: column "d.flag_col" must appear in the GROUP BY clause
or be used in an aggregate function

修复策略:

情况解决方案
列的值在组内唯一(由业务保证)加入 GROUP BY
列是枚举/状态值,取任意值均可MAX(col) 或 MIN(col)
列是标志位,有任意一行满足即为真BOOL_OR(col) 或 MAX(col)
-- 原 MySQL 写法(SELECT 了非聚合列)
SELECT o.id, d.flag_col, d.status_col,
       MIN(d.amount_col) as amount_col
FROM demo_order o
LEFT JOIN demo_order_detail d ON o.id = d.order_id
GROUP BY o.id;

-- PG 修复写法
SELECT o.id,
       MAX(d.flag_col) as flag_col,      -- 取最大值
       MAX(d.status_col) as status_col,  -- 有任意在售即为在售
       MIN(d.amount_col) as amount_col
FROM demo_order o
LEFT JOIN demo_order_detail d ON o.id = d.order_id
GROUP BY o.id;

六、包名 / Namespace 重构(MyBatis)

迁移时建议将 MyBatis 的包路径和 namespace 从 dal.mysql 改为 dal.pg,保持语义清晰。

涉及的修改点:

  1. src/main/java 下的目录:dal/mysql/ → dal/pg/
  2. XML 文件中的 namespace:dal.mysql.XxxMapper → dal.pg.XxxMapper
  3. Java 文件中的 import 语句
  4. application.yaml 中的日志监控包名配置

七、迁移检查清单

[ ] JDBC URL 改为 PG 格式,指定 currentSchema
[ ] validation-query 去掉 FROM DUAL
[ ] IFNULL → COALESCE(全局搜索替换)
[ ] DATE_FORMAT → TO_CHAR
[ ] DATE_ADD(...INTERVAL) → date + INTERVAL '...'
[ ] CURDATE() → CURRENT_DATE
[ ] CAST(x AS DATETIME) → CAST(x AS TIMESTAMP)
[ ] DATE(x) → CAST(x AS DATE)
[ ] INSERT IGNORE → INSERT ... ON CONFLICT DO NOTHING
[ ] UPDATE ... JOIN → UPDATE ... FROM ... WHERE
[ ] deleted = 0/1 → deleted = B'0'/B'1'(XML 手写 SQL)
[ ] MyBatis-Plus logic-delete-value 改为 B'1' / B'0'
[ ] 为每个 @KeySequence 在 PG 中创建对应 SEQUENCE
[ ] 确认所有 SEQUENCE 起始值 > 表中当前最大 ID
[ ] 检查 GROUP BY:SELECT 中非聚合列必须在 GROUP BY 或用聚合函数包裹
[ ] 包名 / namespace 从 dal.mysql 改为 dal.pg(可选)

八、常见运行时报错速查

报错关键词根因修复
operator does not exist: bit = integerBIT 列与整数比较改为 B'0' / B'1'
relation "xxx_seq" does not existSequence 未创建在对应 schema 建 Sequence
must appear in the GROUP BY clauseSELECT 非聚合列未在 GROUP BY加入 GROUP BY 或用聚合函数
SELECT 1 FROM DUAL 报错DUAL 是 Oracle/MySQL 方言改为 SELECT 1
function ifnull does not existIFNULL 是 MySQL 方言改为 COALESCE
function date_format does not existDATE_FORMAT 是 MySQL 方言改为 TO_CHAR

平台分布

OpenClaw

75.03%
按下载量换算1,469

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

权限未标注

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills