Это не легко.Вы можете заглянуть в исходный код pg_dump, чтобы увидеть, как он это делает.В основном он использует стандартные запросы к каталогам, но использует их очень много.
На сервере есть некоторые функции, которые помогают, некоторые можно просмотреть с помощью:
\df *def
Вы могли бы сделать это намного проще, если бы вы хотели срезать углы, например, только глядя на таблицу, индексы (?) И представления, а не на все объекты.И поддерживает только одну версию PostgreSQL, игнорируя параметры хранилища, права доступа и т. Д.