Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Fri 04 April 2014 10:55

guibouvier
Participant actif
Date d'inscription: 23 Jan 2007
Messages: 102

Postgis Remplacement chaine de caractères dans plusieurs tables

Bonjour,

je cherche à remplacer de manière automatique une chaine de caractères présente dans un champ de type lien hypertexte présent dans un certain nombre de tables de ma base de données Postgis.

Savez vous si je pourrai lancer une requête qui me parcoure toutes les tables de la BDD à la recherche de la dite chaine et me la remplace automatiquement par une autre.

D'avance merci pour votre aide.

Cordialement
Gui

Hors ligne

 

#2 Fri 04 April 2014 11:19

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

Bonjour,

Pas directement par requete: il faut passer par une fonction (pl/pgsql ou autre) car il faut a la fois chercher les tables, puis les colonnes, et enfin mettre à jour.

Vous connaissez les tables et colonnes qui contiennent les caractères, ou c'est potentiellement toutes les tables et toutes les colonnes ?

Une solution envisageable et rapide (sauf si la base de données est grosse): export de la base avec pg_dump en fichier SQL, puis remplacement du caractere avec un grep ou awk (ou autre commande pratique de manip de chaines/fichier).
Ensuite recharger le dump

Nicolas

Hors ligne

 

#3 Fri 04 April 2014 11:52

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 943
Site web

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

Bonjour,

Vous pouvez faire du SQL qui génère du SQL et évitez de sortir la donnée de votre base.
Par exemple, vous pouvez remplacer les accents comme dans l'exemple ci-dessous

select 'UPDATE '||table_name||'.'||column_name||' SET '||table_name||'.'||column_name||'=translate('||table_name||'.'||column_name||',\'àâéèêëîïìôòùûÀÂÉÈÊËÎÏÌÔÒÙÛ\',\'aaeeeeiiioouuAAEEEEIIIOOUU\');' as test
from information_schema.columns
where table_name IN (select tablename from pg_tables where schemaname='public' and tablename<>'spatial_ref_sys')


Pour votre cas, il vous suffit de changer la fonction translate (qui marche de caractère à caractère) par replace (voir la doc http://docs.postgresql.fr/9.3/functions … tring-sql)
Je vous conseille plutôt que de lancer les requêtes générées de faire quelques tests avec des SELECT (le SQL généré ci-dessus met à jour)

Cordialement

Thomas

Hors ligne

 

#4 Fri 04 April 2014 12:01

guibouvier
Participant actif
Date d'inscription: 23 Jan 2007
Messages: 102

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

Nicolas Ribot a écrit:

Bonjour,

Vous connaissez les tables et colonnes qui contiennent les caractères, ou c'est potentiellement toutes les tables et toutes les colonnes ?

Nicolas


non effectivement, cela concerne qu'une partie des tables de la BDD, environ une douzaine.

Nicolas Ribot a écrit:

Une solution envisageable et rapide (sauf si la base de données est grosse): export de la base avec pg_dump en fichier SQL, puis remplacement du caractere avec un grep ou awk (ou autre commande pratique de manip de chaines/fichier).
Ensuite recharger le dump
Nicolas


je vais tester cela effectivement, ça pourrait me suffire.

Hors ligne

 

#5 Fri 04 April 2014 12:17

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

ThomasG a écrit:

Bonjour,

Vous pouvez faire du SQL qui génère du SQL et évitez de sortir la donnée de votre base.
Par exemple, vous pouvez remplacer les accents comme dans l'exemple ci-dessous


Avec l'approche de generation de SQL, il faut bien faire attention aux noms des tables et des colonnes: si la base contient des noms particuliers (espaces, majuscules, char spéciaux, etc), les requetes générées ne vont pas marcher: il faut alors utiliser la fonction quote_ident, qui sait mettre les identifiants entre quotes doubles si nécessaire.

Nicolas

Hors ligne

 

#6 Fri 04 April 2014 19:09

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

Bonjour,

Pour une douzaine de tables construire une table "temporaire" contenant le nom des tables et le noms des colonnes concernée puis faire un update (WITH RECURSIVE ?).
Ceci dit avec pgcatalog et pg-tables (vue) on obtient le nom des tables après je ne sais plus comment faire la jointure pour avoir le nom des colonnes de chaque table. (Nicola's help needed). wink


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#7 Thu 10 April 2014 17:47

guibouvier
Participant actif
Date d'inscription: 23 Jan 2007
Messages: 102

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

Nicolas Ribot a écrit:

Bonjour,
Une solution envisageable et rapide (sauf si la base de données est grosse): export de la base avec pg_dump en fichier SQL, puis remplacement du caractere avec un grep ou awk (ou autre commande pratique de manip de chaines/fichier).
Ensuite recharger le dump
Nicolas


Bonjour,

je reviens vers vous car j'ai pu exporté les tables en SQL et modifier les valeurs du champ en question.
Par contre, question toute bête, comment puis je recharger mon fichier SQL ?
Lorsque j'active restaurer, il me cherche un fichier de type .backup.
Si je charge le fichier SQL dans le panneau SQL, il me met une erreur de syntaxe et rien ne se passe.

D'avance merci pour votre aide

Cordialement

Hors ligne

 

#8 Fri 11 April 2014 16:35

guibouvier
Participant actif
Date d'inscription: 23 Jan 2007
Messages: 102

Re: Postgis Remplacement chaine de caractères dans plusieurs tables

Bonjour,

j'ai pu arriver à mes fins.
Merci encore pour votre aide

Hors ligne

 

Pied de page des forums

Powered by FluxBB