PostgreSQL中Schema前缀对存储过程及内部调用对象的作用问询
问题解答
问题1:存储过程的内部调用作用域
调用dbo.parentProc时,其内部不带Schema前缀的子存储过程调用(childA/childB/childC)不会自动限定到dbo Schema,而是按照当前默认搜索路径(此处为public)查找对象。
关键逻辑:
- 不带Schema前缀的对象解析,依赖的是当前生效的搜索路径,而非调用父存储过程时指定的Schema。
- 只有当
dbo.parentProc被定义为SECURITY DEFINER(安全定义者)类型时,才会使用存储过程定义者的搜索路径;否则默认沿用调用者的搜索路径(即public)。
问题2:视图的内部调用作用域
结果与存储过程场景完全一致:dbo.parentProc内部不带Schema前缀调用的视图,同样不会自动限定到dbo Schema,而是按照当前默认搜索路径(public)匹配视图。
视图和存储过程在无Schema前缀调用时的解析规则统一,不会因父对象的Schema前缀调用而继承该Schema的作用域,核心仍由搜索路径决定。
内容的提问来源于stack exchange,提问作者mleko
相关产品推荐
相关产品推荐

