8

I've been reading a lot about PostgreSQL's TOAST, and there's one thing I seem to be missing. They mention in the documentation that, "there are four different strategies for storing TOAST-able columns on disk," those being: PLAIN, EXTENDED, EXTERNAL, and MAIN. They also have a very clear way to define which strategy to use for your column, which can be found here. Essentially, it would be something like this:

ALTER TABLE table_name ALTER COLUMN column_name SET STORAGE EXTERNAL

The one thing I don't see is how to easily retrieve that setting. My question is, is there a simple way (either through commands or pgAdmin) to retrieve the storage strategy being used by a column?

Francis Bartkowiak
  • 1,374
  • 2
  • 11
  • 28

2 Answers2

11

This is stored pg_attribute.attstorage, e.g.:

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;

Note that attstorage is only valid if attlen is > -1

8

While I like @a_horse_with_no_name's method, after I posted this question, I expanded my search to just general table information and found that if you use psql, you can use the command described here, and the result will be a table listing all of the columns, their types, modifiers, storage types, stats targets, and descriptions.

So, using psql this info can be found with:

\d+ table_name

I just figured I'd post this in case anyone wanted another solution.

Francis Bartkowiak
  • 1,374
  • 2
  • 11
  • 28