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

时间:2018-01-16 14:25:24

标签: sql postgresql schema

我初始化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"

1 个答案:

答案 0 :(得分: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;