IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Ajout de nouvelles valeurs à un enum


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 38
    Par défaut Ajout de nouvelles valeurs à un enum
    Bonjour à tous,

    Je suis assez novice sur PostgreSQL et je dois déployer une mise à jour d'une appli d'un poste de travail vers un serveur de préprod sur un OVH mutualisé.

    Parmi les mises à déployer, il faut ajouter deux valeurs à un type enum.

    Sur le poste de travail, le serveur installé est PostgreSQL 9.6rc1. La mise a jour est passée sans souci via les requêtes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO pg_enum (enumlabel,enumtypid,enumsortorder) select 'B Hol', t.oid, max(e.enumsortorder)+1 from pg_type t, pg_enum e WHERE t.typname='hour_type' AND e.enumtypid=t.oid GROUP BY t.oid;
    INSERT INTO pg_enum (enumlabel,enumtypid,enumsortorder) select 'Nightshift', t.oid, max(e.enumsortorder)+1 from pg_type t, pg_enum e WHERE t.typname='hour_type' AND e.enumtypid=t.oid GROUP BY t.oid;
    Sur le serveur de préprod, il s'agit d'un PostgreSQL 8.4.22lts1
    J'ai rapidement compris que la table pg_enum n'avait pas de colonne enumsortorder dans cette ancienne version et j'ai donc adapté les requêtes pour ignorer l'ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO pg_enum (enumlabel,enumtypid) select 'B Hol', t.oid from pg_type t, pg_enum e WHERE t.typname='hour_type' AND e.enumtypid=t.oid;
    INSERT INTO pg_enum (enumlabel,enumtypid) select 'Nightshift', t.oid from pg_type t, pg_enum e WHERE t.typname='hour_type' AND e.enumtypid=t.oid;
    Seulement le serveur mutualisé OVH me répond
    Erreur SQL :

    ERREUR: droit refusé pour la relation pg_enum
    Dans l'instruction :
    INSERT INTO pg_enum (enumlabel,enumtypid) select 'B Hol', t.oid from pg_type t, pg_enum e WHERE t.typname='hour_type' AND e.enumtypid=t.oid;
    INSERT INTO pg_enum (enumlabel,enumtypid) select 'Nightshift', t.oid from pg_type t, pg_enum e WHERE t.typname='hour_type' AND e.enumtypid=t.oid;
    Existe t'il un autre moyen d'ajouter des valeurs à un enum ?
    J'ai pensé à supprimer le type pour le recréer avec toutes ses valeurs mais j'ai peur que les valeurs déjà en place étant utilisées, je casse des références et mette toute la base en l'air...

    Toute aide sera la bienvenue
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    L'utilisation d'un type enumératif est une stupidité qui contrevient à la première forme normale et ne peut que poser de multiples problèmes : performances, écriture des requêtes, etc.

    Prévoyez plutôt une table secondaire.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 38
    Par défaut
    Bonjour Fréderic,

    Je ne pensais pas que tu suivais le forum PostgreSQL

    Merci pour ta réponse.
    Malheureusement, je n'ai pas ce choix là. L'application a été développé par une autre équipe et j'étais censé faire simplement une petite evolution puis la pousser en preprod. Je n'ai pas la possibilité de tout revoir aussi profondément.

    Ps:
    Je suis un de tes anciens élèves et client périodique sur des projets SQL Serveur

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Heureux de vous causer !

    pg_enum est une table système. il est normal que vous n'ayez aucun privilège sur une table système. Ce que vous faisiez c'était de la bidouille !

    La façon propre de procéder est celle-ci :
    https://www.munderwood.ca/index.php/...um-to-another/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 12
    Dernier message: 18/02/2013, 21h35
  2. Réponses: 8
    Dernier message: 06/08/2009, 14h08
  3. Réponses: 6
    Dernier message: 08/10/2008, 11h14
  4. Ajout d'une valeur à une liste
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/01/2005, 12h34
  5. update sur plusieurs nouvelles valeurs
    Par Mut dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/11/2003, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo