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 :

referencer une clé primaire distante


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut referencer une clé primaire distante
    Je suis entrain de concevoir une bdd répartie avec postgresql,tout c'etait bien marché lorsque je n'avais pas utilisé les contraintes.
    Quand j'avais ajouté les contraintes dans mes tables,les problemes commencent.
    voici ma situation:j'ai deux sites
    site1:
    CREATE TABLE Ageances (NoAgeance integer not null primary key, Nom char(20), Adresse char(30));
    site2:
    CREATE TABLE FragA_Compte (NoCompte integer not null primary key, NoClient integer not null, NoAgeance integer not null REFERENCES Ageances, Somme integer not null);

    peut on faire reference à une clé primaire qui se trouve dans un site distant ? et comment ?

    merci d'avance de votre aide

  2. #2
    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
    Citation Envoyé par fridi_mourad Voir le message
    peut on faire reference à une clé primaire qui se trouve dans un site distant ? et comment ?
    On peut accéder à un site distant avec le module dblink mais il est difficile d'utiliser ça pour une contrainte d'intégrité.
    Ce n'est pas possible directement via une clause REFERENCES.
    Ce qui est imaginable est d'avoir un trigger sur insert/update de la table locale, qui vérifie sur la table distante si la nouvelle valeur existe dans la colonne référencée, et le cas échéant, provoque une erreur. Faisable dans l'absolu mais pas évident et coûteux en performance et en maintenance.

  3. #3
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut referencer une clé primaire distante
    merci de votre reponse
    je vais essayer et voir si ça marche, entre temps si vous avez un exemple vous le me donner

  4. #4
    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
    Citation Envoyé par fridi_mourad Voir le message
    merci de votre reponse
    je vais essayer et voir si ça marche, entre temps si vous avez un exemple vous le me donner
    Un exemple assez proche:
    http://footcow.free.fr/dotclear/inde...sur-PostgreSQL

  5. #5
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    merci pour le document malgré qu'il m'a pas servi à beaucoup de choses
    mais votre idée sur l'utilisation des trigger m'a beaucoup aidé
    et voici ce que j'ai fais pour assurer l'integrité des données et ça à marcher:

    dans le site 1:
    CREATE TABLE t1 (matricule integer primary key, nom char(20));

    dans le site 2:id c'est la clé étrangére
    CREATE TABLE t2(id integer, prenom char(20));

    CREATE or REPLACE FUNCTION ajouter() RETURNS trigger AS $$
    BEGIN
    if (new.id) NOT in (select * from dblink('C','select matricule from t1',true) as foo (matricule integer)) then RAISE EXCEPTION ' une instruction insert ou update sur la table « t2 » viole la contrainte de clé étrangère « t2_id_fkey » ' ;
    END if;
    RETURN NEW;
    END;
    $$ language plpgsql;

    CREATE trigger Trigger_ajouter BEFORE INSERT or UPDATE ON t2 FOR EACH ROW EXECUTE PROCEDURE ajouter();

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

Discussions similaires

  1. Referencer une cle primaire d'une autre base
    Par Drakkhen dans le forum Développement
    Réponses: 1
    Dernier message: 28/08/2009, 15h54
  2. Retirer une clé primaire par code
    Par Arrown dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 15h15
  3. connection a une bes mysql distante
    Par rollernox dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/07/2004, 11h22
  4. [IB6][BCB5]Constituer une clé primaire !!??
    Par Sitting Bull dans le forum SQL
    Réponses: 6
    Dernier message: 23/06/2004, 16h49
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 09h51

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