Я не могу понять, что это правильно, я пытаюсь изменить поле, чтобы оно было внешним ключом, с каскадным удалением ... что я делаю не так?
ALTER TABLE my_table ADD CONSTRAINT $4 FOREIGN KEY my_field REFERENCES my_foreign_table ON DELETE CASCADE;
Будет полезно, если вы отправите сообщение об ошибке. Но я думаю, что вы просто пропустите скобку:
ALTER TABLE my_table ADD CONSTRAINT my_fk FOREIGN KEY (my_field) REFERENCES my_foreign_table ON DELETE CASCADE;
Просто угадайте: разве вы не должны добавлять внешний ключ вместо ограничения?
ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table;
Ссылка Postgresql
Мне все еще не хватает здесь ответа с явно заданным внешним столбцом (foreign_field):
foreign_field
ALTER TABLE my_table ADD CONSTRAINT my_fk FOREIGN KEY (my_field) REFERENCES my_foreign_table (foreign_field) ON DELETE CASCADE;
Это работает для меня, я добавляю столбец в таблицу, а затем добавляю ограничение со ссылками на другую таблицу:
-- 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;