2011-12-06 18 views
0

是否有可能轉儲只有在PostgreSQL中才能訪問的表和模式?轉儲只能由我訪問的表和模式?

+0

這並不完全清楚你的問題中「唯一」修改了什麼。你的意思是你想通過權限查詢並找到只有一個用戶有權訪問的表? –

+0

嗨德文,是的,這是正確的。對困惑感到抱歉。 – 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'); 

現在我們不太現在完成了,因爲這僅僅是創建我們必須對錶的訪問的數組。現在,我們需要改變這種使用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子查詢)來拉你要訪問的命名空間,你可以將其更改爲一個連接來拉取完全限定的表名。