2012-02-14 452 views
0

我是postgres的新手。在mysql中,我們可以通過觸發下面的查詢來檢查數據庫是否處於只讀模式。Postgres Query查詢數據庫是否爲只讀模式

SELECT @@ global.read_only

同樣任何人都可以請幫我查詢做同樣在Postgres的?我嘗試了一些像下面這樣的東西

SELECT schemaname||'.'||tablename FROM pg_tables 
WHERE 
    has_table_privilege ('postgres', schemaname||'.'||tablename, 'select') 
    AND schemaname NOT IN ('pg_catalog','information_schema'); 

但它是像下面列出,我不指望。

  ?column?     
---------------------------------------- 
public.schema_migrations 
public.credential_methods 
public.notifications 
public.site_defaults 
public.apis 
public.client_applications 
public.api_groups 
public.operations 
public.client_application_labels 
public.client_application_label_values 
public.roles 
public.users 
public.sdm_user_roles 
public.permissions_roles 
public.keys 
public.o_two_access_tokens 
public.settings 
public.sdm_users 
public.permissions 
public.audits 
public.oauth_requesttokens 
public.oauth_access_tokens 
public.oauth_verifiers 
public.logged_exceptions 
public.api_call_details 
public.api_access_roles 
public.api_access_users 
public.login_attempts 
public.system_scopes 
public.keys_system_scopes 
public.o_two_auth_codes 
public.o_two_refresh_tokens 
public.service_profiles 
public.error_traces 

我也試過「\杜」,但這只是在終端工作,但不是從一個紅寶石文件。

query=ActiveRecord::Base.connection.execute("\du;") 

的ActiveRecord :: StatementInvalid:PGError:錯誤:在或接近 「嘟」 語法錯誤 LINE 1:杜;

感謝, Rafiu

+0

反斜槓命令(如'\ du')不是SQL的一部分,但是是psql命令行前端的終端監視器命令。對於你原來的問題:我不知道答案。試着插入或更新,並處理錯誤。 – wildplasser 2012-02-14 10:32:49

+0

@ wildplasser:謝謝.. – Rafiu 2012-02-14 10:46:41

+1

我不認爲PostgreSQL中有一個「只讀」數據庫概念。另外:*但它列出了我不期待的東西*。所以你應該告訴我們你得到的**和**你的期望。 – 2012-02-14 10:54:55

回答

1

你可能想在has_*_privilege()家庭功能爲相關表格相關的特權東西。見here。除此之外,我不確定postgres是否具有隻讀模式的概念。

嗯,在只讀事務中也有show transaction_read_only,但這似乎並不像您要求的那樣。而且我不認爲只讀的交易會影響用戶的權限

我不確定你期望從查詢中得到什麼,但是如果你想要布爾值,就像你是否有權訪問任何地方一樣,你可以使用count(*)!=0(也可能不是select)。