如何在Ubuntu 10.04上使用PostgreSQL 8.4.4生成uuid?

如何在Ubuntu 10.04上使用PostgreSQL 8.4.4生成uuid?,postgresql,ubuntu,uuid,ubuntu-10.04,Postgresql,Ubuntu,Uuid,Ubuntu 10.04,我正在用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_

我正在用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.

有什么想法吗?

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

我在postgresql旅行中看到了这一点。它需要pgcrypto contrib模块

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

是的,每个数据库都有。您可以在template1数据库中安装所有内容,以确保创建使用此数据库作为其模板的每个新数据库(这是默认设置),包括所有contrib模块。对于Postgresql的当前版本(我认为是9.0+),contrib模块打包为扩展。扩展是整洁的,因为它们可以进行版本控制、命名和卸载。例如,您可以使用以下命令在“uuid”模式中安装uuid函数:“创建扩展uuid ossp模式uuid”。然后访问“uuid.uuid_generate_v4()”之类的函数。执行
apt get install postgresql contrib
,然后执行
psql-f/usr/share/postgresql/8.4/contrib/uuid-ossp.sql nameofdatabase
-仅适用于懒惰者;)对于我们这些在课程后面的人来说,要真正将东西安装到/contrib中,请执行sudo apt get install postgresql contrib@paul谢谢。您不应该将函数声明为不可变的,因为您不希望使用缓存读取而不是函数求值。将函数声明为VOLATILE,以确保每次调用时都执行该函数。请参阅以获得进一步的解释。我在执行此函数时得到此结果:错误:重复的键值违反了唯一约束“relationship_pkey”详细信息:键(id)=(5a0cd072-6463-2cb0-9de9-42aabb85f270)已存在。但是,如上所述更改为VOLATILE解决了这个问题。这不会生成有效的UUID,请参阅RFC4122。某些位标记UUID版本,这些位是随机的,在大多数情况下可能无效。