#1 Fri 05 June 2020 11:58
- YasmineB
- Participant occasionnel
- Date d'inscription: 20 Dec 2017
- Messages: 19
Intégrer une variable dans un nom de table [PG ADMIN]
Bonjour à tous,
Je travaille sur pg admin 4.12 et je ne parviens pas à résoudre mon problème depuis plusieurs jours malgré mes recherches.
Je souhaiterai intégrer une variable dans le nom de mes tables pour qu'elle soit prise en compte lorsque je les appelle dans ma requête (INSERT INTO, FROM...).
Exemple concret : j'ai une table pour chaque département nommée avec le numéro de département (cadastre_95, cadastre_51, cadastre_02...) et lors de la mise à jour des données attributaires, je dois remplacer autant de fois le numéro de département que le nombre de fois où la table est appelée (parfois jusqu'à 10 fois).
Pour contrer ce problème j'aimerai utiliser une variable qui soit le numéro de département pour n'avoir qu'à changer celle-ci dans ma requête.
Voilà mon code qui, bien-sûr, ne fonctionne pas mais ça pourrait vous éclairer sur ma démarche :
DO $$
DECLARE variable text:= 14;
BEGIN
INSERT INTO foncier.cadastre_+variable(a, b)
SELECT 'tata', 'toto';
END $$;
Pouvez-vous m'éclairer de votre lanterne ?
Je vous remercie pour votre aide.
Yasmine
Hors ligne
#2 Fri 05 June 2020 12:21
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Intégrer une variable dans un nom de table [PG ADMIN]
Bonjour,
Lorsque vous voulez modifier le nom des objets dans une requete SQL, en pl/pgsql, il faut utiliser la syntaxe:
execute "string"
(https://www.postgresql.org/docs/9.6/plp … CUTING-DYN)
Code:
... execute format('insert into foncier.cadastre_%s ...', code_dep); ...
(au fait, pgadmin 4.2 est un client, qui peut se connecter a n'importe quelle version de PG: l'info importante ici est la version de PG et postgis que vous utilisez, pas le client)
Nicolas
Hors ligne
#3 Fri 05 June 2020 13:47
- YasmineB
- Participant occasionnel
- Date d'inscription: 20 Dec 2017
- Messages: 19
Re: Intégrer une variable dans un nom de table [PG ADMIN]
Bonjour,
Merci beaucoup pour votre réponse que je garde en tête car très intéressante. En revanche, j'ai la contrainte de ne pouvoir travailler que sur l'interface de pg admin 4 directement donc je ne peux pas passer en pl/pgsql... Savez-vous comment faire dans ce cas ?..
Je vous remercie.
Yasmine
Hors ligne
#4 Fri 05 June 2020 15:55
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Intégrer une variable dans un nom de table [PG ADMIN]
PgAdmin 4 est un client: vous pouvez lancer tout le sql et pl/pgsql que vous voulez à travers ce client vers une bd PG !!
Vous pouvez créer des fonctions en pl/pgsql, des block anonymes (comme ce que vous avez fait) etc.
Vous pouvez créer des fonctions dans tous les langages supportés (a part c/c++) avec ce client: plpython, pljava, plperl, etc.
(et si vous avez ce client, alors vous avez les parametres de connexion a la BD: vous pouvez utiiiser le client de votre choix: psql, dbeaver, datagrip, qgis... (sauf dans le cas ou pgAdmin4 est lui-meme sur un serveur, et que vous n'avez pas d'accès direct à la BD depuis votre poste)
Nicolas
Hors ligne
#5 Mon 08 June 2020 10:45
- YasmineB
- Participant occasionnel
- Date d'inscription: 20 Dec 2017
- Messages: 19
Re: Intégrer une variable dans un nom de table [PG ADMIN]
Bonjour,
Je vous remercie pour vos éclairages, je vais m'y atteler.
Yasmine
Hors ligne