Vous n'êtes pas identifié(e).
Pages : 1
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
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.
Marc.
Hors ligne
Après un peu de farfouillage, la syntaxe c'est:
options='-c search_path=toto'
Marc.
Hors ligne
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
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.
Marc.
Hors ligne
effectivement c'etait un probleme de quote !
je ne savais pas que c'etait une double quote.
Ca fonctionne, merci beaucoup Marc
Hors ligne
Pages : 1