我正在尝试用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);
3条答案
按热度按时间vulvrdjw1#
由于未找到函数
uuid_generate_v4
,因此表明未加载扩展uuid-ossp
pg_available_extensions
列出了可用的扩展 *,但不一定加载 *。查看加载的扩展列表,查询视图
pg_extension
如下:要加载
uuid-ossp
扩展,请运行以下命令:注意:这将需要超级用户权限。
成功加载
uuid-ossp
扩展后,您应该在pg_extension
视图中看到它&函数uuid_generate_v4
应该可用。sshcrbum2#
在我的例子中,我需要像这样将模式添加到函数调用中:
app.uuid_generate_v4()
而不是这样:
uuid_generate_v4()
我通过运行以下查询找到了每个扩展的模式:
cgvd09ve3#
有时候你只需要走一条线:
就在创建表之前