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 07/02/2012 17:39:07

thedigital
Membre

PL/proxy

Bonjour à tous,

Je suis actuellement en train de travailler sur du sharding et à ce titre j'utilise pl/proxy.
Tout se passe très bien cependant j'aurais aimé pour des raisons de simplicité et de scripting pouvoir multiplier les schemas plutot que les clusters sur un même serveur.

Dans la définition des foreign data wrapper, on ne peut pas aller plus en profondeur que la base de données lors de la creation des partitions (ex: dbname=shard host=192.168.0.32 port=5435)
J'aurais aimé pouvoir faire qque chose du style :
   dbname=shard schema=shard_1 host=192.168.0.32 port=5435
   dbname=shard schema=shard_2 host=192.168.0.32 port=5435

malheureusement pqconnect ne permet pas de spécifier un schema.

J'aimerais éviter de :
  - multiplier les clusters
  - multiplier les base de données
  - devoir préfixer le schema à utiliser au niveau du code applicatif


Je me rends compte que j'ai une utilisation particulière des schemas, cependant quelqu'un a-t-il une idée afin de tout intégrer au niveau de pl/proxy ?

Merci d'avance

Hors ligne

#2 07/02/2012 17:59:30

Marc Cousin
Membre

Re : PL/proxy

Peut-être en lui passant un options=search_path='mon_schema' en plus des host, port …

Pas sûr de la syntaxe, vu que je n'ai jamais essayé, mais ça doit être un truc de ce genre. L'idée étant de forcer les schémas à l'établissement de la session.

Si vous ne trouvez pas, je chercherai, mais jetez déjà un œil dans cette direction.

Hors ligne

#3 07/02/2012 18:10:45

Marc Cousin
Membre

Re : PL/proxy

Après un peu de farfouillage, la syntaxe c'est:
options='-c search_path=toto'

Hors ligne

#4 07/02/2012 18:38:28

thedigital
Membre

Re : PL/proxy

J'avais essayé avec cette syntaxe mais ca ne marche pas.

Si j'écris :

CREATE SERVER writeshardedcluster FOREIGN DATA WRAPPER plproxy
OPTIONS (connection_lifetime '1800',
         p0 'dbname=shard host=192.168.0.32 port=5435 options=-c search_path=affiliation_10',
         p1 'dbname=shard host=192.168.0.63 port=5432 options=-c search_path=affiliation_0' );


Quand j'exécute ma fonction plproxy j'obtiens :
ERREUR:  PL/Proxy function affiliation.get_clics(1): [(null)] PQconnectStart: option de connexion « search_path » invalide

Je me suis dis que c'etait peut etre un probleme de simple quote, mais je ne peut pas mettre de simple quote a l'interieur de la connexion string puisque la connection string elle meme doit etre entourée de simple quote.

Hors ligne

#5 07/02/2012 18:43:05

Marc Cousin
Membre

Re : PL/proxy

Essayez avec deux quotes consécutives :


CREATE SERVER writeshardedcluster FOREIGN DATA WRAPPER plproxy
OPTIONS (connection_lifetime '1800',
         p0 'dbname=shard host=192.168.0.32 port=5435 options=''-c search_path=affiliation_10''',
         p1 'dbname=shard host=192.168.0.63 port=5432 options=''-c search_path=affiliation_0''' );

C'est la façon de saisir un quote dans une chaîne de caractère en SQL.

Hors ligne

#6 07/02/2012 18:51:18

thedigital
Membre

Re : PL/proxy

effectivement c'etait un probleme de quote !
je ne savais pas que c'etait une double quote.

Ca fonctionne, merci beaucoup Marc

Hors ligne

Pied de page des forums