CASE1:
если вам нужно создать внешний ключ при создании новой таблицы
CREATE TABLE table1(
id SERIAL PRIMARY KEY,
column1 varchar(n) NOT NULL,
table2_id SMALLINT REFERENCES table2(id)
);
Приведенные выше команды создадут таблицу с именем «table1» и тремя столбцами с именами «id» (первичный ключ), «column1», «table2_id» (внешний ключ table1, который ссылается на столбец id таблицы table2).
DATATYPE 'serial' сделает столбец, который использует этот тип данных, как автоматически сгенерированный столбец, при вставке значений в таблицу вам вообще не нужно упоминать этот столбец, или вы можете указать 'default' без кавычек в месте значения.
Столбец первичного ключа всегда добавляется в индекс таблицы со значением tablename_pkey.
Если внешний ключ добавляется во время создания таблицы, добавляется CONSTRAINT с шаблоном '(present_table_name) _ (foreign_key_id_name) _fkey'.
При добавлении внешнего ключа мы должны ввести ключевое слово «REFERENCES» рядом с именем столбца, потому что мы хотим сообщить postgres, что этот столбец ссылается на таблицу, а затем рядом со ссылками мы должны дать таблицу для справки и в скобках дать имя столбца ссылочной таблицы, обычно внешние ключи задаются в качестве столбцов первичного ключа.
СЛУЧАЙ 2:
Если вы хотите, чтобы внешний ключ существующей таблицы существующего столбца
ALTER TABLE table1
ADD CONSTRAINT table1_table2_id_id_fkey
FOREIGN KEY (table2_id) REFERENCES table2(id);
ПРИМЕЧАНИЕ: скобки '()' после FOREIGN KEY и REFERENCES tabel2 являются обязательными, иначе postgres выдаст ошибку.