Предоставление ОБНОВЛЕНИЯ на системной таблице - PullRequest
0 голосов
/ 26 сентября 2019

Я создаю программное обеспечение, которое позволяет пользователю выполнять операции CRUD с данными, хранящимися в базе данных PostgreSQL на RDS.У меня есть доступ только к просмотрам, я не могу работать с таблицами - это техническое предположение.

Созданное мною программное обеспечение должно получать информацию из базы данных о том, может ли столбец обнуляться в указанном представлении.

Я получаю информацию об обнуляемости полей, используя данные из столбца attnotnull в таблице pg_attribute .

По умолчанию все значения столбца attnotnull установлены в false.Из-за этого мое программное обеспечение не указывает поля, обязательные для заполнения.

Моя идея состоит в том, чтобы изменить эти данные вручную, но, как я упоминал выше, я использую RDS и не могу войти в систему как суперпользователь.Я попытался предоставить привилегию UPDATE для таблицы pg_attribute своему пользователю, но я получаю сообщение об ошибке "Отказано в доступе".

Есть ли способ предоставить UPDATE для системной таблицы в RDS?

1 Ответ

0 голосов
/ 26 сентября 2019

Пожалуйста, не связывайтесь с каталогами.

Представление в PostgreSQL - это немного больше, чем таблица с правилом ON SELECT DO INSTEAD.В качестве обходного пути вы можете сначала создать таблицу, а затем превратить ее в представление:

CREATE TABLE to_view (
   c1 integer NOT NULL,
   c2 text,
   c3 inet NOT NULL
);

CREATE RULE "_RETURN" AS ON SELECT TO to_view DO INSTEAD
SELECT 42 AS c1,
       'string' AS c2,
       INET '127.0.0.1' AS c3;

SELECT attname,
       attnotnull
FROM pg_attribute
WHERE attrelid = 'to_view'::regclass
  AND attnum > 0
ORDER BY attnum;

 attname | attnotnull 
---------+------------
 c1      | t
 c2      | f
 c3      | t
(3 rows)
...