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 :

Comment bloquer la modification de certaines lignes d'une table


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 20
    Points
    20
    Par défaut Comment bloquer la modification de certaines lignes d'une table
    Bonjour
    Est-il possible par l'intermédiaire d'un trigger d’empêcher la modification de certaines lignes d'une table.

    MaTable
    pk_id
    description
    islock

    Au moment de l'update j'aimerais vérifier la valeur du champs islock. si la valeur est égale à 1 alors j'aimerais empêcher la modification

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    un exemple :

    table + insert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE tb1
    (
      id integer NOT NULL,
      val character varying(32),
      islock numeric(1,0),
      CONSTRAINT tb1_pkey PRIMARY KEY (id )
    );
     
    insert into tb1 values 
    (1, 'stomp', 0), 
    (2, 'interdit', 1),
    (3, 'sponx', 0);

    Trigger + binding :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CREATE OR REPLACE FUNCTION "_UPDATE_TB1_BLOCAGE"()
      RETURNS trigger AS
    $BODY$
     begin
      if old.isLock = 1 then
       raise exception 'update interdit';
      end if;
      return new;
    end;$BODY$ LANGUAGE plpgsql;
     
     
    CREATE TRIGGER _upd_tb1
      BEFORE UPDATE
      ON tb1
      FOR EACH ROW
      EXECUTE PROCEDURE "_UPDATE_TB1_BLOCAGE"();

    Tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    update tb1 set val = 'rrr' where id = 1;
     
    select * from tb1;
     
    id  val  isLock
    --------------------------
    2;"interdit";1
    3;"sponx";0
    1;"rrr";0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    update tb1 set val = 'rrr' where id = 2;
     
    --------------------------------
    ERREUR:  update interdit
     
     
    ********** Erreur **********
     
    ERREUR: update interdit
    État SQL :P0001

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Merci pour la solution cela fonctionne très bien dans mon cas de figure.

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonsoir.

    J'aimerais comprendre, si tu bloques les UPDATE, comment ça se passera dans tes requettes? je ne comprend pas, peux tu m'expliquer stp?

    Est il possible de verrouiller la modification d'un champ via PhpMyAdmin, mais les autoriser via les requettes? au cas ou quelqu'un réussi à accéder à PhpMyAdmin il ne pourrais pas faire de modification sur les tables.


    Merci.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    PhpMyAdmin c'est pour mysql.
    Ceci dit ce genre d'outils (mettons pgadmin pour postgresql) fait les mises à jour de données via une requête donc la distinction outil vs requête n'existe pas. C'est requête ou rien du tout.
    Ici toute requête UPDATE va rencontrer une erreur si le champ est à 1, et il n'y a pas moyen de contourner.
    Il n'y a même pas moyen de remettre le champ à 0 d'ailleurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire certaines lignes dans une table
    Par Santcho dans le forum Débuter
    Réponses: 10
    Dernier message: 31/05/2010, 14h22
  2. Réponses: 2
    Dernier message: 03/04/2010, 22h32
  3. [MySQL] Comment lister de manière numérotée les lignes d'une table
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/12/2006, 17h12
  4. Réponses: 2
    Dernier message: 26/09/2006, 09h08
  5. Copier certaines lignes d'une table vers une autre
    Par TNorth dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/07/2006, 14h31

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