一个奇怪的CREATE EXTENSION与postgres的错误

问题描述 投票:0回答:1

我初始化app_auth数据库,使用app_auth模式创建扩展pgcrypto,但测试显示我在公共模式中创建了扩展,为什么?

-- init
DROP SCHEMA IF EXISTS app_auth CASCADE;
CREATE SCHEMA app_auth;
CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA app_auth;

-- test1: without schema
SET search_path = app_auth;
SELECT gen_random_bytes(10); -- "ERROR: function gen_random_bytes(integer) does not exist"

-- test2: with schema app_auth
SET search_path = app_auth;
SELECT app_auth.gen_random_bytes(10); -- "ERROR: function gen_random_bytes(integer) does not exist"

-- test3: with schema public
SET search_path = app_auth;
SELECT public.gen_random_bytes(10); -- "it works"
sql postgresql schema
1个回答
2
投票

你可以move the extension到不同的架构:

alter extension pgcrypto set schema app_auth;

是否有一种安全的方法来初始化数据库模式app_auth以使测试...通过?

另一种选择是首先删除扩展名

DROP SCHEMA IF EXISTS app_auth CASCADE;
DROP EXTENSION IF EXISTS pgcrypto;
CREATE SCHEMA app_auth;
CREATE EXTENSION pgcrypto WITH SCHEMA app_auth;
© www.soinside.com 2019 - 2024. All rights reserved.