PostgreSQL访问远程数据库

PostgreSQL访问远程数据库
 最后更新于 2024年10月02日 23:02:55

最近使用PostgreSQL数据库时,在业务数据库master中需要使用到地图空间数据库sde的表。但sde中的表数据量太大,无法做数据同步,这时就需要使用postgres_fdw 插件 远程映射这些数据表。

postgres_fdw 简介

postgres_fdw 是基于 SQL/MED 标准开发的一个外部数据封装器(Foreign Data Wrapper),可以用于访问外部 PostgreSQL 服务器,对远程数据表执行 SELECTINSERTUPDATE 以及 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_serverpublic 模式下的sdeTableName 表。

以上信息摘录整理于CSDN