gpt4 book ai didi

postgresql - 用户不能使用分机 "uuid-ossp"

转载 作者:行者123 更新时间:2023-11-29 11:19:07 25 4
gpt4 key购买 nike

编辑:不再需要扩展。您现在可以使用 gen_random_uuid() 函数生成 uuid,该函数自 PostgreSQL 14 起默认可用。

我正在开发一个应用程序,我决定在其中为主键和外键使用 UUID。为此,我使用了在开发环境中运行良好的扩展“uuid-ossp”。

现在,我正在安装测试环境。数据库设置由客户制作的脚本强加。结构是标准的:管理员用户、应用程序用户、应用程序命名空间等。

我可以使用管理员帐户创建扩展:

$ psql mydb -U [admin_user]

mydb=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION

mydb=# select uuid_generate_v4();
uuid_generate_v4
--------------------------------------
23e45b57-a658-41a5-8661-0cc06568eff8

但是当我与数据库应用程序用户连接时,我无法生成 uuid :

$ psql mydb -U [app_user]

SELECT uuid_generate_v4();

mydb=> select uuid_generate_v4();
ERROR: function uuid_generate_v4() does not exist

admin_user 和 app_user 都在同一个数据库中。 app_user 可以“看到”扩展但不能使用它:

bdd3001=> select * from pg_catalog.pg_extension;
extname | [...]
-----------+-
plpgsql | [...]
uuid-ossp | [...]

有什么想法吗?

最佳答案

您需要在 search_path 中安装扩展的架构。

默认情况下,扩展会在安装时安装到“当前”架构 - 安装角色的当前 search_path 设置。

那么你最终安装在哪里呢?参见 pg_extension.extnamespace :

SELECT e.extname
, n.nspname AS home_schema_of_extension
, extrelocatable AS extension_can_be_relocated
FROM pg_catalog.pg_extension e
JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace;

extname | home_schema_of_extension | extension_can_be_relocated
----------+--------------------------+---------------------------
plpgsql | pg_catalog | f
intarray | public | t
tablefunc | public | t
pg_trgm | public | t
...

您可以使用 ALTER EXTENSION 重新定位分机:

ALTER EXTENSION uuid-ossp SET SCHEMA public;

相关更多解释:

关于postgresql - 用户不能使用分机 "uuid-ossp",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com