PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 17/02/2017 14:36:28

damalaan
Membre

Mise en place de Foreign Data Wrappers Oracle

Bonjour,

Je cherche des témoignages et éventuellement de l'aide sur la mise en place de foreign data wrappers d'une base oracle vers un postgres 9.6 (Postgres étant en environnement Windows et Oracle en Linux)
L'installation ne m'a pas l'air très simple (comme d'habitude avec oracle sad ).
Mais qu'en est il des performances ?
Y a t il des limitations ?
Peut on agir en dehors des select sur la table distante oracle avec postgres (update, insert, delete)?

J'ai installé un fdw avec un fichier csv de qq milliers de lignes lié à pg 9.6, les select fonctionnent bien, je trouve ça intéressant.
Ca me rappelle finalement ce qu'on peut faire avec des clients de type access ou libreoffice base avec des odbc.

Merci pour les infos.

Hors ligne

#2 17/02/2017 15:06:13

rjuju
Administrateur

Re : Mise en place de Foreign Data Wrappers Oracle

Côté postgres, vous pouvez utiliser https://github.com/laurenz/oracle_fdw qui est un très bon foreign data wrapper pour Oracle, et gère l'écriture sur les tables Oracle.

Le plus compliqué étant à mon avis de compiler l'extension sous windows, bon courage smile

Hors ligne

#3 17/02/2017 15:12:23

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

c'est bien celui ci que j'avais vu, par contre s'il faut compiler l'extension................sais pas faire sad

Hors ligne

#4 17/02/2017 15:32:56

ruizsebastien
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Bonjour,

les fichiers pré-compilés pour Windows sont présents ici :
https://github.com/laurenz/oracle_fdw/r … _FDW_1_5_0

il suffit juste de placer les fichiers dans les bons répertoires (lib, extension, etc...)

Enfin je crois....jamais fais sur windows...

Hors ligne

#5 17/02/2017 15:51:03

rjuju
Administrateur

Re : Mise en place de Foreign Data Wrappers Oracle

Ah ça c'est classe ! Donc oui il suffit d'extraire les fichiers dans le répertoire des binaires de postgres et de faire un "CREATE EXTENSION oracle_fdw;".  Si cela fonctionne c'est que les fichiers ont bien été copiés dans le bon répertoire.

Hors ligne

#6 17/02/2017 16:21:58

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Apparemment ça fonctionne, j'ai réussi à faire un create extension oracle_fdw en copiant les fichiers dans les bons dossier de Postgres.
je crains maintenant le paramétrage pour accéder à la base oracle .... je vous dis ça ....

Hors ligne

#7 17/02/2017 16:29:10

ruizsebastien
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Hors ligne

#8 17/02/2017 16:30:17

shishi
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Bonjour,
pour ma part j'ai utilisé les fdw uniquement entre 2 bases postgres sur des serveurs differents donc je ne sais pas si cela peut t'aiguiller mais j'ai commencé par créer l'extension ensuite il faut créer un foreign server avec une commande de ce style :

create server nom_foreign server
foreign data wrapper postgres_fdw 
options (dbname 'nom_bdd', port '5432', host 'IP server distant ');

ensuite il faut créer un user mapping avec ce genre de commande :

create user mapping for nom_user
server nom_foreign_server
options (user 'nom_user_distant', password 'password');

et pour finir il faut créer un foreign table avec ce code

create foreign table nom_foreign_table (
idgenre integer not null,
nom character varying(50) not null,
)server nom_foreign_server options (schema_name 'public', table_name 'genre');

En espérant que cela t'aide un petit peu

Cordialement
Shishi

Hors ligne

#9 17/02/2017 17:38:44

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

j'ai fait tout ça

	CREATE EXTENSION oracle_fdw;

   
=>ok

	CREATE SERVER oracle_labo  FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver 'LABO')

=>ok

	GRANT USAGE ON FOREIGN SERVER oracle_labo TO postgres;

=> ok

	create user mapping for postgres
	server oracle_labo
	options (user '**', password '**');

=>ok

j'ai créé une table dans postgres
=> ok

ensuite j'ai fait une requête
sur ma table fraichement créée

ERREUR:  error connecting to Oracle: OCIEnvCreate failed to create environment handle
DETAIL:  

********** Erreur **********

ERREUR: error connecting to Oracle: OCIEnvCreate failed to create environment handle
État SQL :HV00N

Hors ligne

#10 17/02/2017 18:03:49

ruizsebastien
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

est-ce que vous avez installé un client oracle ?
est-il correctement configuré ?
pouvez-vous vous connecter à la base cible oracle avec sqlplus depuis le serveur où est installé postgresql ?

Dernière modification par ruizsebastien (17/02/2017 18:04:17)

Hors ligne

