web-dev-qa-db-fra.com

Contrainte postgresql

Je n'arrive pas à comprendre cela, j'essaie de modifier un champ pour qu'il soit une clé étrangère, avec suppression en cascade ... que fais-je de mal?

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

Il serait utile que vous publiiez 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;
81
Magnus Hagander

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;

référence Postgresql

13
Anonymous Coward

Il me manque encore en quelque sorte ici une réponse avec une colonne étrangère (foreign_field) explicitement spécifié:

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

Cela fonctionne pour moi, j'ajoute la colonne à la table, puis j'ajoute 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;