2010-06-09 4 views
41

Je ne peux pas sembler obtenir ce droit, je suis en train de modifier un champ pour être une clé étrangère, avec suppression en cascade ... qu'est-ce que je fais mal?PostgreSQL contrainte

ALTER TABLE my_table 
ADD CONSTRAINT $4 
FOREIGN KEY my_field 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 

Répondre

76

Il serait utile que vous a affiché le message d'erreur. Mais je pense que vous manquez juste la parenthèse:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 
+1

@Magnus Hagander, pourquoi est la « suppression en cascade » utile? Je ne comprends pas ... –

+4

@Stephane Voir la réponse acceptée à [cette question] (http://stackoverflow.com/questions/14141266/postgresql-foreign-key-on-delete-cascade) "_Une clé étrangère avec une suppression en cascade signifie que si un enregistrement dans la table parent est supprimé, alors les enregistrements correspondants dans la table enfant avec automatiquement être supprimés.Ceci est appelé une cascade delete._ "Cela ressemble à quelque chose que vous ne voudriez pas inclure automatiquement sauf vous vouliez lier les tables au lieu de simplement créer une référence. –

+0

@RichardD, lorsque vous ne l'incluez pas, vous devez utiliser le mot-clé CASCADE avec requête, et vous vous souvenez des conséquences alors :) – Line

12

Juste deviner: ne devriez-vous pas ajouter une clé étrangère au lieu d'une contrainte?

ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table; 

Postgresql reference

+12

une clé étrangère * est * une contrainte ... –

12

Je manque encore ici en quelque sorte une réponse à la colonne étrangère (foreign_field) spécifiée explicitement:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table (foreign_field) 
ON DELETE CASCADE; 
1

Cela fonctionne pour moi, j'ajouter la colonne à la table, puis ajouter la contrainte avec des références à l'autre table:

-- add column to table 
ALTER TABLE schema.table ADD COLUMN my_column type; 

-- add constraint to column 
ALTER TABLE schema.table ADD CONSTRAINT fk_name FOREIGN KEY (column) 
REFERENCES schema.table (column) MATCH SIMPLE 
ON UPDATE NO ACTION ON DELETE NO ACTION; 
Questions connexes