Référence
Configuration
Drivers Base de Données

Drivers Base de Données Guide d'installation et configuration des drivers de base de données.

Vue d'Ensemble CSWeb Community Platform supporte 3 drivers PDO pour la flexibilité multi-SGBD :

DriverSGBDUsageStatus
pdo_mysqlMySQL/MariaDBMetadata (obligatoire) + Breakout (optionnel)Pré-installé
pdo_pgsqlPostgreSQLBreakout uniquementPré-installé
pdo_sqlsrvSQL ServerBreakout uniquementPré-installé

Vérification

Commande CLI

docker compose exec csweb php bin/console csweb:check-database-drivers

Output attendu :

 pdo_mysql : Available pdo_pgsql : Available pdo_sqlsrv : Available

Via PHP

docker compose exec csweb php -m | grep pdo

Output attendu :

pdo_mysql
pdo_pgsql
pdo_sqlsrv
PDO

pdo_mysql

Description Driver pour MySQL et MariaDB.

Utilisé pour :

  • Base MySQL metadata (obligatoire)
  • Base MySQL breakout (optionnel si BREAKOUT_DB_TYPE=mysql)

Installation (si manquant)

# Ubuntu/Debian
apt-get update
apt-get install -y php8.1-mysql
 
# Vérifier
php -m | grep pdo_mysql

Configuration

php.ini :

extension=pdo_mysql

Variables .env :

# MySQL Metadata
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_USER=csweb_user
MYSQL_PASSWORD=***
 
# MySQL Breakout (si utilisé)
MYSQL_BREAKOUT_HOST=mysql-breakout
MYSQL_BREAKOUT_PORT=3307
MYSQL_BREAKOUT_USER=breakout_user

Test Connexion

# Metadata
docker compose exec mysql mysql -u csweb_user -p csweb_metadata
 
# Breakout (si MySQL)
docker compose exec mysql-breakout mysql -u breakout_user -p csweb_breakout

pdo_pgsql

Description Driver pour PostgreSQL.

Utilisé pour :

  • Base PostgreSQL breakout (si BREAKOUT_DB_TYPE=postgresql)

Installation (si manquant)

# Ubuntu/Debian
apt-get update
apt-get install -y php8.1-pgsql
 
# Alpine Linux (Docker)
apk add php81-pgsql
 
# Vérifier
php -m | grep pdo_pgsql

Configuration

php.ini :

extension=pdo_pgsql

Variables .env :

BREAKOUT_DB_TYPE=postgresql POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DATABASE=csweb_analytics
POSTGRES_USER=csweb_analytics
POSTGRES_PASSWORD=***

Test Connexion

docker compose exec postgres psql \
 -U csweb_analytics \
 -d csweb_analytics

pdo_sqlsrv

Description Driver pour Microsoft SQL Server.

Utilisé pour :

  • Base SQL Server breakout (si BREAKOUT_DB_TYPE=sqlserver)

Installation (Linux)

Étape 1 : Microsoft ODBC Driver 18

# Ajouter repository Microsoft
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list \
 > /etc/apt/sources.list.d/mssql-release.list
 
# Installer ODBC Driver
apt-get update
ACCEPT_EULA=Y apt-get install -y msodbcsql18

Étape 2 : Extension PHP

# Installer via PECL
pecl install sqlsrv pdo_sqlsrv
 
# Activer extension
echo "extension=pdo_sqlsrv.so" > /etc/php/8.1/cli/conf.d/30-pdo_sqlsrv.ini
echo "extension=pdo_sqlsrv.so" > /etc/php/8.1/fpm/conf.d/30-pdo_sqlsrv.ini
 
# Redémarrer PHP-FPM
service php8.1-fpm restart

Vérification :

php -m | grep sqlsrv
# pdo_sqlsrv
# sqlsrv

Configuration

Variables .env :

BREAKOUT_DB_TYPE=sqlserver SQLSERVER_HOST=sqlserver
SQLSERVER_PORT=1433
SQLSERVER_DATABASE=CSWeb_Analytics
SQLSERVER_USER=sa
SQLSERVER_PASSWORD=YourStrong!Passw0rd

Test Connexion

docker compose exec sqlserver /opt/mssql-tools/bin/sqlcmd \
 -S localhost \
 -U sa \
 -P YourStrong!Passw0rd

Dockerfile

Configuration Pré-installée Le Dockerfile de CSWeb Community Platform pré-installe tous les drivers :

FROM php:8.1-apache
 
# Extensions PHP de base
RUN apt-get update && apt-get install -y \
 libpq-dev \
 libzip-dev \
 unzip \
 git
 
