я могу глобально предоставить доступ к просмотрам в postgres [duplicate]

Одна разница между реализацией Runnable и продолжением Thread заключается в том, что путем расширения Thread каждый из ваших потоков имеет уникальный объект, связанный с ним, тогда как при реализации Runnable многие потоки могут совместно использовать один и тот же экземпляр объекта.

A класс, который реализует Runnable, не является потоком и просто классом. Чтобы Runnable выполнялся потоком, вам нужно создать экземпляр Thread и передать экземпляр Runnable в качестве цели.

В большинстве случаев интерфейс Runnable должен использоваться, если вы планируете только планировать для переопределения метода run () и других методов Thread. Это важно, потому что классы не должны подклассифицироваться, если программист не намерен модифицировать или улучшать фундаментальное поведение класса.

Когда необходимо расширить суперкласс, реализация интерфейса Runnable более подходит, чем использование класс Thread. Потому что мы можем расширить другой класс, внедряя интерфейс Runnable для создания потока. Но если мы просто расширим класс Thread, мы не сможем наследовать ни от какого другого класса.

1
задан Nicarus 12 August 2016 в 15:38
поделиться

2 ответа

Вы также можете сделать это из командной строки:

  1. Войти как postgres: sudo -i -u postgres
  2. Запустить эту команду: psql -At -d [dbname] -c "SELECT 'GRANT ALL ON '||viewname||' TO [username];' FROM pg_views WHERE schemaname='public';" | psql -d [dbname]
0
ответ дан Ben Wilson 19 August 2018 в 10:38
поделиться

Единственный способ сделать это в одном выражении (вид) - это создать функцию, иначе вы либо будете перечислять все виды, либо предоставлять все таблицы, а затем отменять неотображения.

Я написал это быстро, но протестировал его. Вам может потребоваться настроить по необходимости:

CREATE OR REPLACE FUNCTION fn_grant_all_views(schema_name TEXT, role_name TEXT)
RETURNS VOID AS $func$

DECLARE view_name TEXT;

BEGIN

  FOR view_name IN
    SELECT viewname FROM pg_views WHERE schemaname = schema_name
  LOOP
    EXECUTE 'GRANT ALL PRIVILEGES ON ' || schema_name || '.' || view_name || ' TO ' || role_name || ';';
  END LOOP;

END; $func$ LANGUAGE PLPGSQL

Использование:

SELECT fn_grant_all_views('my_schema','my_role');
2
ответ дан Nicarus 19 August 2018 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: