получить количество разделов в базе данных postgresql - PullRequest
3 голосов
/ 26 декабря 2011

Какой самый эффективный способ получить количество разделов, созданных в базе данных? Я использую * postgresq * l APi для C ++.

Ответы [ 2 ]

9 голосов
/ 26 декабря 2011

Вот как вы можете выбрать все имена разделов таблицы:

SELECT
    nmsp_parent.nspname AS parent_schema,
    parent.relname      AS parent,
    nmsp_child.nspname  AS child,
    child.relname       AS child_schema
FROM pg_inherits
    JOIN pg_class parent        ON pg_inherits.inhparent = parent.oid
    JOIN pg_class child         ON pg_inherits.inhrelid   = child.oid
    JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
    JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace

Также можно использовать для подсчета:

SELECT
    nmsp_parent.nspname     AS parent_schema,
    parent.relname          AS parent,
    COUNT(*)
FROM pg_inherits
    JOIN pg_class parent        ON pg_inherits.inhparent = parent.oid
    JOIN pg_class child     ON pg_inherits.inhrelid   = child.oid
    JOIN pg_namespace nmsp_parent   ON nmsp_parent.oid  = parent.relnamespace
    JOIN pg_namespace nmsp_child    ON nmsp_child.oid   = child.relnamespace
GROUP BY
    parent_schema,
    parent;
2 голосов
/ 25 апреля 2014

Этот вопрос старый. Но новый вопрос о dba.SE ссылается на него, и я вынужден добавить более простое решение.

По вопросу, к ...

получить количество разделов, созданных в базе данных:

Используя наследование и для конкретной родительской таблицы, я предполагаю:

SELECT count(*) AS partitions
FROM   pg_inherits i
WHERE  i.inhparent = 'my_schema.my_parent_tbl'::regclass;

Подробнее в соответствующем ответе на dba.SE:
Получить все имена разделов для таблицы

...