Le 04/04/2019 à 21:26, Tony Emery via Talk-fr a écrit :
Merci pour cette astuce Denis mais, tu pourrais m'expliquer en détail ta
solution pour que je comprenne comment elle fonctionne ?
L'idée est de fabriquer des requêtes ; c'est ce qui est contenu dans les
parenthèses du concat.
On va puiser les informations nécessaires dans les tables systèmes
(pg_class qui liste toutes les tables, pg_namespace qui contient les
schémas, et pg_attribute qui recense les attributs). On relie les tables
systèmes avec les clés qu'elles ont en commun (voir la doc).
On cantonne la génération de ces requêtes à toutes les tables qui ont un
attribut qui contient ':'. On pourrait encore restreindre à un schéma
particulier
Admettons qu'on ait une table toto créée ainsi : CREATE TABLE
monschema.toto (id serial, "addr:housenumber" text);
la requête :
select concat('ALTER TABLE ',nspname,'.',t.relname,' RENAME COLUMN
"',a.attname,'" TO "',replace(a.attname,':','_'),'";') from pg_attribute
a join pg_class t on a.attrelid=t.oid join pg_namespace n on
t.relnamespace=n.oid where attname like '%:%' and nspname='monschema';
donnera le résultat suivant
ALTER TABLE monschema.toto RENAME COLUMN "addr:housenumber" TO
"addr_housenumber";
si tu rediriges le résultat de la requête plus haut vers une sortie
texte, tu obtiens un fichier SQL que tu peux lancer avec psql, par exemple.
En espérant avoir été clair, sinon on continue en privé
Denis, désolé pour la foule non SQLphile
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel
antivirus Avast.
https://www.avast.com/antivirus
_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr