【发布时间】:2022-03-11 03:58:47
【问题描述】:
我是 postgres 的新手。在mysql中,我们可以通过触发下面的查询来检查数据库是否处于只读模式。
选择@@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)不是 SQL 的一部分,而是 psql 命令行前端的终端监视器命令。对于你原来的问题:我不知道答案。只需尝试插入或更新,然后处理错误。 -
我认为 PostgreSQL 中没有“只读”数据库概念。另外:但它列出了我没想到的东西。所以你应该向我们展示你得到了什么和你所期望的。
-
您好,感谢您的回复。当我触发查询时,我得到以下输出
-
您会期待什么?输出是用户
postgres具有select权限的所有表。由于postgres用户通常是“超级用户”,因此这个输出并不令人惊讶。