CASO1:
si necesita crear una clave externa mientras crea una nueva tabla
CREATE TABLE table1(
id SERIAL PRIMARY KEY,
column1 varchar(n) NOT NULL,
table2_id SMALLINT REFERENCES table2(id)
);
Los comandos anteriores crearán una tabla con el nombre 'table1' y tres columnas llamadas 'id' (Clave primaria), 'column1', 'table2_id' (clave foránea de table1 que hace referencia a la columna id de table2).
DATATYPE 'serial' hará que la columna que usa este tipo de datos como una columna generada automáticamente, cuando inserte valores en la tabla no necesite mencionar esta columna en absoluto, o puede dar 'default' sin comillas en el lugar del valor.
Siempre se agrega una columna de clave principal al índice de la tabla con el valor 'tablename_pkey'.
Si se agrega una clave foránea en el momento de la creación de la tabla, se agrega una CONSTRAINT con el patrón '(present_table_name) _ (foreign_key_id_name) _fkey'.
Al agregar una clave foránea, debemos ingresar la palabra clave 'REFERENCES' al lado del nombre de la columna porque queremos decirle a los postgres que esta columna hace referencia a una tabla y luego, al lado de las referencias, tenemos que dar la tabla como referencia y entre paréntesis dar el nombre de la columna de la tabla a la que se hace referencia, generalmente las claves foráneas se dan como columnas de clave principal.
CASO 2:
si desea una clave externa para una tabla existente en una columna existente
ALTER TABLE table1
ADD CONSTRAINT table1_table2_id_id_fkey
FOREIGN KEY (table2_id) REFERENCES table2(id);
NOTA: los corchetes '()' después de FOREIGN KEY y REFERENCES tabel2 son obligatorios o, de lo contrario, postgres arrojará un error.