首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres -拒绝更新pg_catalog.pg_cast

Postgres -拒绝更新pg_catalog.pg_cast
EN

Stack Overflow用户
提问于 2014-02-13 11:42:28
回答 2查看 8K关注 0票数 0

我想从受限用户(在Postgres9.3上)更新pg_catalog.pg_cast

但是,运行我需要的查询:

代码语言:javascript
复制
 update pg_cast set castcontext = 'i' where oid in ( select c.oid from pg_cast c inner join pg_type src on src.oid = c.castsource inner join pg_type tgt on tgt.oid = c.casttarget where src.typname like 'int%' and tgt.typname like 'bool%');

最后出现错误:

代码语言:javascript
复制
    ERROR:  permission denied for relation pg_cast

但是,权限似乎是正确设置的。请参阅我自DB和用户创建以来所做的步骤,直到查询:

代码语言:javascript
复制
psql -c "create database test1 WITH ENCODING 'UTF8' LC_COLLATE='en_GB.UTF8' LC_CTYPE='en_GB.UTF8' TEMPLATE=template0;" -U postgres
psql -U postgres test1;
test1=# CREATE USER test1 PASSWORD 'test1';
test1=# GRANT ALL ON SCHEMA public TO test1;
test1=# GRANT ALL ON ALL TABLES IN SCHEMA public TO test1;
test1=# GRANT SELECT ON TABLE pg_catalog.pg_cast TO test1; 
test1=# GRANT SELECT ON TABLE pg_catalog.pg_type TO test1; 
test1=# GRANT UPDATE ON TABLE pg_catalog.pg_cast TO test1; 
test1=# \q

sudo service postgresql-9.3 restart

PGPASSWORD=test1;psql -U test1 test1

test1=> \z pg_catalog.pg_cast
                  Access privileges
   Schema   |  Name   | Type  | Access privileges | Column access privileges 
------------+---------+-------+-------------------+--------------------------
 pg_catalog | pg_cast | table | =r/postgres      +| 
        |         |       | test1=rw/postgres | 
(1 row)

test1=> \z pg_catalog.pg_type
                  Access privileges
   Schema   |  Name   | Type  | Access privileges | Column access privileges 
------------+---------+-------+-------------------+--------------------------
 pg_catalog | pg_type | table | =r/postgres      +| 
        |         |       | test1=r/postgres  | 
(1 row)

test1=> SELECT grantee, privilege_type FROM information_schema.role_table_grants WHERE table_name='pg_cast';
 grantee | privilege_type 
---------+----------------
 test1   | SELECT
 test1   | UPDATE
(2 rows)

test1=> update pg_cast set castcontext = 'i' where oid in ( select c.oid from pg_cast c inner join pg_type src on src.oid = c.castsource inner join pg_type tgt on tgt.oid = c.casttarget where src.typname like 'int%' and tgt.typname like 'bool%');
ERROR:  permission denied for relation pg_cast

我还应该做什么,以启用对test1用户的查询执行?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 13:49:36

您确实不应该直接更新系统目录。“拒绝许可”错误是Postgres试图保护您不被射中脚的错误。

如果你真的想要的话(如果你弄坏了什么东西,你可以把这两块都留下.)从这里开始:https://serverfault.com/questions/300123/how-to-edit-system-catalogs-in-postgresql-8-1

票数 4
EN

Stack Overflow用户

发布于 2018-09-17 02:27:54

我也有过类似的问题,更新格林梅系统目录,提示是:

错误:权限被拒绝:"pg_filespace_entry“是系统目录,

在尝试修改系统表之前,该解决方案使用了以下命令:

代码语言:javascript
复制
set allow_system_table_mods='dml';
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21753225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档