Почему PostgreSQL не использует целые числа без знака для идентификаторов? Разве это не даст вдвое больше возможных записей? - PullRequest
0 голосов
/ 24 января 2019

Согласно этой документации , PostgreSQL не поддерживает целые числа без знака.

Хотя я понимаю, что это делает систему разрешения типов менее сложной, я не понимаю, насколько это практичноскажем, идентификаторы с автоинкрементом.

Не приведет ли добавление целого числа без знака к идентификатору автоинкремента к увеличению числа возможных записей в два раза при использовании обычного int?(4294967296 вместо 2147483648)

Я знаю, что это означает только разницу между 1 битом, но это все же немного, что вы никогда не будете использовать на этом этапе.

Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

По соглашению идентификаторы - это положительные целые числа, начинающиеся с 1 (и, насколько мне известно, стандарты не соблюдаются, но я не удивлюсь, если это так).Тип данных PostgreSQL serial реализует это соглашение и значения «автоматически сгенерированные».

Если вы действительно хотите реализовать свой собственный подход, вы можете сделать это следующим образом:

create sequence epictable_seq
    MINVALUE -2147483648 
    start -2147483648 
    increment 1
    NO MAXVALUE
    CACHE 1;
CREATE TABLE epictable
(
    mytable_key    INT unique not null,
    moobars        VARCHAR(40) not null,
    foobars        DATE
);
insert into epictable(mytable_key, moobars,foobars) 
values
  (nextval('epictable_seq'),'delicious moobars','2012-05-01')
, (nextval('epictable_seq'),'worldwide interblag','2012-05-02')
;
2 rows affected
select * 
from epictable
;
mytable_key | moobars             | foobars   
----------: | :------------------ | :---------
-2147483648 | delicious moobars   | 2012-05-01
-2147483647 | worldwide interblag | 2012-05-02

db <> fiddle здесь

Также см. этот прежний ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...