Сначала найдите отношения, к которым у вас есть доступ (это можно настроить и для извлечения схем)
with relnames as (SELECT relname FROM pg_class
WHERE relkind='r' and relnamespace = (select oid from pg_namespace where nspname = 'public'))
select array_agg(relname) from relnames WHERE has_table_privilege(SESSION_USER, relname, 'SELECT');
Сейчас мы еще не закончили, потому что это просто создает массив таблиц, к которым у нас есть доступ,Теперь нам нужно изменить это, чтобы использовать array_to_string, чтобы получить что-то, что мы можем передать в pg_dump:
with relnames as (SELECT relname FROM pg_class
WHERE relkind='r' and relnamespace = (select oid from pg_namespace where nspname = 'public'))
select array_to_string(array_agg(relname), ' -t ') from relnames WHERE has_table_privilege(SESSION_USER, relname, 'SELECT');
. Вышеприведенные запросы можно настроить (изменив подзапрос pg_namespace), чтобы получить пространства имен, к которым у вас есть доступ, и вы можете изменитьэто объединение, чтобы получить полные имена таблиц.