【发布时间】:2015-07-30 13:04:17
【问题描述】:
两部分问题:
在行内存储文本/varchars 的 Postgresql 行为是什么? 行外?我是否正确地认为使用默认设置,所有列将始终存储在行中,直到达到 2kB 大小?
我们是否可以控制上述行为?有什么方法可以更改特定列/表的阈值,或强制特定列始终存储在行外?
我已经阅读了 PostGresql Toast 文档 (http://www.postgresql.org/docs/8.3/static/storage-toast.html),但我没有看到任何更改阈值的选项(默认值似乎是 2kB-for-row)或强制列始终存储输出- of-row(EXTERNAL 只允许它,但不强制它)。
我找到了解释如何在 SQL Server (https://msdn.microsoft.com/en-us/library/ms173530.aspx) 上执行此操作的文档,但没有看到 PostGresql 的任何类似内容。
如果有人对我的动机感兴趣,我有一个表,其中混合了短一致性列(ID、时间戳等)、一个 varchar(200) 列和一个 text/varchar(max) 列,它的长度可能非常大。我目前将两个 varchars 都存储在一个单独的表中,只是为了允许对短一致的列进行有效的存储/查找/扫描。
然而,这很痛苦,因为我必须经常进行连接才能读取所有数据。我真的很想将上述所有字段存储在同一个表中,并告诉 Postgresql 始终强制将 2 个 VARCHAR 存储在行外。
【问题讨论】:
标签: sql database postgresql text varchar