关于 bitrix-postgresql
bitrix-postgresql 是用于评估并将 Bitrix 从 MySQL 迁移到 PostgreSQL 的开发技能,涵盖迁移检查、模块支持限制和跨数据库编码实践。
主要功能
- 01检查 PostgreSQL 迁移前提
- 02识别不受支持的模块
- 03使用迁移向导
- 04编写跨数据库代码
- 05定义跨数据库表结构
适用场景
- 01在生产副本上演练迁移
- 02切换数据库前审查模块
- 03调整自定义 SQL 以适配 PostgreSQL
- 04规划兼容 MySQL 与 PostgreSQL 的表结构
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ bxmaximum/ bitrix-framework-skills --skill bitrix-postgresql安装后在 Claude Code 中输入/bitrix-postgresql确认已加载。
详细介绍
PostgreSQL
基线:main 23.900.900+(首个支持 PostgreSQL 的 main)· 已验证:main 26.800.0、perfmon 25.300.0
许可为 Bitrix24 / CMS“Enterprise for Postgres”。连接类为 \Bitrix\Main\DB\PgsqlConnection;其余 connections 与 bitrix-database 中相同。
迁移前
- 当前许可证必须覆盖测试期(最长 6 个月)和切换。Postgres 许可证会提供一个优惠券(测试后激活)和一个独立测试副本的密钥;与此同时,生产环境仍使用 MySQL。
perfmon24.0.0+、站点使用 UTF-8,测试副本已安装最新更新。- 在生产环境副本上进行演练;之后若要切回 MySQL,需要手动操作。
- 最终复制期间关闭站点。
向导 perfmon.pgsql(设置 → 向导)
- 步骤 0 会列出已安装但包含
install/mysql(或install/db/mysql)、没有对应pgsql文件的模块,并且会阻止继续,直到卸载这些模块。使用开发标记文件bitrix/modules/perfmon/dev时,它只会发出警告,并在复制后从目标数据库的b_module中移除这些模块(其表会保留)。 - 它只会检查
/bitrix/modules/*。不会检查/local/modules和没有 SQL 安装文件(install/migrations)的模块:请自行审查。 - 它会要求在
.settings.php中添加一个额外的default_pgsql连接,复制表,然后切换default。 - 手动(CLI)迁移:使用以下命令查找不受支持的模块
for m in bitrix/modules/*/; do
for d in install install/db; do
[ -d "$m$d/mysql" ] && [ ! -d "$m$d/pgsql" ] && echo "no pgsql: $m$d"
done
done
模块支持情况(文档,main 26.800)
- 不受支持:abtest、advertising、b24connector、bitrix.sitecorporate、conversion、form、meeting、photogallery、report、statistic、storeassist、support、translate、webservice、wiki。因此,
translate:index不可用。 - abtest 和 report 提供了 pgsql 脚本,但仍不受支持:有脚本 ≠ 受支持。
- 最近新增:anonymizer 26.100、superset 26.200、note 26.250、biconnector 26.800。Bitrix24 PG 发行版不包含 vibecodeconnector 和 workflow。
- Marketplace 模块:请向供应商确认。
可移植代码
- 使用 ORM、
SqlHelper函数和SqlExpression占位符,而不是 MySQL 语法:不使用反引号、ENGINE=、UNSIGNED、ON DUPLICATE KEY(改用prepareMerge*)、GROUP_CONCAT、IFNULL。 - 模块架构:从 main 26.600* 开始,两个 DBMS 共用一个与数据库无关的
install/migrations/tables.php(bitrix-modules);较旧的内核需要成对的install/db/mysql/和install/db/pgsql/脚本。 - 列:使用
datetime,而不是timestamp。PostgreSQL 中索引名称的作用域是整个架构:请在名称前加上表名。迁移层会规范化并哈希较长的名称(main 26.800)。 - 多行插入后调用
getInsertedId()会返回最后一个 ID(MySQL 返回第一个)。 - 服务器:
standard_conforming_strings = on(从 main 26.800 起,站点检查器会检查此项)。
检查清单
- 每个已安装模块都受支持,或在运行向导前已卸载。
- 已审查
/local/modules和 Marketplace 模块中的原始 MySQL SQL 语句及安装脚本。 - 自定义表通过
install/migrations/tables.php(26.600+)或成对的 SQL 文件描述。 - 已在副本上演练迁移;仅在测试后激活优惠券。
评论
支持 Markdown