Как определить тип объекта базы данных PostgreSQL (таблица, представление, функция, процедура или пакет)Python

Программы на Python
Anonymous
Как определить тип объекта базы данных PostgreSQL (таблица, представление, функция, процедура или пакет)

Сообщение Anonymous »

Я работаю над базой данных PostgreSQL, и мне нужно проверить тип данного объекта, будь то таблица, представление, функция, процедура или даже пакет. В настоящее время я использую несколько запросов и условий для определения типа объекта, но мне интересно, есть ли более простой способ добиться этого с помощью одного запроса или более эффективный метод.
Вот часть моего текущего кода:

Код: Выделить всё

cursor.execute("""
SELECT relname, CASE relkind
WHEN 'r' THEN 'Table'
WHEN 'v' THEN 'View'
WHEN 'f' THEN 'Foreign Table'
WHEN 'm' THEN 'Materialized View'
WHEN 'p' THEN 'Partitioned Table'
ELSE 'Unknown'
END AS object_type
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = %s AND c.relname = %s;
""", (schema_name, object_name))

object_type = cursor.fetchone()
if object_type is None:
object_type = 'Unknown'
else:
object_type = object_type[1]

if object_type == 'Unknown':
sql = f"SELECT routine_name " \
f"FROM information_schema.routines " \
f"WHERE specific_schema = %s AND routine_name = %s"
cursor.execute(sql, (schema_name, object_name))
routine_exists = cursor.fetchone()
if routine_exists:
object_type = 'PROCEDURE/FUNCTION'
У меня двоякий вопрос:
Есть ли более простой способ определить тип объекта базы данных PostgreSQL напрямую или с помощью более эффективного одиночного запроса, возможно, путем объединения таблиц, вместо моего текущего подхода?
Как определить, является ли объект базы данных пакетом в PostgreSQL?
Я попробовал следующее:
Текущий подход: я использовал несколько запросы и условия для определения типа объекта:
Я проверил таблицы pg_class и pg_namespace, чтобы определить, является ли это таблицей или представлением.
Если тип объекта был «Неизвестный», я запросил таблицу information_schema.routines, чтобы узнать, является ли это функцией или процедурой.
Мне нужен совет по оптимизации процесса идентификации типа объекта и любые идеи по распознаванию пакетов, если возможно.

Вернуться в «Python»