2011-12-06 3 views
0

私にアクセス可能なテーブルとスキーマをPostgreSQLでのみダンプすることはできますか?私にアクセスできるテーブルとスキーマをダンプするだけですか?

+0

あなたの質問で「唯一」が何を変更するかは完全にはっきりしていません。権限でクエリを実行し、1人のユーザーだけがアクセスできるテーブルを検索することを意味しますか? –

+0

こんにちはDevin、はい、正しいです。混乱させて申し訳ありません。 – bananaaus

答えて

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'); 

は、今、私たちは非常に今行われていません(これはあまりにもスキーマを引っ張って微調整することができます)。あなたがアクセス権を持っている名前空間を引っ張って(pg_namespaceサブクエリの変更)上記のクエリを微調整することができ

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_dumpのに供給することができます何かを得るためにarray_to_stringを使用するようにこれを変更する必要があります完全修飾テーブル名を取得するための結合。

関連する問題