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/
版权声明:本博客文章均系本人原创,转载请注名出处