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

Откуда: Саратов
Сообщений: 438
Собственно, как узнать?
12 фев 20, 13:58    [22078343]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование. Из скольки секций состоит индекс/таблица?  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Шамиль Фаридович,

если мы говорим о декларативном секционировании, а не о секционировании через наследование

автор
Таблица 9.92. Функции получения информации о секционировании

pg_partition_tree(regclass)
Выводит информацию о таблицах и индексах в дереве секционирования для заданной секционированной таблицы или секционированного индекса, отражая каждую секцию в отдельной строке. В этой информации представляется имя секции, имя её непосредственного родителя, логический признак того, что секция является конечной, и целое число, показывающее её уровень в иерархии. На уровне номер 0 находятся таблицы или индексы, играющие роль корневых в дереве секционирования, на уровне 1 — их секции, на уровне 2 — секции последних и т. д.

pg_partition_ancestors(regclass)
Выводит список вышестоящих отношений для заданной секции, включая её саму.

pg_partition_root(regclass)
Выдаёт корневое отношение в иерархии секционирования, к которой относится данное отношение.

https://postgrespro.ru/docs/postgresql/12/functions-admin
https://paquier.xyz/postgresql-2/postgres-12-partition-funcs/



Сообщение было отредактировано: 12 фев 20, 16:26
12 фев 20, 16:23    [22078521]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование. Из скольки секций состоит индекс/таблица?  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 438
Может кому в будущем пригодиться:
SELECT
            t.schemaname,
            t.tablename,
            count(pt.parentrelid) AS sectionsCount
        FROM
            pg_tables t
        left join pg_partition_tree(t.schemaname || '.' || t.tablename) as pt on true
        where
                  t.schemaname != 'pg_catalog'
            and t.schemaname != 'information_schema'
            and t.schemaname NOT LIKE 'pg_temp%'
            and coalesce(pt.level, 1)  = 1
        GROUP BY
            t.schemaname,
            t.tablename;


Сообщение было отредактировано: 18 фев 20, 16:47
18 фев 20, 16:45    [22082365]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить