oracle_fdw
¶
L’extension communautaire oracle_fdw
fournit les composants nécessaires pour
établir facilement une connexion vers une base Oracle depuis une base PostgreSQL. Elle supporte une variété d’optimisations
(pushdown) ainsi que la possibilité de récupérer le plan d’exécution avec l’instruction EXPLAIN
.
Attention
À cause des changements d’API dans les versions mineures de PostgreSQL, les versions suivantes ne peuvent pas être utilisées avec cette extension :
- 9.6.0 to 9.6.8
- 10.0 to 10.3
- 11.0 to 11.10
- 12.0 to 12.5
- 13.0 to 13.9
- 14.0 to 14.6
- 15.0 to 15.1
Source : https://github.com/laurenz/oracle_fdw?tab=readme-ov-file#5-installation-requirements
Prérequis¶
L’extension nécessite la bibliothèque propriétaire Oracle Instant Client pour garantir les échanges entre PostgreSQL et Oracle à travers le protocole Oracle Net.
Les outils et bibliothèques Oracle Instant Client sont disponibles au format .zip
ou .rpm
depuis la
page de téléchargement https://www.oracle.com/database/technologies/instant-client/downloads.html.
Selon le système d’exploitation et sa version de la glibc
, il est nécessaire d’étudier la méthode d’installation
la plus appropriée entre les deux formats.
Les matrices suivantes reprennent les compatibilité entre les versions du Client Oracle et les versions du Serveur Oracle.


Légende
Yes
: Supported.ES
: Supported but fixes only possible for customers with Extended Support.MDS
: Supported, but fixes only possible for customers with a valid Market-Driven Support contract.Was
: Was a supported combination but one of the releases is no longer covered by any of Premier Support, Primary Error Correct support, Extended Support, nor Extended Maintenance Support. Fixes are no longer possible.No
: Has never been Supported.
Redhat et affiliés¶
Sélectionner les paquets correspondants à votre système (OL8 pour Redhat ou Rocky 8, OL7 pour Redhat ou CentOS 7) depuis la page de téléchargement et les déposer sur le serveur.
# se connecter en root
dnf install -y oracle-instantclient-basic-21.5.0.0.0-1.x86_64.rpm
dnf install -y oracle-instantclient-devel-21.5.0.0.0-1.x86_64.rpm
dnf install -y oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64.rpm
Les fichiers seront installés dans le répertoire $ORACLE_HOME = /usr/lib/oracle/21.5/client64
.
Debian et affiliés¶
Séléctionner les archives correspondantes à votre système depuis la page de téléchargement et les déposer sur le serveur. Cette méthode manuelle permet de définir arbitrairement le chemin d’installation.
# se connecter en root
export ORACLE_DIR=/opt/oracle
export ORACLE_HOME=$ORACLE_DIR/instantclient_21_5
# le sdk 21.5 créé le dossier instantclient_21_5/
unzip -d $ORACLE_DIR instantclient-sdk-linux.x64-21.5.0.0.0dbru.zip
# le basiclite doit être positionné dans le dossier lib/
unzip -j -d $ORACLE_HOME/lib instantclient-basiclite-linux.x64-21.5.0.0.0dbru.zip
# les lib sqlplus sont déployées dans lib/, l'utilitaire sqlplus est copié dans bin/
unzip -j -d $ORACLE_HOME/lib instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip "*.so"
unzip -j -d $ORACLE_HOME/bin instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip "*/sqlplus"
# le script glogin.sql doit être créé dans sqlplus/admin/
mkdir -p $ORACLE_HOME/sqlplus/admin
unzip -j -d $ORACLE_HOME/sqlplus/admin instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip "*/glogin.sql"
Installation¶
Dépôt non-free¶
Dans le cas de l’utilisation des paquets rpm
, il est possible d’accéder au dépôt communautaire non-free pour
bénéficier du paquet précompilé de l’extension, valable pour la version PostgreSQL de son choix.
export R=https://download.postgresql.org/pub/repos/yum/reporpms/non-free/EL-8-x86_64
dnf install -y $R/pgdg-redhat-nonfree-repo-latest.noarch.rpm
dnf install -y oracle_fdw_14
Compilation¶
Sur CentOS et Redhat, adapter la version du paquet postgresql-devel
:
yum groupinstall -y "Development Tools"
yum install -y centos-release-scl epel-release
yum install -y postgresql13-devel pgxnclient
Télécharger la dernière version du code source :
cd /tmp
wget https://github.com/laurenz/oracle_fdw/archive/refs/tags/ORACLE_FDW_2_3_0.tar.gz
tar xzf ORACLE_FDW_2_3_0.tar.gz
cd oracle_fdw-ORACLE_FDW_2_3_0/
Compiler l’extension :
export ORACLE_HOME=<chemin/vers/instantclient>
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
make PG_CONFIG=/usr/pgsql-13/bin/pg_config
make PG_CONFIG=/usr/pgsql-13/bin/pg_config install
L’instance PostgreSQL doit être capable d’identifier les librairies Oracle pour fonctionner correctement avec oracle_fdw
.
Les variables d’environnement $ORACLE_HOME
et $LB_LIBRARY_PATH
doivent être renseignées au niveau du service PostgreSQL.
1ère solution : Ajouter les variables d’environnement au service PostgreSQL.
Éditer le fichier de service :
[Service]
Environment=ORACLE_HOME=/opt/oracle/instantclient_21_5
Environment=LB_LIBRARY_PATH=/opt/oracle/instantclient_21_5/lib
Redémarrer le service :
2ème solution : Utiliser des liens symboliques.
Retrouver les liens vers les bibliothèques Oracle :
# ldd /usr/lib/postgresql/14/lib/oracle_fdw.so | grep oracle
libclntsh.so.19.1 => /opt/oracle/instantclient_19_22/lib/libclntsh.so.19.1 (0x00007fed34000000)
libnnz19.so => /opt/oracle/instantclient_19_22/lib/libnnz19.so (0x00007fed33600000)
libclntshcore.so.19.1 => /opt/oracle/instantclient_19_22/lib/libclntshcore.so.19.1 (0x00007fed33000000)
Créer les liens symboliques dans /usr/lib
:
ln -s {/opt/oracle/instantclient_19_22,/usr}/lib/libclntsh.so.19.1
ln -s {/opt/oracle/instantclient_19_22,/usr}/lib/libclntshcore.so.19.1
ln -s {/opt/oracle/instantclient_19_22,/usr}/lib/libnnz19.so
Redémarrer le service :
3ème solution : Utiliser ldconfig
.
Créer un fichier de configuration pour ldconfig
:
Redémarrer le service PostgreSQL :
Avertissement
Cette méthode peut provoquer des conflits de bibliothèques avec d’autres applications. Il est conseillé de contrôler que le redémarrage complet du serveur s’effectue correctement.
Utilisation¶
Se connecter sur la base de données :
Créer l’extension :
Contrôler le bon fonctionnement de l’extension :