PostgreSQL中关于SCHEMA和SEARCH_PATH的一些技巧
条评论1. extension最好放在单独的schema里,就像这样
create schema "extension_schema"; |
2.业务上不相干的表,建议也放在单独的schema中,比如这样
create schema "metadata_schema"; |
3.[可选]从数据库设计的角度来说,不同schema中的表名是可以重名的。但是我们有时候要反其道而行之,就是要任何情况下表名不同,方便编写SQL的时候,可以方便的省略schema。这样就需要借助触发器了。像这样
create function table_create() |
CREATE EVENT TRIGGER etgr_table_create |
4.现在schema已经够多了,但是用户连接到PostgreSQL的时候,默认只会去$user跟public这两个schema去寻找表,如果要访问别的schema还要在用到的时候采用schema.table的方式。这点在配置文件postgresql.conf中也可以看到
#search_path = '"$user", public' # schema names |
聪明的你已经猜到,只需要修改配置文件中的这个search_path,就可以让用户访问表的时候不必带上schema。
但是我倒不建议这么做。因为这个配置文件是全局的。我们可能会有多个database运行于此,而他们有着不相干的schema,都写在这个配置文件里面显然不合适。我们应该通过下面的方式设置
alter database "your_database" set search_path = metadata_schema,metadata_schema,platform_schema,public; |
这样就可以精确到对一个库设置它的默认search_path了。设置完毕后,重新建立数据库连接,执行show search_path;可以查看设置结果。
除了上面通过alter database之外,alter role也能起到类似的效果,还靠小伙伴们自行发掘了。
本文标题:PostgreSQL中关于SCHEMA和SEARCH_PATH的一些技巧
文章作者:牧云踏歌
发布时间:2018-08-26
最后更新:2018-08-26
原始链接:http://www.kankanzhijian.com/2018/08/26/postgresql_schema_and_search_path/
版权声明:本博客文章均系本人原创,转载请注名出处