Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Не могу найти схему pg_toast  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
Добрый день.
Полная мистика.

Есть описание того, что pg_toast существует
"включить в вывод системные объекты (те, что находятся в схемах information_schema, pg_toast
и pg_catalog)." = стр 2525 инструкции 13 по постгрес

Ищу такую схему - нет.

Искал таблицы которые имею в названии "toast" в схемах information_schema и pg_catalog - НЕТу.

Смотрел/искал TOAST таблицу в
pg_catalog.pg_largeobject
pg_catalog.pg_largeobject_metadata
- опять НЕТу (вообще нет ни одной строки записи).

искал таблицу в pg_class - такой таблицы с номер oid, который привязан к основной таблице - опять нету
Так основная таблица - 27081, а TOAST=27084

Но по описанию в ТОАСТ таблицу выносятся строки, которые имеют размер более 4 кб.
Я специально засунул в текстовую ячеку (text) код книги и бинарный код от фото.
Получилось 4 Мб, а TOAST таблицы так и нету.

ВОПРОС - что я делаю не так и почему нет и не вижу TOAST таблиц и каталога pg_toast.
В системе я как владелец и администратор с полными правами.
ANALYZE делал, очистку системы так же делал (VACUUM FULL)

P.S. - глянуть вообще на эту таблицу, глянуть статистику, строки. как она вообще устроена.
.

Сообщение было отредактировано: 29 окт 21, 10:55
29 окт 21, 10:52    [22389774]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
Maxim Boguk
Member

Откуда: По разному.
Сообщений: 5021
О-О-О,

Неправильно ищете 20 раз подряд ).

автор
Ищу такую схему - нет.

select * from pg_namespace;


автор
Искал таблицы которые имею в названии "toast" в схемах information_schema и pg_catalog - НЕТу.

toast имеют relkind='t' а не 'r' а вы в pg_class небось 'r' искали


автор
Смотрел/искал TOAST таблицу в
pg_catalog.pg_largeobject
pg_catalog.pg_largeobject_metadata
- опять НЕТу (вообще нет ни одной строки записи).

Вот там точно нет.


автор
искал таблицу в pg_class - такой таблицы с номер oid, который привязан к основной таблице - опять нету
Так основная таблица - 27081, а TOAST=27084

Опять же вопрос как искали... вы бы запросы приводили.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

Сообщение было отредактировано: 29 окт 21, 12:00
29 окт 21, 11:59    [22389827]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
Guzya
Member

Откуда:
Сообщений: 818
Да вроде все ищется

guzya@guzya-desktop ~ $ pid=$(docker run -d --rm -p 5432:5432 -e POSTGRES_PASSWORD=password postgres:13) && docker exec -it $pid bash && docker stop $pid

root@97a3ed9b58c3:/# psql -U postgres
psql (13.2 (Debian 13.2-1.pgdg100+1))
Type "help" for help.

postgres=# select 
postgres-#     (schemaname||'.'||relname) as name
postgres-#     ,pg_relation_size(schemaname||'.'||relname) as size
postgres-#     ,pg_size_pretty(pg_relation_size(schemaname||'.'||relname)) as p_size
postgres-#     ,pg_size_pretty(pg_total_relation_size(schemaname||'.'||relname)) as total_size
postgres-#     ,pg_size_pretty(pg_indexes_size(schemaname||'.'||relname)) as i_size
postgres-#     ,n_live_tup
postgres-#     ,n_dead_tup
postgres-#     ,trunc(n_dead_tup/(n_live_tup*0.01),2) as k
postgres-#     ,last_autovacuum 
postgres-#     ,(select relname from pg_class c where c.oid=(select cc.reltoastrelid from pg_class cc where  cc.relname=t.relname)) as toast
postgres-# from pg_stat_all_tables t 
postgres-# where 
postgres-#     schemaname not in('pg_catalog','information_schema') 
postgres-#     and n_live_tup > 0 
postgres-# order by size desc,k ;

 name | size | p_size | total_size | i_size | n_live_tup | n_dead_tup | k | last_autovacuum | toast 
------+------+--------+------------+--------+------------+------------+---+-----------------+-------
(0 rows)

postgres=# create table t1(id1 int,id2 int,id3 int, sss text);
CREATE TABLE

postgres=# insert into t1 (select s.id,s.id,s.id,repeat(s.id::text,s.id) from
generate_series(1,100000) as s(id));
INSERT 0 100000

postgres=# select                                                            
    (schemaname||'.'||relname) as name
    ,pg_relation_size(schemaname||'.'||relname) as size
    ,pg_size_pretty(pg_relation_size(schemaname||'.'||relname)) as p_size
    ,pg_size_pretty(pg_total_relation_size(schemaname||'.'||relname)) as total_size
    ,pg_size_pretty(pg_indexes_size(schemaname||'.'||relname)) as i_size
    ,n_live_tup
    ,n_dead_tup
    ,trunc(n_dead_tup/(n_live_tup*0.01),2) as k
    ,last_autovacuum 
    ,(select relname from pg_class c where c.oid=(select cc.reltoastrelid from pg_class cc where  cc.relname=t.relname)) as toast
from pg_stat_all_tables t 
where 
    schemaname not in('pg_catalog','information_schema') 
    and n_live_tup > 0 
