| From: | Chris Browne <cbbrowne(at)acm(dot)org> | 
|---|---|
| To: | pgsql-general(at)postgresql(dot)org | 
| Subject: | Re: UUID column as pimrary key? | 
| Date: | 2011-01-06 16:31:38 | 
| Message-ID: | 87zkreat91.fsf@cbbrowne.afilias-int.info | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-general | 
dennis(dot)jenkins(dot)75(at)gmail(dot)com (dennis jenkins) writes:
> The UUID itself is 128 bits.  Some of those bits are pre-determined.
> I don't recall, but I think that a "normal" UUID has 121 bits of
> randomness.
That doesn't match RFC 4122 very well...
It indicates 5 forms of UUIDs:
1) Time-based, where about 1/2 the data comes from local timestamp data,
   and 48 bits come from MAC address (or similar)
2) "DCE Security" (about which it says little)
3) Name-based, using MD5 hashing
4) Randomly generated UUIDs (which are quite likely what you're thinking
   about) have 122 bits of random data
5) Name-based, using SHA-1 hashing
The reasonable choices for a would-be artificial primary key seem to be
1 and 3; in a distributed system, I'd expect to prefer 1, as the time +
host data are likely to eliminate the "oh, it might just randomly match"
problem.
Note the set of functions in the uuid-ossp contrib module fit this, down
to omitting Version 2 :-).
test(at)localhost->  \df+ public.uuid_generate*
                                                                     List of functions
 Schema |        Name        | Result data type |    Argument data types    |  Type  | Volatility |  Owner   | Language |    Source code     | Description
--------+--------------------+------------------+---------------------------+--------+------------+----------+----------+--------------------+-------------
 public | uuid_generate_v1   | uuid             |                           | normal | volatile   | postgres | c        | uuid_generate_v1   |
 public | uuid_generate_v1mc | uuid             |                           | normal | volatile   | postgres | c        | uuid_generate_v1mc |
 public | uuid_generate_v3   | uuid             | namespace uuid, name text | normal | immutable  | postgres | c        | uuid_generate_v3   |
 public | uuid_generate_v4   | uuid             |                           | normal | volatile   | postgres | c        | uuid_generate_v4   |
 public | uuid_generate_v5   | uuid             | namespace uuid, name text | normal | immutable  | postgres | c        | uuid_generate_v5   |
(5 rows)
-- 
"I'm all for advancement.  However  rich text on an ephemeral media is
a totally brain-dead idea.  Nobody  in their right mind would take the
effort to prettyfy documents that are going to be gone in a few days."
-- Jay Denebeim <denebeim(at)deepthot(dot)ml(dot)org>
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Michael Satterwhite | 2011-01-06 16:44:29 | Re: Help with trigger | 
| Previous Message | Anthony | 2011-01-06 16:22:18 | Re: UUID column as pimrary key? |