postgresql Postgres UUID类型错误

dgtucam1  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(3)|浏览(336)

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

id uuid PRIMARY KEY DEFAULT uuid_generate_v4()

但我得到了:
错误:函数uuid_generate_v4()不存在提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型强制转换。
我尝试添加schema,如下所示:id uuid PRIMARY KEY DEFAULT public.uuid_generate_v4()(如此处的注解所示)
我还检查了扩展是否在那里(SELECT * FROM pg_available_extensions;),是的,我在PostgreSQL数据库中安装了它:

我读到,如果Postgres运行在--single模式,这可能不起作用,但我不知道如何测试它,或者是否有任何方法可以做到。
有人知道我该怎么解决这个问题吗?或者其他选择?像这样使用是个好主意吗:

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

vulvrdjw1#

由于未找到函数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应该可用。

sshcrbum

sshcrbum2#

在我的例子中,我需要像这样将模式添加到函数调用中: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" ;
cgvd09ve

cgvd09ve3#

有时候你只需要走一条线:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

就在创建表之前

相关问题