PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 22/04/2011 12:07:43

kenrio
Membre

Modifier les noms de tables et de colonnes...

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

#2 22/04/2011 13:31:49

Marc Cousin
Membre

Re : Modifier les noms de tables et de colonnes...

Avant d'aller plus loin, elles sont réellement créées avec la casse ?

Que donne \d sur une des tables ?


Marc.

Hors ligne

#3 22/04/2011 13:39:53

kenrio
Membre

Re : Modifier les noms de tables et de colonnes...

oui, \d exemple :

db314825373 | GC_ArticleFournisseur      | table |

Hors ligne

#4 22/04/2011 13:51:16

Marc Cousin
Membre

Re : Modifier les noms de tables et de colonnes...

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

#5 22/04/2011 14:00:04

kenrio
Membre

Re : Modifier les noms de tables et de colonnes...

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 smile

Hors ligne

#6 22/04/2011 14:15:42

Marc Cousin
Membre

Re : Modifier les noms de tables et de colonnes...

Ç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

#7 22/04/2011 14:37:07

kenrio
Membre

Re : Modifier les noms de tables et de colonnes...

non j'ai regargé y a pas d' option pour ça, j'ai pris celui de Entreprise DB.

Hors ligne

#8 22/04/2011 15:05:32

Marc Cousin
Membre

Re : Modifier les noms de tables et de colonnes...

Ok. Mais c'est vraiment facile à scripter à mon avis smile

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 smile


Marc.

Hors ligne

#9 22/04/2011 16:58:16

kenrio
Membre

Re : Modifier les noms de tables et de colonnes...

Re, j'étais en train de chercher quand tu m'as donné ce moyen ^^
j'ai juste mis plus de temps que toi big_smile
Me reste plus qu'a faire pour les colonnes big_smile

merci

Hors ligne

#10 06/03/2019 13:06:07

Sylvain M.
Membre

Re : Modifier les noms de tables et de colonnes...

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

#11 06/03/2019 14:11:04

rjuju
Administrateur

Re : Modifier les noms de tables et de colonnes...

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;

Hors ligne

#12 06/03/2019 16:52:03

gleu
Administrateur

Re : Modifier les noms de tables et de colonnes...

Dans pgAdmin, le mieux serait d'utiliser une instruction DO en PL/pgsql.


Guillaume.

Hors ligne

Pied de page des forums