【问题标题】:How to generate uuid with PostgreSQL 8.4.4 on Ubuntu 10.04?如何在 Ubuntu 10.04 上使用 PostgreSQL 8.4.4 生成 uuid?
【发布时间】:2011-04-19 09:22:41
【问题描述】:

我在 Ubuntu 10.04 上运行 PostgreSQL 8.4.4。

我正在尝试生成 uuid,但找不到方法。

/usr/share/postgresql/8.4/contrib/uuid-ossp.sql 中确实有 uuid-ossp.sql

当我尝试这就是我得到的:

postgres=# SELECT uuid_generate_v1();
ERROR:  function uuid_generate_v1() does not exist
LINE 1: SELECT uuid_generate_v1();
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

有什么想法吗?

【问题讨论】:

    标签: postgresql ubuntu uuid ubuntu-10.04


    【解决方案1】:

    contrib 中的内容不会自动运行。您必须自己运行它才能安装这些功能。我不知道 8.4 版本,但在 8.3 版本中,它似乎只为每个数据库安装它,所以在 psql 中打开您正在使用的数据库并发出命令\i /usr/share/postgresql/8.4/contrib/uuid-ossp.sql

    【讨论】:

    • 是的,它是每个数据库的。您可以在 template1 数据库中安装所有内容,以确保创建使用此数据库作为其模板(这是默认设置)的每个新数据库,包括所有 contrib 模块。
    • 对于当前版本的 Postgresql(我认为是 9.0+),contrib 模块被打包为扩展。扩展很简洁,因为它们可以进行版本控制、命名空间和卸载。例如,您可以使用以下命令在“uuid”架构中安装 uuid 函数:“create extension uuid-ossp schema uuid”。然后你可以访问像“uuid.uuid_generate_v4()”这样的函数。
    • apt-get install postgresql-contrib 然后psql -f /usr/share/postgresql/8.4/contrib/uuid-ossp.sql nameofdatabase - 只是为了懒惰;)
    【解决方案2】:

    我在我的 PostgreSQL 游记中看到了这一点。它需要 pgcrypto contrib 模块。

    CREATE OR REPLACE FUNCTION generate_uuid() RETURNS UUID AS
    $$
    SELECT ENCODE(GEN_RANDOM_BYTES(16), 'hex')::UUID
    $$ LANGUAGE SQL IMMUTABLE;
    

    【讨论】:

    • 对于我们这些在课堂后面的人来说,要真正将东西安装到 /contrib 中,请执行 sudo apt-get install postgresql-contrib。 @paul 谢谢。
    • 您不应将该函数声明为IMMUTABLE,因为您不希望缓存读取而不是函数评估。将您的函数声明为VOLATILE 以确保每次调用该函数时都会执行该函数。更多解释请参见postgresql.org/docs/8.3/interactive/xfunc-volatility.html
    • 我在执行这个函数时得到这个:错误:重复的键值违反了唯一约束“relation_pkey”详细信息:键(id)=(5a0cd072-6463-2cb0-9de9-42aabb85f270)已经存在。如上所述更改为 VOLATILE 可以解决问题。
    • 这不会生成有效的 UUID,请参阅 RFC 4122。某些位标记 UUID 版本,这些位将是随机的,并且大部分时间可能无效。
    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多