(私は Heroku Postgres で作業しています)
いくつかのシステムで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 パフォーマンスへの影響
それは常にあなたのワークロードに依存します。
整数の主キーには、類似データがより近くに位置するという局所性の利点があります。WHERE id between 1 and 10000
これは、たとえば、ロックの競合が悪化するなどの範囲タイプのクエリに役立ちます。
読み取りワークロードが完全にランダムであり、常に主キーのルックアップを行う場合、測定可能なパフォーマンスの低下はありません。より大きなデータ型に対してのみ料金が発生します。
このテーブルにたくさん書き込みますか? このテーブルは非常に大きいですか? 私はこれを測定していませんが、その指標を維持することに意味がある可能性があります。ただし、多くのデータセットでは UUID で問題ありません。UUID を識別子として使用すると、いくつかの優れた特性があります。
最後に、私はこれについて議論したりアドバイスしたりするのに最も適した人物ではないかもしれません.UUID PKで十分な大きさのテーブルを実行したことがなく、それが問題になったことはありません. YMMV。(そうは言っても、アプローチで問題に遭遇した人の話を聞きたいです!)