And*_*rus 7 postgresql guid plpgsql
如何在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;
Run Code Online (Sandbox Code Playgroud)
从
http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html
试着
select getguid()
union all
select getguid()
Run Code Online (Sandbox Code Playgroud)
但它返回相同的值
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题,以便返回唯一的行?
Pat*_*ick 22
PostgreSQL具有uuid-ossp标准发行版附带的扩展,它有5个标准算法用于生成uuids.请注意,a guid是Microsoft的a版本uuid,从概念上讲它们是相同的.
CREATE EXTENSION "uuid-ossp";
Run Code Online (Sandbox Code Playgroud)
然后:
SELECT uuid_generate_v4();
Run Code Online (Sandbox Code Playgroud)
另请注意,一旦安装了扩展,PostgreSQL就会有一个实际的二进制uuid类型,长度为16个字节.使用二进制类型比使用等效文本快得多,并且占用的空间更少.如果确实需要字符串版本,可以简单地将其转换为text:
SELECT uuid_generate_v4()::text;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23655 次 |
| 最近记录: |