如何在 PostgreSQL 中创建 guid
How to create guid in PostgreSQL
如何在 Postgres 9.0+ 中创建 Windows 格式的 GUID?
我试过函数
CREATE or REPLACE FUNCTION public.getguid() RETURNS varchar AS $BODY$
DECLARE
v_seed_value varchar(32);
BEGIN
select
md5(
inet_client_addr()::varchar ||
timeofday() ||
inet_server_addr()::varchar ||
to_hex(inet_client_port())
)
into v_seed_value;
return (substr(v_seed_value,1,8) || '-' ||
substr(v_seed_value,9,4) || '-' ||
substr(v_seed_value,13,4) || '-' ||
substr(v_seed_value,17,4) || '-' ||
substr(v_seed_value,21,12));
END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
来自
http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html
尝试过
select getguid()
union all
select getguid()
但它 returns 相同的值
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
如何解决此问题以便返回唯一行?
PostgreSQL 有标准发行版附带的 uuid-ossp
扩展,它有 5 个用于生成 uuid
的标准算法。请注意,guid
是 uuid
的 Microsoft 版本,从概念上讲,它们是同一回事。
CREATE EXTENSION "uuid-ossp";
然后:
SELECT uuid_generate_v4();
另请注意,安装扩展后,PostgreSQL 将具有实际的二进制 uuid
类型,长度为 16 字节。使用二进制类型比使用等效的文本类型快得多,而且占用更少 space。如果确实需要字符串版本,只需将其转换为 text
:
SELECT uuid_generate_v4()::text;
PostgreSQL 13+
您现在可以使用内置函数 gen_random_uuid()
获取版本 4 随机 UUID。
如何在 Postgres 9.0+ 中创建 Windows 格式的 GUID?
我试过函数
CREATE or REPLACE FUNCTION public.getguid() RETURNS varchar AS $BODY$
DECLARE
v_seed_value varchar(32);
BEGIN
select
md5(
inet_client_addr()::varchar ||
timeofday() ||
inet_server_addr()::varchar ||
to_hex(inet_client_port())
)
into v_seed_value;
return (substr(v_seed_value,1,8) || '-' ||
substr(v_seed_value,9,4) || '-' ||
substr(v_seed_value,13,4) || '-' ||
substr(v_seed_value,17,4) || '-' ||
substr(v_seed_value,21,12));
END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
来自
http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html
尝试过
select getguid()
union all
select getguid()
但它 returns 相同的值
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
如何解决此问题以便返回唯一行?
PostgreSQL 有标准发行版附带的 uuid-ossp
扩展,它有 5 个用于生成 uuid
的标准算法。请注意,guid
是 uuid
的 Microsoft 版本,从概念上讲,它们是同一回事。
CREATE EXTENSION "uuid-ossp";
然后:
SELECT uuid_generate_v4();
另请注意,安装扩展后,PostgreSQL 将具有实际的二进制 uuid
类型,长度为 16 字节。使用二进制类型比使用等效的文本类型快得多,而且占用更少 space。如果确实需要字符串版本,只需将其转换为 text
:
SELECT uuid_generate_v4()::text;
PostgreSQL 13+
您现在可以使用内置函数 gen_random_uuid()
获取版本 4 随机 UUID。