PostgreSQL - 确定列存储类型

Fra*_*iak 6 postgresql

我已经阅读了很多关于 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)来检索列使用的存储策略?

a_h*_*ame 8

这是存储的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时才有效


Fra*_*iak 5

虽然我喜欢@a_horse_with_no_name 的方法,但在我发布这个问题后,我将搜索范围扩大到一般表信息,发现如果使用 psql,则可以使用此处描述的命令,结果将是一个列出所有列的表、它们的类型、修饰符、存储类型、统计目标和描述。

因此,使用 psql 可以通过以下方式找到此信息:

\d+ table_name
Run Code Online (Sandbox Code Playgroud)

我只是想我会发布这个以防万一有人想要另一个解决方案。