适用于PostGres的UUID SHORT()

嘉泰

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

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

PostGres是否具有与UUID_SHORT函数类似的功能?我正在寻找一个uniqiue ID,对序列不感兴趣。同样,基于系统时间的内容(如UUID_SHORT)也会很棒。下面也是我要在MYSQL中获取主键插入的唯一ID时在PHP中使用的类函数。

感谢任何评论,因为这是转移到PostGres或不转移到PostGres的主要原因。

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;
    }
帕特里克

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

(请注意,按照定义,一个64位值根本不是UUID。您提供的MySQL参考基本上已经对其进行了解释:只有在不违反一组规则的情况下,才能保证它是唯一的。也许他们应该将其称为“ LUID”,因为它绝对不是世界上唯一的。这是一种微调(采用已定义的标准,并根据自己的喜好进行调整),听起来像Microsoft的邪恶之举。

在PostgreSQL中:

CREATE EXTENSION "uuid-ossp";

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

CREATE TABLE my_table (
    id    uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
    ...
END;

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

INSERT INTO my_table (...) VALUES (...)
RETURNING id;

上面的语句将以uuid16字节的二进制值形式返回该值,不知道如何在PHP中对其进行管理。

您也可以只生成一个uuid值而无需插入行:

SELECT uuid_generate_v4();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章