bar*_*rit 11 sql database postgresql
select uuid_generate_v4() as one, uuid_generate_v4() as two;
Run Code Online (Sandbox Code Playgroud)
"一个"uuid和"两个"uuid是平等的!
CREATE TABLE "TB"
(
"Id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"Title" character varying NOT NULL,
CONSTRAINT "TB_Class_ID" PRIMARY KEY ("Id")
);
Run Code Online (Sandbox Code Playgroud)
postgresql 9.0 pgAdmin 1.12.3
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
Run Code Online (Sandbox Code Playgroud)
要么
insert into "TB" ("Title") values ('111');
insert into "TB" ("Title") values ('111');
insert into "TB" ("Title") values ('111');
Run Code Online (Sandbox Code Playgroud)
结果:
ERROR: duplicate key value violates unique constraint "TB_Class_ID"
DETAIL: Key ("Id")=(12ab6634-995a-4688-9a9a-ee8c3fe24395) already exists.
Run Code Online (Sandbox Code Playgroud)
而
postgreSQL maestro 9.2.0.4
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
Run Code Online (Sandbox Code Playgroud)
结果:1行受影响;
我知道maestro一个接一个地添加了记录,但为什么uuid_generate_v4()在两次调用后返回相同的值?(在pgAdmin案例中).
如何通过一个请求添加多行?
Pet*_*aut 13
在过去的某个时刻,uuid_generate_*
函数被错误地标记为IMMUTABLE
,这将导致您显示的行为.这已在所有最新的次要版本中修复,但您必须重新运行安装脚本(uuid-ossp.sql
)以获取更新的函数定义.(您还可以查看安装脚本以验证您是否拥有最新版本.应标记这些功能VOLATILE
.)
Boh*_*ian 12
在给定的事务中,该函数uuid_generate_v4()
返回相同的值.
当语句组合在一起并作为"一个命令"运行时,有一个事务,因此每次调用都uuid_generate_v4()
将返回相同的值.
"修复"这两种方法是:
BEGIN; COMMIT
对中的每个用法(这是一个麻烦 - 除非必须,否则不要这样做)为了避免重复,您可以使用如下生成:
select md5(random()::text || clock_timestamp()::text)::uuid AS new_id, id from table;
Run Code Online (Sandbox Code Playgroud)
但是,请注意:这会生成 UUID,但它不是 UUIDv4。查看更多:在 Postgres 中为 Insert 语句生成 UUID?