Skip to content
Advertisement

how to enable php pdo driver for Postgres on Ubuntu 18.04

I installed php 7.2 and php 7.3 on Ubuntu 18.04, and created a php file to log on to and insert data into the Postgres database. My script responded “could not find driver.”

Research turned up that I have to edit the php.ini files and enable the extensions for Postgres and PDO. Below are all the extension= lines in the php.ini files. The closest I could find are the pdo lines shown below.

extension=pdo_pgsql
extension=pgsql

So I edited the php.ini files and removed the semi-colons from each of those lines to enable them. Then I restarted Apache2:

sudo systemctl restart apache2

But I still get “could not find driver.”

This is the entire listing of extensions from the php.ini files. Which other extensions do I need to enable to allow PDO access to Postgres?

php.ini 7.3

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
;extension=pdo_sqlite
extension=pgsql
;extension=shmop

php.ini 7.2

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
;extension=pdo_sqlite
extension=pgsql
;extension=shmop

This is the php logon script (the logon credentials are replaced with dummy values here because I can’t reveal them):

<?php

$params = [
    'host' => '[IP Address]',
    'user' => '[username]',
    'pwd' => '[password]',
    'db' => '[dbname]'
];

$dsn = sprintf('pgsql:host=%s;dbname=%s;user=%s;password=%s',
    $params['host'],
    $params['db'],
    $params['user'],
    $params['pwd']);

try {
    $dsn = sprintf('pgsql:host=%s;dbname=%s;unix_socket=%s',
        $params['host'], $params['db'], $params['sock']);
    $opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
    $pdo = new PDO($dsn, $params['user'], $params['pwd'], $opts);
} catch (PDOException $e) {
    echo $e->getMessage();
} catch (Throwable $e) {
    echo $e->getMessage();
}

?>

Then I edited the two .ini files and added “.so” at the end of each of the two lines and restarted Apache2, but I still get the same error message.

Thanks for any ideas.

Advertisement

Answer

I think you’re missing the php-pgsql library, run the following commands and it should start working (keep the changes for the php.ini files):

sudo apt install php-pgsql
sudo service apache2 reload

I do not have Ubuntu which means the library names could be different.

Hope it helps

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement