我已经阅读了很多关于 PostgreSQL 的TOAST,但我似乎缺少一件事。他们在文档中提到,“在磁盘上存储可 TOAST 的列有四种不同的策略”,它们是:PLAIN、EXTENDED、EXTERNAL 和 MAIN。他们还有一个非常明确的方法来定义您的专栏使用哪种策略,可以在这里找到。本质上,它会是这样的:
ALTER TABLE table_name ALTER COLUMN column_name SET STORAGE EXTERNAL
Run Code Online (Sandbox Code Playgroud)
我没有看到的一件事是如何轻松检索该设置。我的问题是,是否有一种简单的方法(通过命令或 pgAdmin)来检索列使用的存储策略?
这是存储的pg_attribute.attstorage,例如:
select att.attname,
case att.attstorage
when 'p' then 'plain'
when 'm' then 'main'
when 'e' then 'external'
when 'x' then 'extended'
end as attstorage
from pg_attribute att
join pg_class tbl on tbl.oid = att.attrelid
join pg_namespace ns on tbl.relnamespace = ns.oid
where tbl.relname = 'table_name'
and ns.nspname = 'public'
and not att.attisdropped;
Run Code Online (Sandbox Code Playgroud)
请注意,attstorage只有在attlen> -1时才有效
虽然我喜欢@a_horse_with_no_name 的方法,但在我发布这个问题后,我将搜索范围扩大到一般表信息,发现如果使用 psql,则可以使用此处描述的命令,结果将是一个列出所有列的表、它们的类型、修饰符、存储类型、统计目标和描述。
因此,使用 psql 可以通过以下方式找到此信息:
\d+ table_name
Run Code Online (Sandbox Code Playgroud)
我只是想我会发布这个以防万一有人想要另一个解决方案。
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |