最近使用PostgreSQL数据库时,在业务数据库master中需要使用到地图空间数据库sde的表。但sde中的表数据量太大,无法做数据同步,这时就需要使用postgres_fdw 插件 远程映射这些数据表。
postgres_fdw 简介
postgres_fdw 是基于 SQL/MED 标准开发的一个外部数据封装器(Foreign Data Wrapper),可以用于访问外部 PostgreSQL 服务器,对远程数据表执行 SELECT、INSERT、UPDATE 以及 DELETE 操作。
与 postgres_fdw 类似的另一个扩展模块是 dblink。它们的功能基本相同,但是 postgres_fdw 提供了更透明且符合标准的语法来访问远程表,并且在很多情况下可以提供更好的性能。postgres_fdw 可以支持的远程服务器最低版本为 PostgreSQL 8.3,如果是只读访问则可以支持到 PostgreSQL 8.1。
实现步骤
所有的SQL命令,都在master中执行。
postgres_fdw 安装
Linux 操作系统,可以通过 postgresql-contrib 软件包下载 PostgreSQL 扩展模块;对于 Windows 和 macOS,默认安装已经包含了扩展模块。
create extension postgres_fdw
创建外部服务器对象
使用 CREATE SERVER 语句创建一个外部服务器
CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '127.0.0.1', port '5432', dbname 'sde',updatable 'true');
foreign_server: 为外部服务器起一个名字,该名称自定义即可host: 远程数据库的地址port: 远程数据库的端口dbname:远程数据库的名称
创建用户映射
使用 CREATE USER MAPPING 语句创建一个用户映射,为本地用户指定一个访问远程服务器时的角色。
CREATE USER MAPPING FOR masterPostgresUser
SERVER foreign_server
OPTIONS (user 'sdePostgresUser', password 'sdePostgresPwd');
masterPostgresUser:本地数据库的用户名foreign_server:远程数据库别名sdePostgresUser:远程数据库的用户名sdePostgresPwd:远程数据库的密码
创建映射表
使用 CREATE FOREIGN TABLE 语句创建一个映射表
CREATE FOREIGN TABLE tableName (
country_id int NOT NULL,
country varchar(50) NOT NULL,
last_update timestamp NOT NULL
)
SERVER foreign_server
OPTIONS (schema_name 'public', table_name 'sdeTableName');
tableName:映射表名():括号中的是表结构foreign_server:远程数据库别名public:远程数据库模式sdeTableName:映射的远程数据库表名
以上示例在本地数据库中创建了一个名为 tableName 的外部表,对应的是远程服务器 foreign_server 中 public 模式下的sdeTableName 表。
以上信息摘录整理于CSDN。