Запрос Postgres, чтобы определить, находится ли база данных в режиме только для чтения. - PullRequest
0 голосов
/ 14 февраля 2012

Я новичок в 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" LINE 1: du;

Спасибо, Рафиу

1 Ответ

2 голосов
/ 14 февраля 2012

Возможно, вам нужно что-то из функции семейства has_*_privilege() для соответствующих таблиц и соответствующих привилегий . Смотрите здесь . Кроме этого, я не уверен, что у postgres есть концепция режима только для чтения.

Ну, внутри транзакции только для чтения есть show transaction_read_only, но это не похоже на то, что вы просите. И я не думаю, что транзакция только для чтения влияет на привилегии пользователя.

Я не уверен, что вы ожидаете от своего запроса, но если вы хотите что-то логическое, например, есть ли у вас доступ куда-либо, вы можете использовать count(*)!=0 (и, вероятно, не select).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...