#11 17/02/2017 20:09:22

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Oui il y a un client oracle, ( instant client), sqlplus fonctionne, j ai un accès à oracle sans problème.
J ai vu dans le lien http://www.openscg.com/2016/04/how-to-i … a-wrapper/, qu il y a la notion de schéma. Est ce que ca pourrait être ca?

Hors ligne

#12 20/02/2017 10:01:03

shishi
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Bonjour,
Pour ma part en créant la foreign table je spécifie dans quel schéma la table distante se situe, de plus assure toi que l'utilisateur local avec lequel tu exécuté la requête sur La foreigner table à les droits sur le schéma et La foreign table. Et de plus il faut que l'utilisateur distant ai les droits sur La table et le schéma distant.

Cordialement
Shishi

Hors ligne

#13 21/02/2017 09:34:46

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Je savais bien qu'avec Oracle ça serait pas simple:(

J'ai essayé les manips suivantes :
-installer Microsoft Visual C++ 2015 Redistributal” and Java Runtime Environment (version 7 or 8) (comme demandé dans le lien )
-l'instant client est déjà en place puisque j'utilise aussi une connexion odbc pour autre chose
-j'ai tout supprimé et tout recréé dans postgres  comment je l'ai décrit dans un post ci dessus.
-à la création de la table étrangère j'ai spécifié le schéma où elle se trouve dans oracle

.....
SERVER oracle_labo
   OPTIONS (schema 'LABO', table 'toto');

Jusque là ça se passe bien

J'ai vérifier les variable d'environnement :
ORACLE_PATH : C:\oracle\instantclient_11_2
TNS_ADMIN : %ORACLE_PATH%
Path : beaucoup de chose dont C:\oracle\instantclient_11_2

et j'ai toujours la même erreur sad

Hors ligne

#14 21/02/2017 10:23:00

rjuju
Administrateur

Re : Mise en place de Foreign Data Wrappers Oracle

Le plus simple serait certainement de demander à l'auteur.  Dans tous les cas, le problème vient de la fonction OCIEnvCreate(), mais je ne connais personnellement absolument pas l'écosystème oracle.

En cherchant avec votre code d'erreur (HV00N), je suis tombé sur the thread : https://www.postgresql.org/message-id/f … wien.gv.at

Si cela ne vous aide pas, demandez ici : https://github.com/laurenz/oracle_fdw/issues

Hors ligne

#15 21/02/2017 15:52:20

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

J'ai refait toute mon install sur une machine virtuelle, propre et neuve !
J'ajoue que je ne sais pas ce qui a changé (à part la version de pg 9.6 au lieu de 9.5 ainsi que la version du oracle_fdw), mais à force de tripatouiller j'ai du m........

Cette fois je pense qu'il s'agit d'un problème de droit car voici l'erreur quand je fais un select sur la foreign table

ERREUR:  Oracle table "LABO"."LA_TABLE" for foreign table "ora_latable" does not exist or does not allow read access
DETAIL:  ORA-00942: Table ou vue inexistante
HINT:  Oracle table names are case sensitive (normally all uppercase).

Je suis connecté avec l'utilisateur postgres.

Qu'en penser ?

Hors ligne

#16 21/02/2017 15:54:28

rjuju
Administrateur

Re : Mise en place de Foreign Data Wrappers Oracle

Que la table "LABO"."LA_TABLE" n'existe pas ou n'est pas accessible en lecture pour l'utilisateur configuré ?

Hors ligne

#17 21/02/2017 16:07:22

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

Je suis carrément novice en gestion des accès sad mais je sens que qu'il va falloir que j'apprenne.

Sous oracle, un user "labo" peut se connecter à cette table.
Comment dois-je procéder pour qu'un utilisateur connecté à pg puisse avoir accès à cette foreign table ?

Hors ligne

#18 21/02/2017 16:10:30

rjuju
Administrateur

Re : Mise en place de Foreign Data Wrappers Oracle

Il faut configurer ça avec le CREATE USER MAPPING, voir https://github.com/laurenz/oracle_fdw#1-cookbook

Hors ligne

#19 22/02/2017 11:27:58

damalaan
Membre

Re : Mise en place de Foreign Data Wrappers Oracle

ça y est, je peux faire un select !!

CREATE EXTENSION oracle_fdw;
CREATE SERVER oracle_labo  FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver 'LABO');
GRANT USAGE ON FOREIGN SERVER oracle_labo TO postgres;

CREATE USER MAPPING FOR postgres SERVER oracle_labo
          OPTIONS (user 'labo', password '****');

CREATE FOREIGN TABLE ora_table
   (........
)
   SERVER oracle_labo
   OPTIONS (table 'latable_oracle');

En fait j'ai enlevé le schema dans les options à la création de la table (la doc disant que c'est optionnel)

A voir maintenant à l'usage dans le temps.....
Quand j'aurai un petit moment je remettrai un message avec l'installation de a à z, ça peut servir....
Encore merci pour votre à tous !

Hors ligne

Pied de page des forums