order by size desc,k ;

          name           |   size    | p_size | total_size | i_size  | n_live_tup | n_dead_tup |  k   |        last_autovacuum        |     toast      
-------------------------+-----------+--------+------------+---------+------------+------------+------+-------------------------------+----------------
 pg_toast.pg_toast_16384 | 294215680 | 281 MB | 284 MB     | 3560 kB |     161151 |          0 | 0.00 | 2021-10-29 09:11:38.107185+00 | 
 public.t1               |  43196416 | 41 MB  | 325 MB     | 0 bytes |     100000 |          0 | 0.00 | 2021-10-29 09:11:29.703272+00 | pg_toast_16384
(2 rows)

postgres=# \d pg_toast.pg_toast_16384

TOAST table "pg_toast.pg_toast_16384"
   Column   |  Type   
------------+---------
 chunk_id   | oid
 chunk_seq  | integer
 chunk_data | bytea
Owning table: "public.t1"
Indexes:
    "pg_toast_16384_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
29 окт 21, 12:14    [22389840]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
[quot Maxim Boguk#22389827]

Неправильно ищете 20 раз подряд ).

select * from pg_namespace;

Вот так она есть
key_words=# select * from pg_namespace;
  oid  |        nspname         | nspowner |               nspacl                
-------+------------------------+----------+-------------------------------------
    99 | pg_toast               |       10 | 
    11 | pg_catalog             |       10 | {postgres=UC/postgres,=U/postgres}
  2200 | public                 |       10 | {postgres=UC/postgres,=UC/postgres}
 13111 | information_schema     |       10 | {postgres=UC/postgres,=U/postgres}
 24718 | блок_чужих_расширений  |       10 | 
 26964 | блок_архив_слов_статей |       10 | 
 70083 | тексты_на_de           |       10 | 
 70084 | тексты_на_en           |       10 | 
 70085 | тексты_на_fr           |       10 | 
 70086 | тексты_на_indonez      |       10 | 
 70098 | тексты_на_tr           |       10 | 
 70099 | тексты_на_ukr          |       10 | 
 70236 | яндекс_wordstat        |       10 | 
 70237 | яндекс_поиск           |       10 | 
 70238 | запросы_из_локал_сайт  |       10 | 
 26966 | роботы_и_автоматизация |       10 | 
 70239 | таблицы_доп            |       10 | 
 88243 | html_log               |       10 | 
 90524 | git_создание_файлов    |       10 | 
(19 строк)


А вот так её нет:

К сообщению приложен файл. Размер - 43Kb
29 окт 21, 12:48    [22389868]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
toast имеют relkind='t' а не 'r' а вы в pg_class небось 'r' искали

Выводил все что было. Но по факту выводятся только первые 3:
п_массив_text[5]:=CASE 
			+		WHEN п_record_2.relkind='r' THEN 'r = обычная таблица (Relation)'
			+		WHEN п_record_2.relkind='i' THEN 'i = индекс (Index)'
			+		WHEN п_record_2.relkind='S' THEN 'S = последовательность (Sequence)'
					WHEN п_record_2.relkind='t' THEN 't = таблица TOAST'
					WHEN п_record_2.relkind='v' THEN 'v = представление (View)'
					WHEN п_record_2.relkind='m' THEN 'm = материализованное представление (Materialized view)'
					WHEN п_record_2.relkind='c' THEN 'c = составной тип (Composite type)'
					WHEN п_record_2.relkind='f' THEN 'f = сторонняя таблица (Foreign table)'
					WHEN п_record_2.relkind='p' THEN 'p = секционированная таблица (Partitioned table)'
					WHEN п_record_2.relkind='I' THEN 'I = секционированный индекс (partitioned Index)'
				else 
					' тип хранимого объекта не определён '
				end;
29 окт 21, 12:49    [22389870]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
Maxim Boguk
Member

Откуда: По разному.
Сообщений: 5021
О-О-О,

Уж сколько раз твердили миру - любые админские задачи только через psql
С глюками и странным поведением GUI на таких вещах - вам тут вряд ли кто то поможет.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
29 окт 21, 12:50    [22389873]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
Maxim Boguk
О-О-О,

Уж сколько раз твердили миру - любые админские задачи только через psql
С глюками и странным поведением GUI на таких вещах - вам тут вряд ли кто то поможет.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru


А , вот теперь понятно. Просто я проверял и в DBeawer и PGAdmin4 ни там ни там не было доступа к этой схеме.

Теперь понял.
29 окт 21, 12:56    [22389876]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти схему pg_toast  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
Guzya,

Спасибо за код.
Буду его крутить и проверять, почему все же нет данных по TOAST.
Ваш пример кода поможет как построчно проверять.

Там вообще все странно. По таблице пишет 0 кб, по индексам пишет 4 Мб, а индексот то у меня по этой таблице и нет.
В общем ерунда какая то.

Вот отчет по этой таблице:
ко-во блоков   размер план, Мб	  размер факт (всего), b         размер tab (факт), b	 размер ind (факт), b    строк в файле	 живых строк  мертвых строк
  1	                0.01 Мб	          4194304	                0                       4194304	                 1	       1            0


Сообщение было отредактировано: 29 окт 21, 13:15
29 окт 21, 13:07    [22389887]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить