bitrix-postgresql について
bitrix-postgresql は、Bitrix 環境の MySQL から PostgreSQL への移行を評価・実施するための開発スキルです。移行前の確認、モジュールの対応状況、データベース間で使えるコードの作成方法を扱います。
主な機能
- 01PostgreSQL 移行要件の確認
- 02非対応モジュールの特定
- 03移行ウィザードの利用
- 04DBMS 互換コードの作成
- 05複数 DBMS 向けテーブル定義
活用シーン
- 01本番環境の複製で移行を検証
- 02DB 切り替え前にモジュールを監査
- 03独自 SQL を PostgreSQL 向けに修正
- 04MySQL と 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がある場合は警告のみを表示し、コピー後に移行先 DB の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 のモジュールについては、ベンダーに確認してください。
移植可能なコード
- MySQL 構文ではなく ORM、
SqlHelper関数、SqlExpressionプレースホルダーを使用してください。バッククォート、ENGINE=、UNSIGNED、ON DUPLICATE KEY(prepareMerge*を使用)、GROUP_CONCAT、IFNULLは使用しないでください。 - モジュールスキーマ:main 26.600* 以降は、両方の DBMS で共通の DB 非依存な
install/migrations/tables.phpを使用します(bitrix-modules)。それより古いカーネルでは、install/db/mysql/とinstall/db/pgsql/の両方にスクリプトが必要です。 - カラムには
timestampではなくdatetimeを使用します。PostgreSQL ではインデックス名はスキーマ全体で一意であるため、テーブル名をインデックス名の先頭に付けてください。移行レイヤーでは長い名前を正規化し、ハッシュ化します(main 26.800)。 - 複数行の挿入後に
getInsertedId()を呼び出すと、最後の ID が返されます(MySQL では最初の ID)。 - サーバーでは
standard_conforming_strings = onに設定してください(main 26.800 以降、サイトチェッカーがこの設定を検査します)。
チェックリスト
- インストール済みのすべてのモジュールがサポート対象であるか、ウィザードの実行前にアンインストールされている。
-
/local/modulesと Marketplace モジュールについて、生の MySQL SQL とインストールスクリプトを監査済みである。 - カスタムテーブルが
install/migrations/tables.php(26.600+)または DBMS ごとの SQL ファイルで定義されている。 - コピーで移行をリハーサルし、テスト後にのみクーポンを有効化した。
コメント
Markdown 対応