PHP

UTILISER POSTGRESQL SOUS WINDOWS

D

Mardi 4 décembre 2018

Mis à jour le mardi 4 décembre 2018

Utiliser PostgreSQL sous Windows

Si vous êtes sous Windows et que vous souhaitez que votre application utilise une base de données PostgreSQL, par défaut, cela ne va pas fonctionner.
Vous aurez l'erreur :
An exception occurred in driver: could not find driver
Cette erreur vous informe que le driver pour PostgreSQL n'a pas été trouvé. Vous devez simplement l'activer ! Et pour l'activer, vous avez simplement à activer l'extension pdo_pgsql de PHP.

Activer l'extension pdo_pgsql de PHP

Éditez votre fichier php.ini. (Si vous avez installé PHP grâce à WAMP, alors votre php.ini se trouve dans C:\wamp64\bin\php\phpx.x.x. x.x.x étant la version de votre PHP. Si vous avez plusieurs versions de PHP d'installées, ouvrez une console de commande et tapez y php -v pour connaitre votre version de PHP)
Cherchez la ligne suivante dans votre php.ini :
;extension=pdo_pgsql
Et décommentez là en retirant le point virgule ; du début de la ligne, comme ceci : >extension=pdo_pgsql Sauvegardez, relancer votre serveur si il n'était pas arrêté, et l'erreur disparaît !

BONUS : Configuration de PostgreSQL sous Symfony 4

Dans le fichier config/doctrine.yml, remplacez :
doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'
Par :
doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_pgsql'
        charset: utf8

        url: '%env(resolve:DATABASE_URL)%'
Et configurer la partie Doctrine du fichier .env comme ceci :
DATABASE_URL=pgsql://mon_utilisateur:mon_mot_de_pass@127.0.0.1:5432/ma_base_de_donnees
Si vous n'avez pas changé les valeurs par défaut pour les login et mot de passe, ça sera ceux ci :
DATABASE_URL=pgsql://postgres:root@127.0.0.1:5432/ma_base_de_donnees
Puis créer la base de données en exécutant la commande :
php bin/console doctrine:database:create

Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire


Aurelie Le vendredi 3 mai 2019 à 12:49:12
Bonjour, super cette article. Mais ca fait plusieurs heures jours que je suis dessus et je n'arrive pas à aller au bout ...
J'ai activé les pilotes de php.ini
j'ai fait des copié coller pour le fichier doctrine, le fichier env ... Et au moment de créer la base j'ai ça :
In AbstractPostgreSQLDriver.php line 79:
An exception occurred in driver: could not find driver
In PDOConnection.php line 31:
could not find driver
In PDOConnection.php line 27:
could not find driver
Je suis avec windows 10 / wamp / symfony 4.2 / php 7.3.1
Merci beaucoup

David Le vendredi 3 mai 2019 à 15:58:11
Bonjour,
Qu'obtiens-tu lorsque tu exécute la commande "php -v" dans une console ?

Et quel est le chemin du fichier "php.ini" que tu as éditer ?

Anna Le mardi 18 juin 2019 à 10:06:23
Bonjour,

Merci pour votre support. Il est très clair, surtout lorsque l'on découvre postgres.

J'ai installé postgres 9.6, un symfony 4.2 avec un php 7.2.18. Je travailles sur un pc windows, qui utilise wamp. J'utilise bien en console le php de wamp. Donc j'ai activé les extensions pdo_pgsql et pgsql de ma version.

Cependant, malgré avoir suivi votre support, je conserve la même erreur.
Auriez-vous une idée de ce qui peut coincer ?

Merci pour vos conseils.

David Le mardi 18 juin 2019 à 10:49:17
Bonjour Anna,

As-tu bien redémarrer Wamp après avoir activé les extensions pdo_pgsql et pgsql ?
Quand tu lance la commande "php -v" dans une console, qu'obtiens-tu ?
Si tu n'obtiens pas la version "7.2.18", c'est que tu n'utilise pas celle de Wamp. Dans ce cas, je te conseille d'abord de regarder si ton "PATH" (dans tes variables d'environnements Windows) contient bien le chemin de l'exécutable PHP que tu souhaite utiliser.

Anna Le mardi 18 juin 2019 à 11:19:46
Bonjour,

Merci pour votre retour rapide.

Mon path est correct, et mon php --ini pointe bien sur mon path qui pointe bien sur le bon php. Wamp a été redémarrer une bonne douzaine de fois.
Mon pgadmin tourne bien, il est bien raccordé à mon postgre.

C'est uniquement symfony, lors de la commande "database:create" qui maintient cette erreur pour les drivers.

David Le mardi 18 juin 2019 à 12:24:29
Dans le fichier config/doctrine.yml, as-tu bien mis la configuration du driver sur "pgsql" ? Comme ceci :
doctrine:
dbal:
driver: 'pdo_pgsql'

Et ta variable d'environnement "DATABASE_URL" commence bien par "pgsql" ? Comme ceci :
DATABASE_URL=pgsql://postgres:root@127.0.0.1:5432/ma_base_de_donnees

Si oui aux deux questions, essais aussi de supprimer le cache de Symfony, sait-on jamais !

Anna Le mercredi 19 juin 2019 à 09:57:37
j'ai trouvé.

En fait, dans mon wamp, j'ai activé les extensions pdo_pgsql et pgsql. En ouvrant mon fichier php.ini via wamp, les extensions apparaissent comme activées.

Mais en fait, ce php.ini qu'il ouvre, en réalité, c'est le phpForApache.ini. Mon path lui pointait sur le php.ini dont ces extensions étaient toujours désactivés. En éditant à la main ce fichier là pour les activer, tout est rentre dans l'ordre.

Je pense que c'est une particularité de wamp d'avoir ces deux "php.ini".

David Le mercredi 19 juin 2019 à 17:29:47
Super.

Merci pour ton retour, ça en aidera surement plus d'un !

kki Le mercredi 26 juin 2019 à 13:12:05
Bonjour à tous,

Merci Anna, votre solution m'a bien dépannée. J'ai oublié d'activer les extensions "pdo_pgsql" , "php_pdo_pgsql.dll" du fichier "php.ini" sous le répertoire ( c:\wamp64\bin\php\php{version}\php.ini).
Conclusion, il faut activer les extensions concernés dans le deux fichiers "php.ini" .
Merci ;)

salah Le lundi 11 janvier 2021 à 22:00:56
Merci à David et Merci à Anna, un ans et un peu plus, ça m'a dépanné après une longue journée à rechercher