Сбрасывать таблицы и схемы, которые доступны только мне? - PullRequest
0 голосов
/ 06 декабря 2011

Можно ли создавать дампы таблиц и схем, которые мне доступны только в PostgreSQL?

1 Ответ

0 голосов
/ 24 марта 2013

Сначала найдите отношения, к которым у вас есть доступ (это можно настроить и для извлечения схем)

 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), чтобы получить пространства имен, к которым у вас есть доступ, и вы можете изменитьэто объединение, чтобы получить полные имена таблиц.

...