编辑:不再需要扩展了。您现在可以使用函数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 | [...]
有什么想法吗?
psql -d db_user_database
并在那里添加了扩展...问题解决了。 - crackpotHouseplant