Postgresql:用于text / varchar的In-Row与Out-out-row
两部分问题:
>什么是Postgresql行为用于存储文本/ varchars in-row vs 我已阅读PostGresql Toast文档(http://www.postgresql.org/docs/8.3/static/storage-toast.html),但我没有看到任何更改阈值的选项(默认似乎是2kB-for-row)或强制列始终存储在行外(EXTERNAL)只允许它,但不强制执行它). 我找到了解释如何在SQL Server(https://msdn.microsoft.com/en-us/library/ms173530.aspx)上执行此操作的文档,但没有看到类似PostGresql的任何内容. 如果有人对我的动机感兴趣,我有一个表混合了短一致列(ID,时间戳等),一列是varchar(200),一列是text / varchar(max),它可以长度非常大.我目前将两个varchars存储在一个单独的表中,只是为了在短一致列上进行有效的存储/查找/扫描. 然而,这是一种痛苦,因为我经常不得不做连接来读取所有数据.我真的想将所有上述字段存储在同一个表中,并告诉Postgresql永远强制存储2个VARCHAR. 解决方法
编辑答案
对于问题的第一部分:你是对的(参见例如this). 对于问题的第二部分:存储列的标准方法是压缩可变长度文本字段(如果它们的大小超过2KB),并最终将它们存储到一个名为“TOAST table”的单独区域中. 您可以通过对列使用以下命令向系统提供有关如何存储字段的“提示”: ALTER TABLE YourTable ALTER COLUMN YourColumn SET STORAGE (PLAIN | EXTENDED | EXTERNAL | MAIN) 从manual开始:
由于手册在这一点上并不完全明确,这是我的解释:在任何情况下,关于如何存储字段的最终决定留给系统,给出以下约束: >不能存储任何字段,以便行的总大小结束 在这些假设下,确保列的所有值都存储在行外的唯一方法是使用TOAST_TUPLE_THRESHOLD的值重新编译系统,该值小于列的任何值的最小值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – Xamarin.Forms:如何避免在MVVM绑定中对字
- React Native android release 发布
- ContentProvider-SqliteDatabase实现增删查改(1)
- ruby-on-rails – Rails:库模块和一组控制器的名
- postgreSQL清除所有表 或 所有表中数据
- 在gtk文本字段中交换背景颜色(gtkmm C)
- ruby-on-rails – 当列类型为JSON时,Rails simpl
- cocos2d html5 3.8.1 .修复Cocos2d Particle Bui
- c# – 如何以编程方式将RadComboBox与数据源设置
- c – 在容器元素上应用函数所需的更好名称