我是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
答案 0 :(得分:2)
您可能需要相关表和相关权限的has_*_privilege()
系列函数。见here。除此之外,我不确定postgres是否有只读模式的概念。
嗯,在只读事务中还有show transaction_read_only
,但这似乎不像你要求的那样。我不认为该事务只会影响用户的特权。
我不确定您对查询的期望,但如果您想要一些布尔值,就像您是否可以访问任何地方一样,您可以使用count(*)!=0
(可能不是select
)