Нежурналируемая таблица

postgres$ cd /home/postgres
postgres$ mkdir ts_dir
=> CREATE TABLESPACE ts LOCATION '/home/postgres/ts_dir';
CREATE TABLESPACE
=> CREATE DATABASE data_lowlevel;
CREATE DATABASE
=> \c data_lowlevel
You are now connected to database "data_lowlevel" as user "postgres".
=> CREATE UNLOGGED TABLE u(n integer) TABLESPACE ts;
CREATE TABLE
=> SELECT pg_relation_filepath('u');
            pg_relation_filepath             
---------------------------------------------
 pg_tblspc/16423/PG_10_201707211/16424/16425
(1 row)

=> \! ls -l /usr/local/pgsql/data/pg_tblspc/16423/PG_10_201707211/16424/16425*
-rw------- 1 postgres postgres 0 дек 24 17:28 /usr/local/pgsql/data/pg_tblspc/16423/PG_10_201707211/16424/16425
-rw------- 1 postgres postgres 0 дек 24 17:28 /usr/local/pgsql/data/pg_tblspc/16423/PG_10_201707211/16424/16425_init

Удаление табличного пространства

=> DROP TABLE u;
DROP TABLE
=> DROP TABLESPACE ts;
DROP TABLESPACE

Таблица с текстовым столбцом

=> CREATE TABLE t(s text);
CREATE TABLE
=> \d+ t
                                    Table "public.t"
 Column | Type | Collation | Nullable | Default | Storage  | Stats target | Description 
--------+------+-----------+----------+---------+----------+--------------+-------------
 s      | text |           |          |         | extended |              | 

По умолчанию для типа text используется стратегия extended.

Изменение стратегии

=> ALTER TABLE t ALTER COLUMN s SET STORAGE external;
ALTER TABLE
=> INSERT INTO t(s) VALUES ('Короткая строка.');
INSERT 0 1
=> INSERT INTO t(s) VALUES (repeat('A',3456));
INSERT 0 1

TOAST-таблица

=> SELECT relname FROM pg_class WHERE OID = (
  SELECT reltoastrelid FROM pg_class WHERE relname='t'
);
    relname     
----------------
 pg_toast_16428
(1 row)

TOAST-таблица "спрятана", так как находится в схеме, которой нет в пути. И это правильно, поскольку TOAST работает прозрачно для пользователя. Но заглянуть в нее все-таки можно:

=> SELECT chunk_id, chunk_seq, length(chunk_data)
FROM pg_toast.pg_toast_16428
ORDER BY chunk_id, chunk_seq;
 chunk_id | chunk_seq | length 
----------+-----------+--------
    16434 |         0 |   2000
    16434 |         1 |   1456
(2 rows)

Видно, что в TOAST-таблицу попала только длинная строчка (два фрагмента, общий размер совпадает с длиной строки). Короткая строчка не вынесена в TOAST просто потому, что в этом нет необходимости - версия строки и без этого помещается в страницу.