云数据库 GAUSSDB-语句行为:search_path

时间:2024-12-19 14:11:21

search_path

参数说明:当一个被引用对象没有指定模式时,此参数设置模式搜索顺序。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:由一个或多个模式名构成的字符串,不同的模式名用逗号隔开。

  • 设置为'"$user",public'时,支持共享数据库(没有用户具有私有模式和所有共享使用public),用户私有模式和这些功能的组合使用。可以通过改变默认搜索路径来获得其他效果,无论是全局化的还是私有化的。
  • 设置为空字符串('')的时候,系统会自动转换成一对双引号。
  • 设置的内容中包含双引号时,系统会认为是不安全字符,会将每个双引号转换成一对双引号。

默认值:'"$user",public'。在PDB场景内,若未设置该参数,则继承来自全局的设置。

$user表示与当前会话用户名同名的模式名,如果这样的模式不存在,$user将被忽略。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:

  • 当前会话存放临时表的模式时,可以使用别名pg_temp将它列在搜索路径中,如'pg_temp,public'。存放临时表的模式始终会作为第一个被搜索的对象,排在pg_catalog和search_path中所有模式的前面,即具有第一搜索优先级。建议用户不要在search_path中显式设置pg_temp。如果在search_path中指定了pg_temp,但不是在最前面,系统会提示设置无效,pg_temp仍被优先搜索。通过使用别名pg_temp,系统只会在存放临时表的模式中搜索表、视图和数据类型这样的数据库对象,不会在里面搜索函数或运算符这样的数据库对象。
  • 系统表所在的模式pg_catalog,总是排在search_path中指定的所有模式前面被搜索,即具有第二搜索优先级(pg_temp具有第一搜索优先级)。建议用户不要在search_path中显式设置pg_catalog。如果在search_path中指定了pg_catalog,但不是在最前面,系统会提示设置无效,pg_catalog仍被第二优先搜索。
  • 当没有指定一个特定模式而创建一个对象时,它们被放置到以search_path为命名的第一个有效模式中。当搜索路径为空时,会报错误。
  • 可以通过SQL函数current_schema()检测当前搜索路径的有效值。这和search_path的值不完全相同,因为current_schema()显示search_path中首位有效的模式名称。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0359.html