Задать вопрос
@pavel_the_man

Должен ли тип данных внешнего ключа совпадать с типом данных первичного ключа?

В первой таблице, у меня первичный ключ на поле с типом данных serial.
Во второй таблице, я хочу на одно поле повесить ссылку, но не знаю какой тип данных должен быть у этого поля: serial или integer?

Если использовать integer, то Postgres отрабатывает корректно, и это меня сбивает с толку. Я ожидал увидеть ошибку, тогда я бы сразу понял, что надо serial. А Postgres оказывается в обоих случаях даёт создать таблицы.

Собственнно, в этом и вопрос, должен ли тип данных совпадать, или можно разные.

Вообще, я в первой таблице использовал serial исключительно чтобы руками не прописывать айдишники в INSERT INTO. На сколько это было правильное решение? Может стоило в первую таблицу поставить тип данных integer?
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
serial - это и есть integer, а типа данных serial вообще не существует. Это просто синтаксический сахар вокруг неявного создания sequence из времён, когда GENERATED ALWAYS AS IDENTITY не было ни в стандарте ни в postgresql.

Обратно к вопросу: тип данных может не совпадать. Но обычно это ошибка схемы данных, нежели запланированное различие.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы