Search Postgresql Archives

Re: UUID column as pimrary key?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



dennis.jenkins.75@xxxxxxxxx (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@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@xxxxxxxxxxxxxxx>

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux