PostgreSQL创建表未指定模式名时的默认模式选择问题
PostgreSQL创建表未指定模式名时的默认模式选择问题
嘿,这个问题问到点子上了,不少刚上手PostgreSQL的同学都会疑惑这个默认行为~
其实PostgreSQL是靠**search_path(搜索路径)**参数来决定默认模式的,它会按照这个参数里的模式顺序,找到你有创建表权限的第一个模式,把新表建在里面。
默认情况下,search_path的配置是这样的:
"$user", public
我给你拆解开说更清楚:
- 首先会优先检查和当前登录用户名完全同名的模式。比如你用
lisa这个用户登录数据库,刚好库里有个lisa模式,而且你对这个模式有CREATE权限,那你执行CREATE TABLE demo(id serial);的时候,这个demo表就会默认建在lisa模式下。 - 如果没有同名模式,或者你没权限在同名模式里创建对象,PostgreSQL就会自动落到第二个默认选项——
public模式。这也是平时最常见的情况,大部分人不会特意创建和用户名同名的模式,所以新表都会乖乖待在public里。
如果你想确认自己当前的搜索路径,可以跑这条命令:
SHOW search_path;
要是你想临时修改当前会话的默认搜索顺序,也很简单:
SET search_path TO my_custom_schema, public;
这样之后创建的表就会优先往my_custom_schema里放(前提是你有权限)。
备注:内容来源于stack exchange,提问作者Surendrareddy Jakkireddy
相关产品推荐
相关产品推荐

