CASE1:
Se você precisar criar chave estrangeira ao criar uma nova tabela
CREATE TABLE table1(
id SERIAL PRIMARY KEY,
column1 varchar(n) NOT NULL,
table2_id SMALLINT REFERENCES table2(id)
);
Os comandos acima criarão uma tabela com o nome 'table1' e três colunas denominadas 'id' (chave primária), 'column1', 'table2_id' (chave estrangeira da tabela1 que faz referência à coluna de identificação da tabela2).
DATATYPE 'serial' criará a coluna que usa esse tipo de dados como uma coluna gerada automaticamente. Ao inserir valores na tabela, você não precisa mencionar essa coluna ou pode dar 'padrão' sem aspas no local do valor.
Uma coluna de chave primária é sempre adicionada ao índice da tabela com o valor 'tablename_pkey'.
Se a chave estrangeira for adicionada no momento da criação da tabela, A CONSTRAINT será adicionado com o padrão '(present_table_name) _ (Foreign_key_id_name) _fkey'.
Ao adicionar uma chave estrangeira, precisamos inserir a palavra-chave 'REFERENCES' ao lado do nome da coluna, porque queremos dizer ao postgres que esta coluna faz referência a uma tabela e, ao lado das referências, temos que dar a tabela para referência e entre colchetes, dar o nome da coluna da tabela referenciada, geralmente chaves estrangeiras são fornecidas como colunas de chave primária.
CASO 2:
Se você deseja chave estrangeira para uma tabela existente na coluna existente
ALTER TABLE table1
ADD CONSTRAINT table1_table2_id_id_fkey
FOREIGN KEY (table2_id) REFERENCES table2(id);
NOTA: colchetes '()' após FOREIGN KEY e REFERENCES tabel2 são obrigatórios ou o postgres gerará erro.