前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CREATE TABLE ... WITH storage_parameter [= value] [, ... ]

CREATE TABLE ... WITH storage_parameter [= value] [, ... ]

作者头像
yzsDBA
发布2020-10-28 09:34:30
8610
发布2020-10-28 09:34:30
举报
文章被收录于专栏:PostgreSQL研究与原理解析

创建表时,可以通过WITH子句指定storage_parameter,这个存储参数指什么?在代码中如何实现?

1、storage_parameter参数说明参考:https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS

2、代码中如何实现?

在Relation结构体的rd_options成员变量指定,以fillfactor为例,在插入时,如何判断该页的填充量:

代码语言:javascript
复制
heap_insert->
buffer = RelationGetBufferForTuple(relation, heaptup->t_len,
|        InvalidBuffer, options, bistate,&vmbuffer, NULL);
|--  saveFreeSpace = RelationGetTargetPageFreeSpace(relation,
|        HEAP_DEFAULT_FILLFACTOR);
RelationPutHeapTuple(relation, buffer, heaptup,
        (options & HEAP_INSERT_SPECULATIVE) != 0);

插入时,heap_insert调用RelationGetBufferForTuple对记录进行插入,而调用RelationGetTargetPageFreeSpace根据指定的填充度判断这个页预留空间多少。

代码语言:javascript
复制
#define RelationGetTargetPageFreeSpace(relation, defaultff) \
  (BLCKSZ * (100 - RelationGetFillFactor(relation, defaultff)) / 100)

#define RelationGetFillFactor(relation, defaultff) \
  ((relation)->rd_options ? \
   ((StdRdOptions *) (relation)->rd_options)->fillfactor : (defaultff))

如果创建表时,指定了填充度,则使用指定的值((StdRdOptions *) (relation)->rd_options)->fillfactor,否则使用默认值HEAP_DEFAULT_FILLFACTOR即填充度100%

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档