62
задан 4 June 2018 в 16:29

5 ответов

Добавить ограничение к столбцу 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);
97
ответ дан 31 October 2019 в 13:23

Можно сделать это в Пост-ГРЭС на одной строке:

ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER REFERENCES auth_user (id);

Вы не должны вручную определять имя. Пост-ГРЭС автоматически назовет это ограничение "links_chatpicmessage_auth_user_id_fkey".

65
ответ дан 31 October 2019 в 13:23

Я знаю, что этот ответ является путем поздно, и я понимаю, что это совпадает с btubbs остротой, просто немного более описательной...

Принятие Вы хотите сослаться на первичный ключ в таблице auth_user и что ключевое имя является 'идентификатором'.

я использую этот синтаксис:

ALTER TABLE links_chatpicmessage 
ADD COLUMN sender some_type,
ADD FOREIGN KEY (sender) REFERENCES auth_user(id);

Примечание: some_type = [вводят то же как отправителя в таблице auth_user]

7
ответ дан 31 October 2019 в 13:23

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);
4
ответ дан 31 October 2019 в 13:23

ссылка внешнего ключа **** для ограничения ****

ALTER TABLE table_name ADD существующего столбца fkey_name FOREIGN KEY (идентификатор) ССЫЛКИ ref_table (идентификатор)

-1
ответ дан 31 October 2019 в 13:23

Другие вопросы по тегам:

Похожие вопросы: