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 28/02/2017 12:03:17

Gigaud
Membre

substitution de variables

Bonjour,

j'ai un soucis avec la substitution de variables dans du psql.

J'aimerais créer des roles, schémas,... a partir de variables.

Exemple:

create role r_agu_dba;

J'essaie avec:

\set app = agu

create role r_:app_dba;
ERROR:  syntax error at or near ":"
LINE 1: create role r_:app_dba;

alors que
create role r_:app;
CREATE ROLE

Quelle est la bonne syntaxe pour terminer une variable?
En Oracle  : create role r_&app._dba;

Merci de votre aide.

Dominique Gigaud

Hors ligne

#2 28/02/2017 14:36:31

Arkhena
Membre

Re : substitution de variables

Bonjour,

A ma connaissance, il n'est pas possible d'utiliser des variables dans le DDL en PostgreSQL (mais je peux me tromper et je n'ai pas trouvé de page de la documentation qui allait dans ce sens).
Par contre, le wiki PostgreSQL propose d'encapsuler le code dans une fonction:  https://wiki.postgresql.org/wiki/Dynamic_DDL

Bonne journée,

Arkhena

Hors ligne

#3 28/02/2017 15:25:27

dverite
Membre

Re : substitution de variables

La manière la plus simple est d'utiliser \set pour construire une nouvelle variable, car \set va concaténer les éléments sans séparateur.
Attention il n'y a aucun signe "égal" à mettre entre la variable et l'expression, sinon il va le prendre comme faisant partie de l'expression.

Exemple:

test=> \set app agu
test=> \set rolename r_ :app _dba
test=> \echo :rolename
r_agu_dba
test=> create role :"rolename";
CREATE ROLE
test=> select rolname from pg_roles order by oid desc limit 1;
  rolname  
-----------
 r_agu_dba
(1 row)

@DanielVerite

Hors ligne

#4 01/03/2017 08:34:19

Gigaud
Membre

Re : substitution de variables

Merci.

C'est exactement ce qu'il me fallait.

Bonne journée.
Dominique

Hors ligne

Pied de page des forums