os: centos 7.4
db: postgresql 10.10
set storage
postgres=# create table blog (id int,title text,content text,memo text);
CREATE TABLE
postgres=#
postgres=# \d+ blog
Table "public.blog"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
---------+---------+-----------+----------+---------+----------+--------------+-------------
id | integer | | | | plain | |
title | text | | | | extended | |
content | text | | | | extended | |
memo | text | | | | extended | |
postgres=# alter table blog alter title set storage main;
ALTER TABLE
postgres=# alter table blog alter content set storage external;
ALTER TABLE
postgres=# alter table blog alter memo set storage extended;
ALTER TABLE
postgres=#
postgres=# \d+ blog
Table "public.blog"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
---------+---------+-----------+----------+---------+----------+--------------+-------------
id | integer | | | | plain | |
title | text | | | | main | |
content | text | | | | external | |
memo | text | | | | extended | |
plain:避免壓縮或行外存儲。
main:允許壓縮,不允許行外存儲。
external:允許行外存儲,不允許壓縮。
extended:允許壓縮和行外存儲。
SET STORAGE
這種形式爲一列設置存儲模式。這會控制這列是會被保持在線內還是放在一個 二級TOAST表中,以及數據是否應被壓縮。
對於 integer之類的定長、線內、未壓縮值必須使用 PLAIN。
MAIN用於線內、可壓縮的 數據。
EXTERNAL用於外部的、未壓縮數據。
而 EXTENDED用於外部的、壓縮數據。對於大部分支持 非-PLAIN存儲的數據類型,EXTENDED 是默認值。
使用EXTERNAL將會讓很大的 text和bytea之上的子串操作運行得更快, 但是代價是存儲空間會增加。注意SET STORAGE本身並不改變 表中的任何東西,它只是設置在未來的表更新時要追求的策略。
參考:
http://postgres.cn/docs/10/sql-altertable.html
http://postgres.cn/docs/10/storage-toast.html