Postgres UUID类型错误

时间:2017-04-28 17:30:52

标签: database postgresql

我正在尝试使用PostgreSQL在表中创建一个UUID id。我尝试过:

id uuid PRIMARY KEY DEFAULT uuid_generate_v4()

但我明白了:

  

错误:函数uuid_generate_v4()不存在   提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我尝试添加以下架构:id uuid PRIMARY KEY DEFAULT public.uuid_generate_v4()(如评论here中所示)

我还检查了扩展名是否存在(SELECT * FROM pg_available_extensions;),是的,我将它安装在PostgreSQL数据库中:

enter image description here

我读过如果Postgres以--single模式运行,这可能不起作用,但我不知道如何测试它或是否有任何方法可以执行此操作。

有人知道如何解决这个问题?还是其他选择? 这样使用是个好主意:

SET DEFAULT uuid_in(md5(random()::text || now()::text)::cstring);

2 个答案:

答案 0 :(得分:5)

由于找不到函数uuid_generate_v4,因此表示未加载扩展程序uuid-ossp

pg_available_extensions列出了可用的扩展名,但未加载

查看已加载的扩展名列表,查询视图pg_extension

select * from pg_extension;

要加载uuid-ossp扩展名,请执行以下操作:

CREATE EXTENSION "uuid-ossp";

注意:这需要超级用户权限。

成功加载uuid-ossp扩展程序后,您应该在pg_extension视图&函数uuid_generate_v4应该可用。

答案 1 :(得分:0)

就我而言,我需要将架构添加到函数调用中,如下所示:app.uuid_generate_v4()

而不是这个:uuid_generate_v4()

我通过运行此查询找到了每个扩展的架构:

SELECT 
pge.extname,
pge.extversion,
pn.nspname AS schema
FROM pg_extension pge 
JOIN pg_catalog.pg_namespace pn ON pge.extnamespace = pn."oid" ;
相关问题