代码之家  ›  专栏  ›  技术社区  ›  ZhongHua Yan

一个奇怪的CREATE扩展,错误为postgres

  •  1
  • ZhongHua Yan  · 技术社区  · 7 年前

    我初始化app\u auth数据库,使用app\u 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 回复  |  直到 7 年前
        1
  •  3
  •   a_horse_with_no_name    7 年前

    你可以 move the extension 到其他架构:

    alter extension pgcrypto set schema app_auth;
    

    是否有安全的方法初始化数据库架构app\u auth以进行测试。。。通过

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

    DROP SCHEMA IF EXISTS app_auth CASCADE;
    DROP EXTENSION IF EXISTS pgcrypto;
    CREATE SCHEMA app_auth;
    CREATE EXTENSION pgcrypto WITH SCHEMA app_auth;