Ответ 1
(Я работаю над Postgres Heroku)
Мы используем UUID в качестве основных ключей на нескольких системах, и он отлично работает.
Я рекомендую вам использовать расширение uuid-ossp
, и даже если postgres генерируют UUID для вас:
heroku pg:psql
psql (9.1.4, server 9.1.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
dcvgo3fvfmbl44=> CREATE EXTENSION "uuid-ossp";
CREATE EXTENSION
dcvgo3fvfmbl44=> CREATE TABLE test (id uuid primary key default uuid_generate_v4(), name text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
dcvgo3fvfmbl44=> \d test
Table "public.test"
Column | Type | Modifiers
--------+------+-------------------------------------
id | uuid | not null default uuid_generate_v4() name | text |
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
dcvgo3fvfmbl44=> insert into test (name) values ('hgmnz');
INSERT 0 1
dcvgo3fvfmbl44=> select * from test;
id | name
--------------------------------------+-------
e535d271-91be-4291-832f-f7883a2d374f | hgmnz
(1 row)
Показатели эффективности EDIT
Это всегда будет зависеть от вашей рабочей нагрузки.
Integer первичный ключ имеет преимущество локальности, где подобные данные сближаются. Это может быть полезно, например, для запросов типа диапазона, таких как WHERE id between 1 and 10000
, хотя конфликт блокировок хуже.
Если ваша прочитанная рабочая нагрузка абсолютно случайна, поскольку вы всегда выполняете первичный поиск ключей, не должно быть никаких измеримых ухудшений производительности: вы платите только за больший тип данных.
Вы много пишете в этой таблице, и эта таблица очень большая? Возможно, хотя я не измерял это, что есть последствия для поддержания этого индекса. Для множества наборов данных UUID просто хороши, и использование UUID в качестве идентификаторов имеет некоторые приятные свойства.
Наконец, я не могу быть наиболее квалифицированным человеком для обсуждения или совета по этому поводу, так как я никогда не запускаю таблицу достаточно большой с ПК UUID, где это стало проблемой. YMMV. (Сказав это, я хотел бы услышать о людях, которые сталкиваются с проблемами с этим подходом!)