0

是否可以转储我只能在 PostgreSQL 中访问的表和模式?

4

1 回答 1

0

首先找到您可以访问的关系(这也可以调整为拉模式)

 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 子查询)以提取您有权访问的命名空间,您可以将其更改为连接以提取完全限定的表名。

于 2013-03-24T07:28:16.700 回答