Каков наиболее эффективный способ получить количество разделов, созданных в базе данных? Я использую * postgresq * l APi для C++.получить количество разделов в базе данных postgresql
2
A
ответ
8
Это, как вы можете выбрать все имена разделов таблицы:
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;
0
Этот вопрос стар. Но a new question on dba.SE ссылается на него, и я вынужден добавить более простое решение.
По вопросу, к ...
получить количество разделов, созданных в базе:
Использование inheritance и для конкретной родительской таблицы, я предполагаю:
SELECT count(*) AS partitions
FROM pg_inherits i
WHERE i.inhparent = 'my_schema.my_parent_tbl'::regclass;
Подробнее о соответствующем ответе на dba.SE:
Get all partition names for a table
Как удалить старый раздел? (Сначала был создан раздел?) – Shay
Если самый низкий OID является самым старым разделом, вы можете использовать MIN (child.oid), чтобы найти этот раздел. Вы можете использовать это, чтобы найти имя и схему для этой таблицы и использовать ее для DROP этой таблицы. Хранимая процедура упрощает ее обслуживание. –