我正在使用来自postgres的pg_rdeis_fdw
。
当我尝试从postgres
帐户将记录插入现有架构时,一切正常。
但是,当我尝试从其他用户执行相同的操作时,我得到"关系权限被拒绝",尽管我给了用户以下权限:
grant all on FOREIGN DATA WRAPPER redis_fdw to ami;
grant all on FOREIGN SERVER redis_server to ami;
grant all on ALL TABLES IN SCHEMA public to ami;
GRANT ALL PRIVILEGES ON TABLE user_redis_hash to ami;
定义如下(正如我所说,从用户postgres
工作得很好):
CREATE EXTENSION redis_fdw;
CREATE SERVER redis_server
FOREIGN DATA WRAPPER redis_fdw
OPTIONS (address '127.0.0.1', port '6379');
CREATE USER MAPPING FOR PUBLIC
SERVER redis_server
OPTIONS (password 'secret');
create foreign table user_redis_hash(key text, val text[])
server redis_server
options (database '0', tabletype 'hash', tablekeyset 'user:');
谢谢阿米
就我而言,我不得不将外表的所有者更改为正确的角色。因此,您可以尝试以下操作(从postgres
帐户):
ALTER FOREIGN TABLE public.user_redis_hash OWNER TO ami;
如果您有其他外表(像我一样)并且需要全部更改它们,则以下 SQL 将生成一系列 SQL 行,您可以复制到psql
提示符中以更新每个外表。
SELECT 'ALTER FOREIGN TABLE '|| foreign_table_schema || '.' || foreign_table_name ||' OWNER TO ami;' FROM information_schema.foreign_tables WHERE NOT foreign_table_schema IN ('pg_catalog', 'information_schema') ORDER BY foreign_table_schema, foreign_table_name;
如果您有其他服务器的其他外部表或不想更改所有权的数据包装器,则可以通过向 WHERE 子句添加AND foreign_server_name = 'redis_server'
来限制上述内容。