PostgreSQL でしかアクセスできないテーブルとスキーマをダンプすることはできますか?
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 に答える