SuperAPI AI 工具集

bitrix-postgresql

数据与分析

查看项目

更新于 10-15 09:00

技能介绍

用途

本技能面向在 Bitrix 框架中使用 PostgreSQL 的场景,包括配置 PostgreSQL 连接、从 MySQL 迁移到 PostgreSQL,以及编写跨数据库兼容的 SQL 与模块数据库结构。

版本与授权

基线:main 23.900.900+(首个支持 PostgreSQL 的 main 版本)。已验证:main 26.800.0、perfmon 25.300.0。

授权方式为 Bitrix24 / CMS 的 "Enterprise for Postgres"。连接类为 \Bitrix\Main\DB\PgsqlConnection,其余连接方式与 bitrix-database 相同。

迁移前准备

  • 当前授权必须覆盖测试期(最长 6 个月)与切换过程。Postgres 授权会提供一张优惠券(测试后激活)以及用于单独测试副本的密钥;在此期间生产环境仍运行在 MySQL 上。
  • 要求 perfmon 24.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 连接,复制数据表后再切换默认连接。

手动(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 中索引名是模式(schema)范围内唯一的:需以表名作为前缀。迁移层会规范化并对长名称做哈希处理(main 26.800)。

多行插入后调用 getInsertedId() 返回的是最后一个 ID(MySQL 中返回第一个)。

服务器:standard_conforming_strings = on(自 main 26.800 起站点检查器会检测该项)。

检查清单

  • 每个已安装模块在运行向导前均已受支持或已卸载。
  • 已审计 /local/modules 与市场模块中的原生 MySQL SQL 及安装脚本。
  • 自定义表通过 install/migrations/tables.php(26.600+)或成对 SQL 文件描述。
  • 已在副本上演练迁移;优惠券仅在测试通过后激活。