Re: [OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet DH

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


Re: [OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet Tony Emery via Talk-fr
Merci pour cette astuce Denis mais, tu pourrais m'expliquer en détail ta
solution pour que je comprenne comment elle fonctionne ?



-
Tony EMERY
Administrateur OpenStreetMap.fr
Ingénieur SIG
--
Sent from: http://gis.19327.n8.nabble.com/France-f5380434.html

___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr


Re: [OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet Tony Emery via Talk-fr
Merci pour cette astuce Denis mais, tu pourrais m'expliquer en détail ta
solution pour que je comprenne comment elle fonctionne ?



-
Tony EMERY
Administrateur OpenStreetMap.fr
Ingénieur SIG
--
Sent from: http://gis.19327.n8.nabble.com/France-f5380434.html

___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr


Re: [OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet Nicolas Moyroud
Magnifique ton astuce Denis j'aime bien et je la note ! Ça fait 
longtemps que j'ai pas joué avec les méta-tables de PostgreSQL, ça me 
rappelle quelques souvenirs. :-)


Sinon une petite remarque pour Tony c'est possible d'exploiter les 
colonnes avec des caractères comme : il suffit d'entourer le nom de la 
colonne par des "" dans la requête. Un exemple :


SELECT * FROM osm_hydrants WHERE "fire_hydrant:type" = 'pillar';

Après je suis d'accord que c'est quand même un peu pénible...

Nicolas


Le 04/04/2019 à 17:55, HELFER Denis (SNCF RESEAU / SIEGE SNCF RESEAU / 
DT GE PPE) a écrit :

Tu peux utiliser https://docs.postgresql.fr/8.1/catalog-pg-attribute.html pour 
identifier les colonnes concernées
La requête suivante va te générer les requêtes qui vont bien :

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 '%:%';

Denis



___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr


Re: [OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet Gwenaël Jouvin via Talk-fr
Bonsoir,

En m’inspirant de cette méthode :
https://stackoverflow.com/a/39096027

j’ai essayé ça avec succès dans psql, sur des tables temporaires du schéma 
pg_temp_4 :
> BEGIN;
> SELECT FORMAT(
'ALTER TABLE %I RENAME TO %I',
table_name,
regexp_replace(table_name, ':', '_') )
FROM information_schema.tables
WHERE table_schema='pg_temp_4';
> \gexec
> \dt pg_temp_4.*
> COMMIT; (ou ROLLBACK si ça plante ;-) )


Gwenaël


Le 04/04/2019 à 17:30, Tony Emery via Talk-fr a écrit :
> Bonjour à tous,
> 
> J'ai une petite question technique concernant l'exploitation des clés
> OpenStreetMap dans PosgreSQL.
> Je voudrais modifier le noms des colonnes qui contiennent des ":" en les
> remplaçant par des "_", par exemple.
> 
> Et plutôt que d'avoir des "ALTER TABLE public.habillage_osm_point RENAME
> COLUMN "addr:housenumber" TO "addr_housenumber"; et faire ça pour chaque
> clé, je voudrais avoir :
> "Bon, Postgresql, à chaque fois que tu vois un ":" dans le nom d'une colonne
> de la table public.habillage_osm_point, tu le remplaces par "_" et avec le
> sourire s'il te plait".
> 
> Je suppose qu'il faut une petite fonction avec une boucle mais je ne vois
> pas bien comment la monter.
> 
> Merci d'avance,
> 
> 
> 
> -
> Tony EMERY
> Administrateur OpenStreetMap.fr
> Mandataire Grand Sud-Est
> Géomaticien & chef de projets
> --
> Sent from: http://gis.19327.n8.nabble.com/France-f5380434.html
> 
> ___
> Talk-fr mailing list
> Talk-fr@openstreetmap.org
> https://lists.openstreetmap.org/listinfo/talk-fr
> 

___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr


Re: [OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet HELFER Denis (SNCF RESEAU / SIEGE SNCF RESEAU / DT GE PPE)
Tu peux utiliser https://docs.postgresql.fr/8.1/catalog-pg-attribute.html pour 
identifier les colonnes concernées
La requête suivante va te générer les requêtes qui vont bien :

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 '%:%';

Denis

-Message d'origine-
De : Tony Emery via Talk-fr [mailto:talk-fr@openstreetmap.org] 
Envoyé : jeudi 4 avril 2019 17:31
À : talk-fr@openstreetmap.org
Cc : Tony Emery 
Objet : [OSM-talk-fr] OSM et postgresql

Bonjour à tous,

J'ai une petite question technique concernant l'exploitation des clés 
OpenStreetMap dans PosgreSQL.
Je voudrais modifier le noms des colonnes qui contiennent des ":" en les 
remplaçant par des "_", par exemple.

Et plutôt que d'avoir des "ALTER TABLE public.habillage_osm_point RENAME COLUMN 
"addr:housenumber" TO "addr_housenumber"; et faire ça pour chaque clé, je 
voudrais avoir :
"Bon, Postgresql, à chaque fois que tu vois un ":" dans le nom d'une colonne de 
la table public.habillage_osm_point, tu le remplaces par "_" et avec le sourire 
s'il te plait".

Je suppose qu'il faut une petite fonction avec une boucle mais je ne vois pas 
bien comment la monter.

Merci d'avance,



-
Tony EMERY
Administrateur OpenStreetMap.fr
Mandataire Grand Sud-Est
Géomaticien & chef de projets
--
Sent from: http://gis.19327.n8.nabble.com/France-f5380434.html

___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr
---
Ce message et toutes les pièces jointes sont établis à l'intention exclusive de 
ses destinataires et sont confidentiels. L'intégrité de ce message n'étant pas 
assurée sur Internet, la SNCF ne peut être tenue responsable des altérations 
qui pourraient se produire sur son contenu. Toute publication, utilisation, 
reproduction, ou diffusion, même partielle, non autorisée préalablement par la 
SNCF, est strictement interdite. Si vous n'êtes pas le destinataire de ce 
message, merci d'en avertir immédiatement l'expéditeur et de le détruire.
---
This message and any attachments are intended solely for the addressees and are 
confidential. SNCF may not be held responsible for their contents whose 
accuracy and completeness cannot be guaranteed over the Internet. Unauthorized 
use, disclosure, distribution, copying, or any part thereof is strictly 
prohibited. If you are not the intended recipient of this message, please 
notify the sender immediately and delete it. 
___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr


[OSM-talk-fr] OSM et postgresql

2019-04-04 Par sujet Tony Emery via Talk-fr
Bonjour à tous,

J'ai une petite question technique concernant l'exploitation des clés
OpenStreetMap dans PosgreSQL.
Je voudrais modifier le noms des colonnes qui contiennent des ":" en les
remplaçant par des "_", par exemple.

Et plutôt que d'avoir des "ALTER TABLE public.habillage_osm_point RENAME
COLUMN "addr:housenumber" TO "addr_housenumber"; et faire ça pour chaque
clé, je voudrais avoir :
"Bon, Postgresql, à chaque fois que tu vois un ":" dans le nom d'une colonne
de la table public.habillage_osm_point, tu le remplaces par "_" et avec le
sourire s'il te plait".

Je suppose qu'il faut une petite fonction avec une boucle mais je ne vois
pas bien comment la monter.

Merci d'avance,



-
Tony EMERY
Administrateur OpenStreetMap.fr
Mandataire Grand Sud-Est
Géomaticien & chef de projets
--
Sent from: http://gis.19327.n8.nabble.com/France-f5380434.html

___
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr