PostgreSQL:如何存储UUID值?

时间:2014-05-27 03:52:07

标签: postgresql uuid

我正在尝试使用PostgreSQL 9.3版本将UUID值存储到我的表中。

示例

create table test
(
   uno UUID,
   name text,
   address text
);

insert into test values(1,'abc','xyz');

注意:如何将整数值存储到UUID类型?

2 个答案:

答案 0 :(得分:8)

UUID的重点在于它们是自动生成的,因为使用虚拟的算法可以保证它们在您的表,数据库甚至数据库中都是唯一的。 UUID存储为16字节的基准,因此当您满足以下一个或多个条件时,您真的只想使用它们:

  1. 您需要无限期地永久存储数据。
  2. 当你有一个高度分布的数据生成系统(例如INSERTS在一个"系统"它分布在多台机器上,每台机器都有自己的本地数据库)时,中央ID生成不是可行的(例如,连接有限的移动数据收集系统,稍后上传到中央服务器)。
  3. 负载平衡,复制等方面的某些场景
  4. 如果其中一种情况适用于您,那么您最好将UUID用作主键并自动生成:

    CREATE TABLE test (
       uno     uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
       name    text,
       address text
    );
    

    像这样你永远不必担心UUID本身,这一切都是在幕后完成的。您的INSERT声明将变为:

    INSERT INTO test (name, address) VALUES ('abc','xyz') RETURNING uno;
    

    如果您想使用RETURNING子句来引用相关数据,那么{{1}}子句显然是可选的。

答案 1 :(得分:3)

不允许将cast integer简化为UUID类型。通常,UUID内部生成Postgres(有关此方法的详细信息,请参阅http://www.postgresql.org/docs/9.3/static/uuid-ossp.html)或通过客户端程序生成。{/ p>

如果您只需要桌面本身的唯一ID,但实际上并不需要UUID(这些是针对通用唯一性,跨表和服务器等。 ),您可以使用serial类型,为您创建隐式sequence,当您INSERT进入表格时会自动递增。