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

PostgreSQL Discussion :

Inserer dans une vue


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Par défaut Inserer dans une vue
    salut a tous,

    j'ai un soucis, je souhaite restreindre l'acces des donnees d'une table suivant l'utilisateur connecte. j'ai donc cree un champ user_name me permettant de filtrer mes donnees et une vue sur cette table
    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
     
    CREATE TABLE contact_table
    (contact_id integer, 
    first_name character varying (50),
    user_name name default current_user);
     
    create view contact
    (contact_id, 
    first_name)
    as select 
    contact_id,
    first_name,
    user_name
    from contact_table
    where
    user_name = current_user
    je veux pouvoir inserer dans la table, j'ai donc cree une regle qui me permet de rendre le systeme transparent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE RULE _insert_into_contact AS
    ON insert
    TO contact
    DO INSTEAD 
    INSERT INTO contact_table VALUES (
               NEW.contact_id,
               NEW.first_name);
    Ceci marche tres bien,
    ce syteme me permet de ne voir que les donnees inserees par l'utilisateur connecte et je peux inserer des donnees
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into contact values (1, 'toto);
    sauf que le probleme arrive lorsque je remplace mon integer de contact_id par une sequence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TABLE contact_table
    (contact_id serial NOT NULL PRIMARY KEY, 
    first_name character varying (50),
    user_name name default current_user);
    je ne peux alors pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     insert into contact (first_name)  values ( 'titi');
    ERROR:  null value in column "contact_id" violates not-null constraint
    et si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     insert into contact values (1,'toto');
    INSERT 96880021 1
    ca marche bien entendu mais ceci n'utilise pas la sequence, et ensuite si j'essaie d'inserer dans la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into contact_table  (first_name)  values ( 'titi');
    ERROR:  duplicate key violates unique constraint "contact_table_pkey"
    comment je dois faire (si c'est possible) pour pouvoir inserer dans ma table a partir de ma vue (grace a la regle) sans avoir a me preoccuper de la valeur de la pk et laisser ce probleme etre gere par l'incrementation automatique ?(serial ou sequence, je ne sais pas quel terme employer)

    Merci

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    le plus simple est de modifier la règle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE RULE _insert_into_contact AS 
    ON insert 
    TO contact 
    DO INSTEAD 
    INSERT INTO contact_table (first_name) VALUES ( 
               NEW.first_name);
    Pour contact_id, la valeur qui sera insérée sera celle par défaut, qui pour un champ de type SERIAL est le prochain numéro disponible dans la séquence.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 90
    Par défaut
    Citation Envoyé par GrandFather
    Bonjour,

    le plus simple est de modifier la règle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE RULE _insert_into_contact AS 
    ON insert 
    TO contact 
    DO INSTEAD 
    INSERT INTO contact_table (first_name) VALUES ( 
               NEW.first_name);
    Pour contact_id, la valeur qui sera insérée sera celle par défaut, qui pour un champ de type SERIAL est le prochain numéro disponible dans la séquence.
    Bonjour,

    super, j'avais essaye de modifer la regle en effet mais j'avais simplement essayer de faire NEW.nextval et ca ne marche evidemment pas.

    Merci pour le coup de pouce

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

Discussions similaires

  1. inserer des données dans une vue
    Par yodark dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/05/2008, 16h30
  2. j'arrive pas a inserer dans une table vide
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 16
    Dernier message: 03/05/2005, 14h24
  3. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  4. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27
  5. [LG]inserer dans une liste chainee
    Par jaabouc dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2004, 00h44

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