powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тип данных для Primary key
12 сообщений из 12, страница 1 из 1
Тип данных для Primary key
    #38918078
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите какой тип данных лучше всего использовать для первичного ключа.
В Oracle почти для всех(!) таблиц независимо от кол-ва записей и их прироста я использовал тип Number (38) + Sequience + Trigger Before Insert. Возможно не лучшее решение, но проблем не было.

В PostgreSQL можно ли подойти к вопросу так:
либо serial, либо bigserial в зависимости от кол-ва записей и их прироста?

Если я правильно понял, при использовании типа serial (до 2147483647) автоматом создается sequience с максимальным значением 9223372036854775807, что позволяет потом безболезненно перейти на bigserial.

Что можете подсказать из личного опыта?
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #38918095
полагаю...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
startupлибо serial, либо bigserial это псевдо типы, которые соответствуют int4 и int8. Соответственно они занимают фиксированное место при хранении. В отличие от ораклового number переменной длины, который занимает, грубо, количество значащих цифр пополам плюс один байт.
безболезненность смены типа ключа, на который висят фк, зависит от личного болевого порога.
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39028941
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полагаю... В отличие от ораклового number переменной длины, который занимает, грубо, количество значащих цифр пополам плюс один байт.
Если я правильно понял аналог ораклового number(38) будет тип данных numeric(38). Он тоже переменной длины. Но почему, судя по постам на форуме, для PRIMARY KEY почти все используют 4-батный serial и 8-байтный bigserial?
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39028947
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupполагаю... В отличие от ораклового number переменной длины, который занимает, грубо, количество значащих цифр пополам плюс один байт.
Если я правильно понял аналог ораклового number(38) будет тип данных numeric(38). Он тоже переменной длины. Но почему, судя по постам на форуме, для PRIMARY KEY почти все используют 4-батный serial и 8-байтный bigserial?

потому что numeric(N) на порядок медленее в работе чем int/bigint и занимает куда больше места и не дает никаких преимуществ.
а bigserial хватет всегда на всех мыслимые применения.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39028971
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupполагаю... В отличие от ораклового number переменной длины, который занимает, грубо, количество значащих цифр пополам плюс один байт.
Если я правильно понял аналог ораклового number(38) будет тип данных numeric(38). Он тоже переменной длины. Но почему, судя по постам на форуме, для PRIMARY KEY почти все используют 4-батный serial и 8-байтный bigserial?
да собственно во всех субд - и sql server и всяких дб2 и файерфоксах - почти везде любят PK вида int4 или int8.
Так что я бы спросил почему в Оракле такие особеные все????
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39028987
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А использование UUID для PRIMARY KEY может конкурировать с Serial / Bigserial?
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39028990
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakТак что я бы спросил почему в Оракле такие особеные все????Что положено Юпитеру, не положено быку.
В оракле нет хранимых intов. Но и... издержки по объемам на нумерацию миллиона записей будут поменьше int4, а где значения за миллиарды, там уже сидеть на int4 стремно.
Насчет "на порядок медленее" достаточно спорный вопрос, зависящий от низкоуровневой реализации операций сравнения на равенство и копирования (присвоения).
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39029124
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.Ivan DurakТак что я бы спросил почему в Оракле такие особеные все????Что положено Юпитеру, не положено быку.
В оракле нет хранимых intов. Но и... издержки по объемам на нумерацию миллиона записей будут поменьше int4, а где значения за миллиарды, там уже сидеть на int4 стремно.
Насчет "на порядок медленее" достаточно спорный вопрос, зависящий от низкоуровневой реализации операций сравнения на равенство и копирования (присвоения).

Я конкретно про PostgreSQL и скорости сравнения и арифметики для int4 и numeric(N).
Никакие низкоуровневые операции не помогут если надо работать со скоростью сравнения integer значений в регистрах передаваемых по значению.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39029125
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupА использование UUID для PRIMARY KEY может конкурировать с Serial / Bigserial?

Ни по скорости ни по размеру поля нет. 4 байта (8 байт) для Int4(8) и значения в регистрах процессора передаваемые by value
и сложный тип длинной в 16 байт не влезающий в регистры и передаваемый по ссылке.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39029140
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupЧто можете подсказать из личного опыта?

Из личного опыта.
Если знаешь, что таблица будет справочником с фиксированным количеством значений, то можно serial.
В остальных случаях, по моему, лучше использовать bigserial.

Пару раз наткнулся на проблемы с serial.
Т.к. у PostgreSQL строгая типизация, то придется менять не только тип поля, но и SEQUENCE к нему.
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39029284
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulЕсли знаешь, что таблица будет справочником с фиксированным количеством значений, то можно serial.личный опыт предполагает субъективные плюсы и минусы.
для условно статических справочников предпочитаю строковые мнемокоды, так как потом приходится писать запросы с условиями на говорящие значения и работать с сырыми данными.
...
Рейтинг: 0 / 0
Тип данных для Primary key
    #39029347
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.mad_nazgulЕсли знаешь, что таблица будет справочником с фиксированным количеством значений, то можно serial.личный опыт предполагает субъективные плюсы и минусы.
для условно статических справочников предпочитаю строковые мнемокоды, так как потом приходится писать запросы с условиями на говорящие значения и работать с сырыми данными.

Вот здесь можно свести дискуссию к флуду "естественный ключ vs суррогатный ключ".
По мне так проще работать с суррогатными ключами на основе числовой последовательности.

Если вам удобнее ч/з мнемокоды, то я ничего не имею против.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тип данных для Primary key
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]