所以我试图在运行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 |
如果安装了postgres_fdw
扩展,则已经有一个名为postgres_fdw
的外部数据包装器,因此无需创建另一个。
使用psql
中的dew
来验证是否已经存在外部数据包装。
现在您需要做的是创建一个外部服务器,该服务器包含到远程PostgreSQL数据库的连接字符串,一个包含该数据库的身份验证信息的用户映射和指向远程数据库中表的外部表。
阿德里安·克拉弗所说的是正确的。(不同之处在于您是要创建包装器还是服务器(。
外部数据包装器:
这是Postgres的原生功能,可以跨多个数据库访问数据,包括Postgres、Oracle、Redis等数据库。有趣的是,你可以通过外部数据包装器读取你的推特消息。这是活动包装器的列表。
但是您必须编写处理程序等才能访问数据。
https://www.postgresql.org/docs/10/sql-createforeigndatawrapper.html
Postgres_FDW:
postgres_fdw
是在postgres的contrib
库下开发的扩展,它只针对postgres,以使postgres的集成更加容易。所有必要的处理程序和函数都与此扩展捆绑在一起。
创建外部数据包装器需要真正的超级用户权限,rds_superuser
无法正常工作。
此模块提供的功能与旧dblink模块的功能。但是postgres_fdw为访问提供了更透明且符合标准的语法远程表,并且在许多情况下可以提供更好的性能。
因此,请参阅postgres_fdw
文档,而不是Foreign数据包装文档。
或者最好参考VynlJunkie已经分享的官方AWS RDS文档(在评论部分(