Connecteur mysql_fdw : problème de "cache"

From: Bertrand ROBERT <b(dot)robert(at)kifaisa(dot)com>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Connecteur mysql_fdw : problème de "cache"
Date: 2016-12-14 14:20:23
Message-ID: 745519657.7009466.1481725223670.JavaMail.zimbra@kifaisa.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour,

Je travaille sur une potentielle migration de MySQL à PostGreSQL.
Dans les solutions envisagées, nous regardons du côté du connecteur mysql_fdw pour nous aider à migrer en douceur.

Voici mon jeu de test :
- côté MySQL, j'ai une table "matable" qui contient deux colonnes (monid, mavaleur) et des données toutes simples :
'1', '2.129'
'2', '2.129'
'3', '2.129'
etc

- côté PostGreSQL, j'ai créé une foreign table de "matable" et j'arrive bien à interagir dessus (select, insert, update, delete) depuis PostGreSQL

Si je réalise les opérations suivantes :
- je me connecte à PostGreSQL avec psql

- je lance un "select * from matable;" depuis PostGreSQL :
=> la connexion s’établit sur MySQL et j'ai bien la liste des lignes qui se trouvent dans "matable" de MySQL
=> je maintiens cette connexion PostGreSQL ouverte
'1', '2.129'
'2', '2.129'
'3', '2.129'
etc

- je lance un "update matable set mavaleur = '3.229';" depuis MySQL et je vérifie les valeurs côtés MySQL :
'1', '3.129'
'2', '3.129'
'3', '3.129'
etc

- je relance la lecture depuis PostGreSQL avec la même connexion qu'au début :
'1', '2.129'
'2', '2.129'
'3', '2.129'
etc

=> PostGreSQL ne voit pas les nouvelles valeurs

Après analyse, j'ai découvert :
- que la connexion établit de PostGreSQL vers MySQL ressemble à du persistent : elle reste ouverte tant que la console psql est ouverte ou pendant X secondes
- que le même update lancé depuis PostGreSQL sur la table MySQL permettait à PostGreSQL de voir les bonnes valeurs avec un select (3.129)
- quelque soit le moyen utilisé, si la connexion de PostGreSQL à MySQL est une nouvelle connexion, les données affichées seront les bonnes (3.129)

Pour forcer la connexion de PostGreSQL à MySQL, plusieurs moyens :
- rouvrir une connexion à PostGreSQL en parallèle ou en fermant la connexion d'origine
- redémarrant MySQL
- redémarrant PostGreSQL
- attendant X secondes que la connexion de PostGreSQL vers MySQL tombe en timeout

J'ai cherché dans le peu de documentation du connecteur et je n'ai pas l'impression qu'il soit possible de désactiver le côté "persistant" de la connexion PostGreSQL -> MySQL mais j'ai peut être loupé quelque chose.

J'ai donc plusieurs questions :
- est-ce que quelqu'un sait s'il est possible de désactiver ce côté persistant / faire tomber le timeout à 0 ?
- quelle est la valeur de ce timeout ?
- est-ce qu'il est possible de demander à PostGreSQL à ne pas utiliser ce qui ressemble à du "cache" ?

J'en profite pour poser une autre question.
J'ai remarqué qu'une transaction côté PostGreSQL n'était pas gérée côté MySQL. Si je démarre une transaction sur PostGreSQL, que je fais deux updates (un dans une foreign table MySQL, un dans une table native PostGreSQL) et que je rollback :
- l'update est annulé sur la table native PostGreSQL
- l'update est commité sur la table MySQL

J'ai essayé de jouer avec autocommit des deux côtés mais rien y fait et il semble que la gestion des transactions ne soient pas intégrée aux connecteurs FDW.
La question est donc : est-ce que quelqu'un sait s'il est prévu de gérer les transactions dans une future version de PostGreSQL et, si oui, dans laquelle ?

Je vous remercie d'avance et vous souhaite une bonne journée.

Cordialement,
Bertrand ROBERT

__________ Information from ESET Mail Security, version of virus signature database 14604 (20161214) __________

The message was checked by ESET Mail Security.
http://www.eset.com

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message bernard schoenacker 2016-12-14 15:20:31 Re: Connecteur mysql_fdw : problème de "cache"
Previous Message wilk 2016-12-04 17:11:06 Re: timezone or not timezone (with Go)