我正在尝试使用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数据库中:
我读过如果Postgres以--single
模式运行,这可能不起作用,但我不知道如何测试它或是否有任何方法可以执行此操作。
有人知道如何解决这个问题?还是其他选择? 这样使用是个好主意:
SET DEFAULT uuid_in(md5(random()::text || now()::text)::cstring);
答案 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" ;