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

Répondre à