PostgreSQL in Bitrix
Baseline: main 23.0+. Supported in Enterprise for PostgreSQL licenses (B24 and CMS). Connection class: \Bitrix\Main\DB\PgsqlConnection.
Configuration
'connections' => [
'value' => [
'default' => [
'className' => \Bitrix\Main\DB\PgsqlConnection::class,
'host' => 'localhost',
'database' => 'bx',
'login' => 'bx',
'password' => '***',
'options' => \Bitrix\Main\DB\Connection::DEFERRED,
],
],
'readonly' => true,
],
Before Migration
- Check that the current license stays valid through the whole test period (up to 6 months) and the final switch — renew it first if it expires earlier.
- Obtain Enterprise for PostgreSQL license. It provides a coupon (activate it only after migration testing) and a test key for a separate test install; testing window is max 6 months from purchase. During testing the production site keeps running on MySQL under the current license — the test key is for the test environment only.
- Update Performance Monitor module to 24.0.0+.
- Project must use UTF-8 encoding.
- Close site to visitors during migration.
- Test on staging first — return to MySQL after production PostgreSQL launch requires manual work.
Module Compatibility
Not all kernel and marketplace modules support PostgreSQL. Incompatible modules are disabled during conversion wizard.
Check custom code:
- MySQL-specific SQL (
LIMITsyntax differences handled by SqlHelper, but raw SQL may break). - MySQL install scripts under
install/mysql/orinstall/db/mysql/need matching PostgreSQL scripts underinstall/pgsql/orinstall/db/pgsql/.
Find modules missing pgsql install:
for mysql in bitrix/modules/*/install/mysql/install.sql bitrix/modules/*/install/db/mysql/install.sql; do
pgsql=$(echo $mysql | sed 's#/mysql/#/pgsql/#')
test -e $pgsql || echo "missing: $pgsql"
done
Check kernel module install folders: each supporting module should have matching install/pgsql/ or install/db/pgsql/ scripts. Inspect bitrix/modules/<module>/install/ in the project.
Migration Methods
- Wizard — Admin conversion tool (lists disabled modules on step 1).
- CLI — manual server-side migration via Performance Monitor module tools.
Writing Compatible Code
- Use ORM and
SqlHelper— avoid MySQL-specific functions in raw SQL. - Use
SqlExpressionplaceholders instead of string concatenation. - Test DDL in both MySQL (
install/mysql/orinstall/db/mysql/) and PostgreSQL (install/pgsql/orinstall/db/pgsql/) if the module supports both. - Avoid
ENGINE=InnoDB, backticks-specific syntax,UNSIGNED.
Checklist
- License is Enterprise for PostgreSQL.
- All custom modules checked for pgsql install scripts.
- Raw SQL audited for MySQL-specific syntax.
- Migration tested on copy before production.
- Marketplace modules verified with vendors.