mcpField
B
bitrix-postgresql

bitrix-postgresql

github.com/bxmaximum数据与数据库47267 次安装2 周前更新
代码仓库

关于 bitrix-postgresql

bitrix-postgresql 是用于评估并将 Bitrix 从 MySQL 迁移到 PostgreSQL 的开发技能,涵盖迁移检查、模块支持限制和跨数据库编码实践。

主要功能

  1. 01检查 PostgreSQL 迁移前提
  2. 02识别不受支持的模块
  3. 03使用迁移向导
  4. 04编写跨数据库代码
  5. 05定义跨数据库表结构

适用场景

  1. 01在生产副本上演练迁移
  2. 02切换数据库前审查模块
  3. 03调整自定义 SQL 以适配 PostgreSQL
  4. 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 中相同。

迁移前

  1. 当前许可证必须覆盖测试期(最长 6 个月)和切换。Postgres 许可证会提供一个优惠券(测试后激活)和一个独立测试副本的密钥;与此同时,生产环境仍使用 MySQL。
  2. perfmon 24.0.0+、站点使用 UTF-8,测试副本已安装最新更新。
  3. 在生产环境副本上进行演练;之后若要切回 MySQL,需要手动操作。
  4. 最终复制期间关闭站点。

向导 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