Как дать роли права на чтение только со slave?

Чтобы дать роли права на чтение только с slave в PostgreSQL, вы можете использовать механизм репликации для создания реплик слейва и задать соответствующие привилегии для этой роли.

Первым шагом является настройка репликации между мастером и слейвом. Это можно сделать с использованием репликационных слотов или путем настройки файла recovery.conf на слейве. Подробное руководство по настройке репликации в PostgreSQL можно найти в документации PostgreSQL.

После успешной настройки репликации вы можете использовать следующий набор команд для дачи роли прав на чтение только со slave:

1. Создайте новую роль:

   CREATE ROLE readonly;

2. Назначьте роль доступ только на слейве:

   ALTER ROLE readonly NOLOGIN;
   ALTER ROLE readonly SET search_path TO "";
   ALTER ROLE readonly SET default_transaction_read_only = true;

3. Назначьте роль права на чтение:

   GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
   GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;

4. Добавьте роль в группу slave:

   GRANT readonly TO slave;

После выполнения этих команд, роль readonly будет иметь права только на чтение и доступ только на слейве. Если вы хотите дать доступ к конкретным таблицам, вы можете изменить команды GRANT SELECT, чтобы они отражали ваши требования.

Также не забудьте установить правильные учетные данные для соединения между мастером и слейвом, чтобы роль "slave" могла прочитать данные с мастера. Это можно сделать, например, через файл pg_hba.conf.

Важно отметить, что это дает роли только права на чтение и только со слейва. Это не ограничивает слейв от записи в базу данных. Если вам нужно ограничить и запись, вам следует использовать другие механизмы, такие как триггеры или хранимые процедуры, и настраивать их отдельно для мастера и слейва.