因此,我尝试在运行的v12 Postgres RDS示例中创建FDW。
扩展已经存在,但由于某种原因我不能创建一个。这似乎是疯狂的简单来自一个内部部署设置。
我错过了什么?
sourceDatabase=> create extension postgres_fdw ;
ERROR: extension "postgres_fdw" already exists
sourceDatabase=> create foreign data wrapper testwrap ;
ERROR: permission denied to create foreign-data wrapper "testwrap"
HINT: Must be superuser to create a foreign-data wrapper.
sourceDatabase=> \du
List of roles
Role name | Attributes | Member of
---------------------------+------------------------------------------------+--------------------------------------------------------------
rds_superuser | Cannot login | {pg_monitor,pg_signal_backend,rds_replication,rds_password}
rdsadmin | Superuser, Create role, Create DB, Replication+| {}
| Password valid until infinity |
rdsrepladmin | No inheritance, Cannot login, Replication | {}
sourceUser | Create role, Create DB +| {rds_superuser}
| Password valid until infinity |
2条答案
按热度按时间zvms9eto1#
如果您安装了
postgres_fdw
扩展,那么您已经有了一个名为postgres_fdw
的外部数据 Package 器,因此不需要再创建一个。在
psql
中使用\dew
验证是否已经存在外部数据 Package 。您现在需要做的是创建一个 foreign server(包含到远程PostgreSQL数据库的连接字符串)、一个 user mapping(包含该数据库的身份验证信息)和 foreign tables(指向远程数据库中的表)。
pjngdqdw2#
AdrianKlaver说的是对的(不同的是你想创建一个 Package 器还是一个服务器)。
外部数据 Package :
这是Postgres的原生特性,可以访问多个数据库中的数据,包括Postgres、Oracle、Redis等数据库。有趣的是,您可以通过外部数据 Package 器阅读Twitter消息。Here是活动 Package 器的列表。
但是您必须编写处理程序等来访问数据。
https://www.postgresql.org/docs/10/sql-createforeigndatawrapper.html
后处理_FDW:
postgres_fdw
是在postgres的contrib
库下开发的一个扩展,它只针对Postgres,以使Postgres集成更加容易。所有必要的处理程序和函数都与此扩展捆绑在一起。创建外部数据 Package 器需要真实的的超级用户权限,而且
rds_superuser
不起作用。该模块提供的功能与旧的dblink模块的功能基本重叠,但是postgres_fdw提供了更透明和符合标准的语法来访问远程表,并且在许多情况下可以给予更好的性能。
因此,请参考
postgres_fdw
文档,而不是Foreign数据 Package 器文档。或者最好参考官方AWS RDS文档,该文档已经由VynlJunkie分享(在评论部分)