PostgreSQL:如何存储UUID值?

Mee*_*eem 3 postgresql uuid

我试图使用PostgreSQL 9.3版本将UUID值存储到我的表中.

示例:

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

insert into test values(1,'abc','xyz');
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*ick 9

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

  1. 您需要无限期地永久存储数据.
  2. 当您拥有高度分布的数据生成系统时(例如,INSERTS在分布在多台机器上的单个"系统",每个机器都有自己的本地数据库),中央ID生成是不可行的(例如,连接有限的移动数据收集系统,以后上传到中央服务器).
  3. 负载平衡,复制等中的某些场景.

如果其中一种情况适用于您,那么您最好将UUID用作主键并自动生成:

CREATE TABLE test (
   uno     uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
   name    text,
   address text
);
Run Code Online (Sandbox Code Playgroud)

像这样你永远不必担心UUID本身,它都是在幕后完成的.你的INSERT陈述将成为:

INSERT INTO test (name, address) VALUES ('abc','xyz') RETURNING uno;
Run Code Online (Sandbox Code Playgroud)

RETURNING如果要使用该子句引用相关数据,则该子句显然是可选的.

  • 值得一提的是,v4 uuid 不可排序,因此会导致索引碎片。将 v4 uuids 用于初级保健并不是一个好主意 - v1 uuids 更好,因为编码使用可排序的时间戳。 (2认同)