Postgres查询以查找数据库是否为只读模式

时间:2012-02-14 10:25:32

标签: ruby-on-rails postgresql

我是postgres的新手。在mysql中,我们可以通过触发以下查询来检查数据库是否处于只读模式。

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

我也试过“\ du”,但是这个只在终端上工作,但不是来自ruby文件。

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

ActiveRecord :: StatementInvalid:PGError:ERROR:“du”处或附近的语法错误 第1行:du;

谢谢, Rafiu

1 个答案:

答案 0 :(得分:2)

您可能需要相关表相关权限has_*_privilege()系列函数。见here。除此之外,我不确定postgres是否有只读模式的概念。

嗯,在只读事务中还有show transaction_read_only,但这似乎不像你要求的那样。我不认为该事务只会影响用户的特权

我不确定您对查询的期望,但如果您想要一些布尔值,就像您是否可以访问任何地方一样,您可以使用count(*)!=0(可能不是select