Oh helloes!
J'ai deux tables, la première (appelons-la NameTable) est préréglée avec un ensemble de valeurs (id, name) et la seconde (ListTable) est vide mais avec les mêmes colonnes.
La question est: Comment puis-je insérer dans ListTable une valeur qui vient de NameTable? Donc, si je change un nom dans le NameTable alors automagiquement les valeurs dans ListTable sont mises à jour aussi.
Y a-t-il INSERT pour cela ou est-ce que les tables doivent être créées d'une manière spéciale?
Essayé navigation sur le manuel, mais sans succès :(PostgreSQL: valeurs de ligne dynamiques (?)
Répondre
Hmmm ... Je suis un peu confus au sujet de exactement ce que vous voulez faire ou pourquoi, mais voici quelques pointeurs vers des choses que vous voudrez peut-être prendre regarder: héritage de table, triggers et règles
L'héritage de table dans postgresql permet à une table de partager les données d'une autre table. Donc, si vous ajoutez une ligne à la table de base, elle n'apparaîtra pas dans le tableau. table héritée, mais si vous ajoutez une ligne à la table héritée, elle apparaîtra dans les deux tables et les mises à jour des deux tables le refléteront dans les deux tables
Les déclencheurs vous permettent de configurer c ode qui sera exécuté lorsque des opérations d'insertion, de mise à jour ou de suppression se produisent sur une table. Cela vous permettrait d'ajouter le comportement que vous décrivez manuellement.
Les règles vous permettent de configurer une règle qui remplacera une requête correspondante par une autre requête lorsqu'une condition spécifique est remplie.
Si vous décrivez votre problème plus que dans la raison pour laquelle vous voulez que ce comportement, il pourrait être plus facile de proposer la bonne façon de faire les choses :-)
désolé, c'est un peu difficile à expliquer avec mes compétences inférieures en anglais et SQL: P mais fondamentalement en pseudo SQL, il irait quelque chose comme ça: INSERT INTO table1 (nom) VALUES (SELECT nom FROM table2 WHERE id = 1) Et alors quand vous changez le nom dans la table2, le nom dans la table1 changerait également. Je pense que l'héritage pourrait être la voie à suivre avec cela? – Seerumi
Oui, cela semble définitivement être la solution la plus élégante. – kasperjj
La suggestion pour l'utilisation de INSERT ... SELECT est le meilleur méthode pour passer d'une table à une autre dans la même base de données.
Cependant, il existe une autre façon de gérer les exigences de mise à jour automatique.
On dirait que ce sont vos critères:
- Le tableau A est défini avec des colonnes (x, y)
- (x, y) est unique
- Tableau B est également définie avec des colonnes (x, y)
- tableau a est un surensemble du tableau B
- Tableau B doit être chargé avec les données du tableau a et doit rester en phase avec mises à jour sur le tableau A.
C'est un emploi pour une clé étrangère avec l'option ON UPDATE CASCADE:
ALTER TABLE B ADD FOREIGN KEY (x,y) REFERENCES A (x,y) ON UPDATE CASCADE;
Maintenant, non seulement il table mise à jour automatique B lorsque le tableau A est mis à jour, le tableau B est protégé contre les contenant (x , y) les paires qui n'existent pas dans le tableau A. Si vous voulez que les enregistrements soient supprimés automatiquement de la table B lorsqu'ils sont supprimés du tableau A, ajoutez "ON UPDATE DELETE".
Avez-vous l'intention de modifier la table "esclave"? Êtes-vous sûr de ne pas avoir besoin d'une vue? – leonbloy