В декларации 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?

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