Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 用户不能使用扩展名“;uuid ossp“;_Postgresql_Search Path_Postgresql Extensions - Fatal编程技术网

Postgresql 用户不能使用扩展名“;uuid ossp“;

Postgresql 用户不能使用扩展名“;uuid ossp“;,postgresql,search-path,postgresql-extensions,Postgresql,Search Path,Postgresql Extensions,我正在开发一个应用程序,其中我决定对主键和外键使用UUID。为此,我使用了扩展“uuid ossp”,它在开发环境中运行良好 现在,我正在安装测试环境。数据库设置由客户制作的脚本强制执行。结构是标准的:管理用户、应用程序用户、应用程序命名空间等 我可以使用管理员帐户创建扩展: $ psql mydb -U [admin_user] mydb=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION mydb=# select

我正在开发一个应用程序,其中我决定对主键和外键使用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_用户和app_用户都在同一个数据库中。app_用户可以“查看”扩展,但不能使用它:

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

有什么想法吗?

您需要在
搜索路径中安装扩展的架构

默认情况下,在安装时将扩展安装到“当前”架构-安装角色的当前
search\u路径设置

那么你最后在哪里安装的呢?见:

您可以通过以下方式重新定位扩展:

与更多解释相关:


如果在
psql

\dx uuid-ossp
您将看到安装扩展(以及函数
uuid\u generate\u v4
)的模式

确保

  • app\u user
    在其
    search\u路径中具有架构(例如,您可以使用
    ALTER user app\u user SET current\u schema=…
    为所有未来会话更改此架构)

  • app\u用户
    具有执行该功能的权限(默认情况下通常允许)

  • app\u用户
    在扩展架构上具有
    USAGE
    权限


在搜索路径中添加了“public”。成功了。谢谢:)我遇到了这个问题,我一直在检查我的db_用户的搜索路径,它看起来很正常,我用我的admin_用户检查了扩展的安装位置,它说它在公共架构中。结果是admin_用户的默认数据库与我为db_用户设置的数据库不同。我使用了
psql-ddb\u user\u数据库
,并在那里添加了扩展。。。确实如此,itI还从我的用户路径中删除了类似于
${user}
(不记得了)的内容。不知道会导致什么问题……您的回答向我建议了另一个同样有效的解决方案:
使用模式my_app_user_SCHEMA创建扩展“uuid ossp”
@ArnaudDenoyelle:在应用程序用户的模式中安装可能意味着其他用户的
搜索路径中没有该模式。通常不是你想要的。扩展通常进入
公共
模式或在常规
搜索路径
中设置的某些专用模式。
ALTER EXTENSION uuid-ossp SET SCHEMA public;
\dx uuid-ossp