源数据位于数据库keys的public架构中的keys表中(参考pg docs:https://www.postgresql.org/docs/current/postgres-fdw.html):
create table keys (
id varchar not null,
keyname varchar not null,
created timestamp default current_timestamp not null,
modified timestamp default current_timestamp not null
);
引用的用户/模式/数据库是vids/public/videos。
- 设置服务器连接
CREATE SERVER keys
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '1.2.3.4', port '5432', dbname 'keys');
- 创建用户映射
CREATE USER MAPPING FOR vids
SERVER keys
OPTIONS (user 'keys', password 'keys');
- 创建表映射
create foreign table keys (
id varchar not null,
keyname varchar not null,
created timestamp default current_timestamp not null,
modified timestamp default current_timestamp not null
) server keys options (schema_name 'public', table_name 'keys');
- 在vidsdb中连接为维德s时,尝试访问外部表:
vids=> select * from keys;
ERROR: permission denied for foreign table keys
我不理解,因为用户keys是外部数据库中key表的所有者。这里该怎么办?
来自@jjanes:的评论
错误消息表明问题在本地方面";。外部表的本地重新刷新由
vids
知道,而vids
没有权限访问它。因此,它永远不会弄清楚keys
是否可以访问外部上的keys
所以对我的步骤的更正是:
grant all on table keys to clips;