【问题标题】:PostgreSQL - Determine column storage typePostgreSQL - 确定列存储类型
【发布时间】:2018-10-01 12:28:07
【问题描述】:

我已经阅读了很多关于 PostgreSQL 的 TOAST 的内容,但我似乎遗漏了一件事。他们在文档中提到,“有四种不同的策略可以在磁盘上存储 TOAST-able 列”,它们是:PLAIN、EXTENDED、EXTERNAL 和 MAIN。他们还有一个非常清晰的方法来定义您的列使用哪种策略,可以找到here。本质上,它会是这样的:

ALTER TABLE table_name ALTER COLUMN column_name SET STORAGE EXTERNAL

我看不到的一件事是如何轻松检索该设置。我的问题是,是否有一种简单的方法(通过命令或 pgAdmin)来检索列正在使用的存储策略?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    这是存储在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;
    

    请注意,attstorage 仅在attlen > -1 时才有效

    【讨论】:

      【解决方案2】:

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

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

      \d+ table_name
      

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

      【讨论】:

        猜你喜欢
        • 2017-11-05
        • 2011-06-06
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        • 1970-01-01
        相关资源
        最近更新 更多