设为首页 收藏本站
查看: 1241|回复: 0

[经验分享] 我对PostgreSQL 的模式的一点理解

[复制链接]

尚未签到

发表于 2016-11-21 10:47:47 | 显示全部楼层 |阅读模式
  [作者:技术者高健@博客园  mail: luckyjackgao@gmail.com]
  PostgreSQL 的模式,我感觉是后来添加的概念。因为在物理存储上,是:
  base目录下, 一个子目录代表一个数据库。然后再进去,就是一个文件代表一个table了。
  虽然逻辑上,是  数据库 ->模式->表  但是物理结构确实 /数据库/表 的形式。
  那么模式的信息存储在什么地方呢?
  作实验如下:
  先建立模式:



postgres#create schema abababab;   
CREATE SCHEMA   
postgres=# \dn   
List of schemas   
Name   |  Owner      
----------+----------   
abababab | postgres   
public   | postgres   
(2 rows)   
  如果 这时候我们去看 PostgreSQL 的数据目录,搜索一番看看:
  [作者:技术者高健@博客园  mail: luckyjackgao@gmail.com]



[iyunv@localhost pgsql]# find ./ | xargs grep "abababab"   
Binary file ./data/pg_xlog/000000010000000000000001 matches   
  此时,由于内存和数据文件尚未同步,只有xlog中才有我们刚刚建立的模式的信息。
  过一段时间或者关闭数据库,再次来搜索:



[iyunv@localhost pgsql]# find ./ | xargs grep "abababab"   
Binary file ./data/base/12788/12649 matches   
Binary file ./data/base/12788/12647 matches   
Binary file ./data/pg_xlog/000000010000000000000001 matches   
[iyunv@localhost pgsql]#     
  我们来看看这个 12649 和  12647 都是什么东西:



postgres=# select relname from pg_class where relfilenode=12649;   
relname               
----------------------------   
pg_namespace_nspname_index   
(1 row)   
postgres=# select relname from pg_class where relfilenode=12647;   
relname        
--------------   
pg_namespace   
(1 row)   
  就是说 很可能 模式相关的信息,都放入到 pg_namespace 中了。我推测模式充其量也就是个逻辑分割。应该和权限划分有关。
  再在模式下建立表来看看:



postgres=# create table abababab.gaotab(id integer);     
postgres=# select relfilenode from pg_class where relname='gaotab';   
relfilenode     
-------------   
24608   
(1 row)      
postgres=#   

[iyunv@localhost 12788]# pwd   
/usr/local/pgsql/data/base/12788   
[iyunv@localhost 12788]#     
[iyunv@localhost 12788]# ll 24608   
-rw------- 1 postgres postgres 0 Oct 26 09:07 24608   
[iyunv@localhost 12788]#     
  可以看到刚刚建好的表,其所对应的文件是:24608, 而24608文件刚建好,为空。更无法容纳模式信息。
  因此,模式信息和表的信息是分别存放的。
  再来进一步验证一下:



postgres=# select * from pg_namespace;
nspname       | nspowner |               nspacl               
--------------------+----------+-------------------------------------
pg_toast           |       10 |
pg_temp_1          |       10 |
pg_toast_temp_1    |       10 |
pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}
public             |       10 | {postgres=UC/postgres,=UC/postgres}
information_schema |       10 | {postgres=UC/postgres,=U/postgres}
abababab           |       10 |
(7 rows)
postgres=#
  [作者:技术者高健@博客园  mail: luckyjackgao@gmail.com]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303382-1-1.html 上篇帖子: postgresql plpythonu例子 下篇帖子: (转载)postgresql navicat 客户端连接验证失败解决方法:password authentication failed for user
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表