如何在PostgreSQL中创建guid

时间:2015-07-06 13:54:42

标签: postgresql plpgsql guid

如何在Postgres 9.0 +中以Windows格式创建GUID?

我尝试过功能

CheckBoxList chkhbs = (CheckBoxList)GridView1.Rows[e.NewEditIndex].FindControl("chkGVHobbies");
string hbs = Convert.ToString(dt.Rows[0]["hobbies"]);
        string[] str = hbs.Split(',');
        foreach (string item in str)
        {
            foreach (ListItem gvchk in chkhbs.Items)
            {
                if (gvchk.Text==item)
                {
                    gvchk.Selected = true;
                }
            }

来自

http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html

尝试

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;

但它返回相同的值

select getguid()
union all
select getguid()

如何修复此问题以便返回唯一的行?

1 个答案:

答案 0 :(得分:18)

PostgreSQL具有uuid-ossp扩展,它附带标准发行版,它有5个标准算法用于生成uuid s。请注意,guiduuid的Microsoft版本,从概念上讲它们是相同的。

CREATE EXTENSION "uuid-ossp";

然后:

SELECT uuid_generate_v4();

另请注意,一旦安装了扩展,PostgreSQL就会有一个实际的二进制uuid类型,长度为16个字节。使用二进制类型比使用等效文本快得多,并且占用的空间更少。如果您确实需要字符串版本,只需将其转换为text

即可
SELECT uuid_generate_v4()::text;