首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PostGres的UUID缩写()

PostGres的UUID缩写()
EN

Stack Overflow用户
提问于 2016-09-11 20:00:04
回答 1查看 7.7K关注 0票数 4

嗨,由于商业软件的许可成本,我有一个基于MYSQL的开发,并考虑迁移到PostGres。

在MYSQL中,我有多个表,在这些表中,我依赖于使用UUID_SHORT()函数作为主键。参见链接:短信息

PostGres有类似于UUID_SHORT函数的功能吗?我正在寻找一个统一的ID,而不感兴趣的序列。另外,基于系统时间的东西,比如UUID_SHORT,将是非常棒的。下面也是我在PHP中使用的类函数,当我想在MYSQL中获得主键插入的唯一ID时。

感谢您的评论,因为这将是转移到PostGres的主要原因。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getUniqueId(){
        //return unique id

        $temp_id = strval(uniqid());
        $temp = $this->conn->prepare('CREATE TEMPORARY TABLE tempId (temp_id VARCHAR(30) PRIMARY KEY, id BIGINT UNSIGNED)');
        $temp->execute();
        $temp = $this->conn->prepare('INSERT INTO tempId(temp_id, id) VALUES(:temp_id, UUID_SHORT())');
        $temp->bindParam(':temp_id', $temp_id, PDO::PARAM_STR);
        $temp->execute(); 
        $temp = $this->conn->prepare('SELECT id FROM tempId WHERE temp_id = :temp_id ');
        $temp->bindParam(':temp_id', $temp_id, PDO::PARAM_STR);
        $temp->execute(); 
        $tempResult= $temp->fetchAll(PDO::FETCH_ASSOC);
        $temp = $this->conn->prepare('DROP TEMPORARY TABLE tempId');
        $temp->execute();
        $temp_id = $tempResult[0]['id'];     
        return $temp_id;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-11 22:35:10

PostgreSQL有一个包含4个算法的"uuid-ossp",每个算法都实现了一个正式的UUID算法,其中第四个算法是随机的,为122个比特(其余6位将其标识为一个版本4的UUID)。所有这些都返回一个16字节的UUID值。

(请注意,根据定义,64位值根本不是UUID。您提供的MySQL引用基本上已经解释过了:只有在不破坏一组规则的情况下才能保证是唯一的。也许他们应该称它为"LUID“,因为它肯定不是通用的唯一的。这是一种类似于微软邪恶的调整(采用一种定义的标准,并给它自己的扭曲)。但我离题了。)

在PostgreSQL中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE EXTENSION "uuid-ossp";

安装了扩展后,您可以使用uuid数据类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE my_table (
    id    uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
    ...
END;

然后您可以在表中插入一行并一次检索主键:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO my_table (...) VALUES (...)
RETURNING id;

上述语句将以16字节二进制值的形式返回uuid值,不确定如何在PHP中管理该值。

您还可以只生成一个uuid值而不插入一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT uuid_generate_v4();
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39443176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文