LINUX.ORG.RU
ФорумAdmin

Пара вопросов по postgresql

 ,


0

3

Дока по постгресу 9.3.5
1) 5.3.6. Exclusion Constraints
Из текста нифига не понятно что это?

CREATE TABLE circles (
    c circle,
    EXCLUDE USING gist (c WITH &&)
);
И зачем оно нужно?

2) 5.4. System Columns там где про oid
размер oid 32 бита (максимум ~4 миллиарда)
на oid можно сделать ограничение на уникальность и использовать его в качестве примари кей, но количество строк в таблице не должно превышать ~4 миллиарда.
А если привысет? Что произойдет с базой? И как в таких обстоятельствах решать эту проблему(в теории)? Это лютое ССЗБ и придется переделывать таблицу и добавлять отдельную колонку для ключа с бигинт?

3) Для чего вообще на практике используются все эти системные колонки, ну с tableoid понятно, она при наследовании таблиц помогает определить из какой таблицы запись, а остальные?

★★★★★

2)

The oid type is currently implemented as an unsigned four-byte integer. Therefore, it is not large enough to provide database-wide uniqueness in large databases, or even in large individual tables. So, using a user-created table's OID column as a primary key is discouraged. OIDs are best used only for references to system tables.

я так понимаю, если ты создаешь таблицу WITH OIDS, то туда больше 4 миллиардов строк не засунешь, будет выкидывать ошибку.

И как в таких обстоятельствах решать эту проблему(в теории)?

Создать новую таблицу идентичную старой с id bigint, залить содержимое старой в новую, удалить foreign keys на эту таблицу, удалить старую, переименовать новую, добавить foreign keys (изменив oid на id) переписать запросы.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)

Exclusion Constraints — исключающее ограничение

CREATE TABLE circles (
    c circle,
    EXCLUDE USING gist (c WITH &&)
);

в эту таблицу не получится вставить две строки с пересекающимися между собой окружностями c. Ещё для примера, i int, exclude (i with =) — аналог unique (i).

Eshkin_kot ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.