我正在制作软件,允许用户对存储在PostgreSQL数据库中的数据进行CRUD操作。我只能访问视图,不能在桌子上工作--这是一个技术假设。
我创建的软件需要从数据库中获取有关列在指定视图中是否为空的信息。
我正在使用pg_attribute表中attnotnull列中的数据获取有关字段的空性的信息。
默认情况下,所有'attnotnull‘列值都设置为false。因此,我的软件并不表示需要字段。
我的想法是手动更改这些数据,但正如我前面提到的,我使用的是RDS,我不能作为超级用户登录。我试图将pg_attribute表上的UPDATE权限授予我的用户,但是我得到了“拒绝权限”错误。
是否有任何方法允许更新RDS上的系统表?
发布于 2019-09-26 15:42:47
请不要乱搞目录..。
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)https://stackoverflow.com/questions/58118397
复制相似问题