В декларации Postgres FK указывается имя клиента, а не его тип?
Я не очень часто использую Postgres (я использовал другие БД), поэтому недавно я просматривал БД в pgAdmin и увидел странный синтаксис схемы, который я не могу найти в документации и хочу немного узнать об этом:
Итак, я вижу этот синтаксис:
CREATE TABLE table1
(
table1_id serial NOT NULL,
table2_fk_id t2_id NOT NULL, -- what is this line?
...
CONSTRAINT fk_table2_chm FOREIGN KEY (table2_fk_id)
REFERENCES table2 (t2_id_col) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
);
Что это за линия выше? Похоже, что внешний ключ col, вместо того, чтобы указывать int/int8, он задает произвольное имя t2_id
?
Тогда как в table2
столбец pk, на который ссылаются выше, имеет тип serial
и помечен t2_id_col
,
Это какой-то экзотический синтаксис? Или что-то связано с pgAdmin?
1 ответ
Чтобы сказать наверняка, запустите:
SELECT *
FROM pg_type
WHERE typname = 't2_id'
Если typtype
является d
это домен, созданный с CREATE DOMAIN
,
Или в pgAdmin просто проверьте список доменов в "Обозревателе объектов".
И да, это в некоторой степени связано с pgAdmin, так как он позволяет отображать serial
колонка как таковая. serial
не фактический тип, базовый тип integer
, Таким образом, ваш тип домена должен быть основан на integer
а также разрешить внешний ключ, который требует сопоставления базовых типов. Подробности:
Безопасно и чисто переименовывать таблицы, использующие последовательные первичные ключи столбцов в Postgres?