# pdo_mysql
RUN docker-php-ext-install pdo pdo_mysql mysqli
 
# pdo_pgsql
RUN docker-php-ext-install pdo_pgsql pgsql
 
# pdo_sqlsrv (Microsoft)
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
 curl https://packages.microsoft.com/config/debian/11/prod.list \
 > /etc/apt/sources.list.d/mssql-release.list && \
 apt-get update && \
 ACCEPT_EULA=Y apt-get install -y msodbcsql18 && \
 pecl install sqlsrv pdo_sqlsrv && \
 docker-php-ext-enable pdo_sqlsrv sqlsrv
 
# Autres extensions
RUN docker-php-ext-install zip opcache

Correspondance Driver SGBD

Driver PHPExtension RequiseSGBD SupportésPort Défaut
pdo_mysqlphp-mysqlMySQL 5.7+, MariaDB 10.3+3306
pdo_pgsqlphp-pgsqlPostgreSQL 12+5432
pdo_sqlsrvphp-sqlsrv + ODBC Driver 18SQL Server 2017+1433

Versions Compatibles

MySQL / MariaDB

Versionpdo_mysqlStatus
MySQL 5.7Compatible
MySQL 8.0Recommandé
MySQL 8.1+Compatible
MariaDB 10.3Compatible
MariaDB 10.6+Recommandé

PostgreSQL

Versionpdo_pgsqlStatus
PostgreSQL 12Compatible
PostgreSQL 13Compatible
PostgreSQL 14Compatible
PostgreSQL 15Compatible
PostgreSQL 16Recommandé

SQL Server

Versionpdo_sqlsrvODBC DriverStatus
SQL Server 201718Compatible
SQL Server 201918Recommandé
SQL Server 202218Compatible
Azure SQL18Compatible

Troubleshooting

Driver Not Found

Symptôme :

 pdo_pgsql : NOT FOUND

Solutions :

  1. Vérifier installation :
php -m | grep pdo_pgsql
  1. Réinstaller extension :
apt-get install --reinstall php8.1-pgsql
service php8.1-fpm restart
  1. Vérifier php.ini :
php --ini
# Configuration File: /etc/php/8.1/cli/php.ini grep pdo_pgsql /etc/php/8.1/cli/php.ini

Extension Loaded but Not Working

Symptôme :

php -m | grep pdo_pgsql
# pdo_pgsql

# Mais commande CSWeb dit:
 pdo_pgsql : NOT FOUND

Cause : Extension installée pour CLI mais pas FPM.

Solution :

# Copier config CLI FPM
cp /etc/php/8.1/cli/conf.d/20-pdo_pgsql.ini \
 /etc/php/8.1/fpm/conf.d/
 
# Redémarrer FPM
service php8.1-fpm restart
docker compose restart csweb

SQL Server Driver Installation Fails

Symptôme :

ERROR: Microsoft ODBC Driver 18 for SQL Server not found

Solutions :

  1. Vérifier ODBC installé :
odbcinst -q -d
# [ODBC Driver 18 for SQL Server]
  1. Réinstaller ODBC :
apt-get remove --purge msodbcsql18
ACCEPT_EULA=Y apt-get install -y msodbcsql18
  1. Vérifier architecture :
uname -m
# x86_64 (supporté)
# aarch64 (ARM, pas supporté par Microsoft)

Note : SQL Server drivers non disponibles sur ARM (Apple M1/M2).

Wrong PHP Version

Symptôme :

PHP Warning: Module 'pdo_pgsql' already loaded

Cause : Plusieurs versions PHP installées.

Solution :

# Vérifier version active
php -v
 
# Lister versions installées
ls /etc/php/
 
# Utiliser version spécifique
/usr/bin/php8.1 -m | grep pdo

Performance

Optimisations php.ini

; MySQL
mysqlnd.net_read_timeout = 31536000
mysql.connect_timeout = 10
 
; PostgreSQL
pgsql.max_persistent = 25
pgsql.max_links = 25
 
; PDO
pdo.attr_errmode = PDO::ERRMODE_EXCEPTION
pdo.attr_default_fetch_mode = PDO::FETCH_ASSOC

Connection Pooling

PgBouncer (PostgreSQL) :

# docker-compose.yml
services:
 pgbouncer:
 image: pgbouncer/pgbouncer environment:
 - DATABASES_HOST=postgres
 - DATABASES_PORT=5432
 - DATABASES_USER=csweb_analytics

Ressources


CSWeb Community Platform v2.0 - Database Drivers