这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
为何建议为用户指定默认 SCHEMA
为了不用用户创建对象时,需要显示地指定 schema,如:
1 | sql复制代码--不需要这样 |
PostgreSql中,所有新建的数据库都会默认自带一个 public 模式,所有用户均可在这个模式下创建管理自己的对象,且在数据库中创建表、视图等基本对象时,若没有指定模式,这些对象默认也会存放在 pubilc 模式下。(用户名与模式名同名除外)
详情参考:juejin.cn/post/698719…
上述情况发生的原因
上述原因在于 postgresql 数据库中的默认搜索路径:search_path。
1 | sql复制代码oa=# show search_path; |
观察上述搜索路径可看到,用户连入数据库后首先会找寻跟自己用户名同名的 SCHEMA,若能找到,就它作为当前 schema,后续创建的所有对象都会存入到这个 schema 下。(前提是用户要有访问这个schema 的权限)
1 | sql复制代码--测试名字与schema名不同的用户,即使有访问 schema 的权限,连入时也不是当前 schema。 |
如何指定上述情况中普通用户 syd 的默认 schema
1 | sql复制代码oa=# alter user syd set search_path to rl; |
总结
1 | sql复制代码--设置 apply_owner 用户连入任何数据库,当前默认 schema 都为 apply(数据库中没有这 schema 时,默认 schema 为 public) |
本文转载自: 掘金