最近使用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。