Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'ai un petit soucis, j'ai migré des bases mysql vers postgresql, mais j'ai un soucis toutes les tables et colonnes sont écrites avec des majuscules du style : Tt.Test
Donc je voulais savoir si il existait un moyen assez simple et rapide de renommer toutes les tables et les colonnes en supprimant les majuscules pour avoir comme résultat ce genre là : Tt.Test -> tt.test
Merci de votre aide.
Hors ligne
Avant d'aller plus loin, elles sont réellement créées avec la casse ?
Que donne \d sur une des tables ?
Marc.
Hors ligne
oui, \d exemple :
db314825373 | GC_ArticleFournisseur | table |
Hors ligne
argh, il va y avoir du sport…
À mon avis, vous avez deux solutions: soit écrire un programme externe qui fait les alter table qui vont bien (pas forcément très compliqué à écrire, en perl par exemple, ça dépend du système d'exploitation que vous avez), soit vous faites un dump de votre base, et vous convertissez tous les noms de tables et colonnes (le plus simple, c'est simplement d'enlever les doubles quotes autour des noms de tables et de champs dans le dump).
Vous êtes sous quel système d'exploitation ?
Marc.
Hors ligne
bases sur centos et le dev sous windows.
Mais je me demande si il vaut mieux pas modifier les tables et colonnes depuis mysql donc avant la migration.
Enfin je vais voir comment je peux scripter ça
Hors ligne
Ça ne sera pas plus simple à faire sous mysql que sous postgres, ça sera identique je pense. C'est quoi l'outil de migration ? Il n'aurait pas une option pour ça ?
Marc.
Hors ligne
non j'ai regargé y a pas d' option pour ça, j'ai pris celui de Entreprise DB.
Hors ligne
Ok. Mais c'est vraiment facile à scripter à mon avis
Par exemple, pour générer tous les alter table à exécuter :
SELECT 'ALTER TABLE '||table_schema||'."'||table_name||'" RENAME TO '||lower(table_name)||';' from information_schema.tables where lower(table_name)<>table_name;
Je laisse le code pour les colonnes comme exercice
Marc.
Hors ligne
Re, j'étais en train de chercher quand tu m'as donné ce moyen ^^
j'ai juste mis plus de temps que toi
Me reste plus qu'a faire pour les colonnes
merci
Hors ligne
Merci Marc pour ta requête qui m'a été très utile !
(Il n'est jamais trop tard pour remercier, même 8 ans après !)
Voici celle pour les colonnes, pour ceux qui chercheraient encore :
SELECT 'ALTER TABLE '||table_schema||'."'||table_name||'" RENAME COLUMN "' || column_name || '" TO ' || lower(column_name) ||';' from information_schema.columns WHERE table_schema = 'monschema' AND lower(column_name)<>column_name;
Pour aller plus loin (et plus vite), quelle serait la méthode pour exécuter directement les requêtes issues du SELECT, si possible depuis PGAdmin ? (je me débrouille en SQL, mais pas encore en scripts, "plpgsql" si je ne me trompe pas ?).
Merci pour vos conseils !
A+
Sylvain M.
Dernière modification par Sylvain M. (06/03/2019 13:25:07)
Hors ligne
Avec pgAdmin ce n'est à priori pas possible, mais avec psql vous pouvez utiliser \gexec (cf https://www.postgresql.org/docs/current/app-psql.html).
Pensez à vérifier les commandes avant quand même, et commencer par un BEGIN;
Julien.
https://rjuju.github.io/
Hors ligne
Dans pgAdmin, le mieux serait d'utiliser une instruction DO en PL/pgsql.
Guillaume.
Hors ligne
Pages : 1