Добавить ограничение к столбцу It должно, существует сначала в таблицу нет никакой команды в Postgresql, который можно использовать, который добавит столбец и добавит ограничение одновременно. Это должны быть две отдельных команды. можно сделать это использование после команд:
Первый делают как:
ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;
я использую integer
в качестве типа здесь, но это должен быть тот же тип id
столбец auth_user
таблица.
Затем Вы добавляете ограничение
ALTER TABLE links_chatpicmessage
ADD CONSTRAINT fk_someName
FOREIGN KEY (sender)
REFERENCES auth_user(column_referenced_name);
ADD CONSTRAINT fk_someName
, часть этой команды именование Ваше ограничение поэтому, если Вы последний на потребности зарегистрировать его с некоторым инструментом, которые создают Вашу модель, у Вас будет именованное ограничение вместо случайного имени.
Также это служит целям администраторов, таким образом, DBA знает, что ограничение от той таблицы.
Обычно мы называем его с некоторой подсказкой о том, куда это прибыло из того, туда, где это ссылается на Вашем случае, это было бы fk_links_chatpicmessage_auth_user
так любой, который видит, что это имя будет знать точно, без чего это ограничение, делают сложный запрос на INFORMATION_SCHEMA для обнаружения.
РЕДАКТИРОВАНИЕ
, Как упомянуто ответом @btubbs можно на самом деле добавить столбец с ограничением в одной команде. Как так:
alter table links_chatpicmessage
add column sender integer,
add constraint fk_test
foreign key (sender)
references auth_user (id);
Можно сделать это в Пост-ГРЭС на одной строке:
ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER REFERENCES auth_user (id);
Вы не должны вручную определять имя. Пост-ГРЭС автоматически назовет это ограничение "links_chatpicmessage_auth_user_id_fkey".
Я знаю, что этот ответ является путем поздно, и я понимаю, что это совпадает с btubbs остротой, просто немного более описательной...
Принятие Вы хотите сослаться на первичный ключ в таблице auth_user и что ключевое имя является 'идентификатором'.
я использую этот синтаксис:
ALTER TABLE links_chatpicmessage
ADD COLUMN sender some_type,
ADD FOREIGN KEY (sender) REFERENCES auth_user(id);
Примечание: some_type = [вводят то же как отправителя в таблице auth_user]
CONSTRAINT
пункт является дополнительным. Я предлагаю опустить его и всегда позволять PostgreSQL автоназвать ограничение, не называя его Вы получите логическое имя
"links_chatpicmessage_sender_fkey" FOREIGN KEY (sender) REFERENCES auth_user(id)
, Это - то, что Вы, вероятно, захотите знать если INSERT
или UPDATE
сбои из-за ограничительного нарушения.
Все они несколько документируются на ALTER TABLE
ALTER TABLE links_chatpicmessage
ADD COLUMN sender int,
ADD [CONSTRAINT foo] FOREIGN KEY (sender) REFERENCES auth_user(id);
, Это является составным и транзакционным. Можно выйти два ALTER
операторы на той же таблице путем разделения этих двух операторов с ,
.
-- assumes someone has already added the column or that it already exists
ALTER TABLE links_chatpicmessage
ADD COLUMN sender int;
ALTER TABLE links_chatpicmessage
ADD [CONSTRAINT foo] FOREIGN KEY (sender) REFERENCES auth_user(id);
ссылка внешнего ключа **** для ограничения ****
ALTER TABLE table_name ADD существующего столбца fkey_name FOREIGN KEY (идентификатор) ССЫЛКИ ref_table (идентификатор)