On Fri, Jan 21, 2005 at 02:52:01PM +0500, Mihail Nasedkin wrote:
> NG> Хрянятся в таблице, как еще один столбец. Узнать перед вставкой -- вряд
> NG> ли, особенно в многопользовательской среде.
>
> Это понятно всем, но в какой системной таблице хранятся ВСЕ OID's, а
> не только этой таблицы. Есть таблица "pg_catalog.pg_attribute" с полем
> "attrelid", где хранятся все системные OID's, но нужны именно
> пользовательские OID's.
attrelid в данном случае - лишь ссылка на pg_catalog.pg_class.oid.
ВСЕ системные таблицы имеют столбец oid, и именно это его основное
назначение.
> NG> А зачем все это? Я вот с радостью отключил OID по дефолту в 8.0, ибо
> NG> надобность в них сомнительная.
> Мое мнение в том, что система уникальности записи в пределах всех баз
> данных конкретной инсталляции PostgreSQL независимо от принадлежности
> к конкретной таблице является интересным для нестандартных решений в
> приложениях. Конечно можно такую задачу решать каждому разработчику
> своими силами и это реализовано в других SQL-серверах.
> Однако, если уникальность уже реализована на системном уровне сервера - это большой
> плюс PostgreSQL. Я всегда использую OID's.
Чем не вариант - уникальность с помощью SEQUENCE, тоже на уровне сервера?
Конечно, между базами уникальности не получится, а вот между всеми
таблицами в базе - вполне. К тому же, если не ошибаюсь, oid - поле
32-битное, тогда как значение в SEQUENCE - 64-битное, что даёт бОльшую
гарантию, что значение не переполнится на больших объёмах данных.
И можно заранее достать значение, которое больше никем использовано не
будет.
--
Fduch M. Pravking