暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

postgres_fdw安装使用

原创 怕晒的太阳 2022-09-06
2820

1. 概述

postgres_fdw模块提供了外部数据封装器postgres_fdw, 它可以被用来访问存储在外部PostgreSQL服务器中的数据。

这个模块提供的功能基本上覆盖了较老的dblink模块的功能。 但是postgres_fdw提供了更透明且更兼容标准的语法来访问远程表, 并且可以在很多情况下给出更好的性能。

2. 安装

目前PG11版本已经自带postgres_fdw插件,因此不需要主动安装直接可以使用。

3. 创建插件

插件postgres_fdw安装后, 还需要做以下几步,才能保证PG11同一套数据库中两个库互相访问,或者是两套PG11之间互相访问。

3.1. 新建插件

新建postgres_fdw插件命令如下:

Ø create extension postgres_fdw;

给具体PG11数据库创建插件,需要使用超级管理员用户。连接方式pg -d [databasename] -U [superUser]


3.2. 本地创建SERVER

Ø CREATE SERVER <SERVER名称> FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbserver '<数据库地址>',port '<数据库端口>',dbname '<数据库名>');

--列出已经创建的foreign server命令是:\des+

如果port是默认5432可以省略;如果创建成功后,发现OPTIONS中参数有误,可以使用alter server进行修改。具体语句如下:

ALTER SERVER name [ OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] ) ]

赋予数据库用户对应权限,用赋权的普通用户创建。

Ø grant usage on foreign data wrapper postgres_fdw to test;

创建server

登录普通用户test用户创建sever:

Ø CREATE SERVER test_dblink FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '127.0.0.1', dbname 'test011');


修改server信息

Ø ALTER SERVER test_dblink OPTIONS (add port '5432');

Ø ALTER SERVER test_dblink OPTIONS (drop port);


3.3. 创建用户映射

创建用户映射。命令如下,此步一定要进入赋权的用户进行操作,否则创建外部表失败。

Ø CREATE USER MAPPINGFOR <数据库账号> SERVER <映射名> OPTIONS (user '<数据库用户名>', password '<数据库用户密码>');

Ø 如果映射的密码错误可以使用ALTER USER MAPPING语法修改。

ALTER USER MAPPING FOR { user_name | USER | CURRENT_USER | SESSION_USER | PUBLIC }

    SERVER server_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )

Ø CREATE USER MAPPING FOR test SERVER test_dblink OPTIONS (user 'test', password 'test@1234');


3.4. 创建外部表

创建PG的外部表。示例如下:

Ø CREATE FOREIGN TABLE <创建Vastbase表名>(<表结构信息>) SERVER  <映射名>  OPTIONS (table_name '<表名称>', schema_name '<表的模式名称>');

注意:CREATE FOREIGN TABLE中声明的列数据类型和其他性质必须要匹配实际的远程表,列名也必须匹配。

Ø CREATE FOREIGN TABLE test (a int) server test_dblink OPTIONS (schema_name 'public', table_name 'test');


以下是PG11两个库的查询结果:


3.5. 删除创建的对象

Ø drop foreign table <表名称>;

Ø drop user mapping for <用户名> server <SERVER_NAME>;

Ø drop server <SERVER_NAME>; #创建用户删除

Ø DROP EXTENSION <插件名称>; #创建用户删除

3.6. 导入外部表

IMPORT FOREIGN SCHEMA创建表示存在于 外部服务器上的表的外部表。新外部表将由发出该命令的用户所拥有并且用 匹配远程表的正确的列定义和选项创建。

默认情况下,存在于外部服务器上一个特定模式中的所有表和视图都会被导入。根据需要,表的列表可以被限制到一个指定的子集,或者可以排除特定的表。 新外部表都被创建在一个必须已经存在的目标模式中。

要使用IMPORT FOREIGN SCHEMA,用户必 须具有外部服务器上的USAGE特权以及在目标模式上的 CREATE特权。

Ø 语法:

IMPORT FOREIGN SCHEMA remote_schema

    [ { LIMIT TO | EXCEPT } ( table_name [, ...] ) ]

    FROM SERVER server_name

    INTO local_schema

[ OPTIONS ( option 'value' [, ... ] ) ]


4. 扩展

4.1. 相关系统表

通过下列系统表可以查看数据库外部表信息。

系统表 | 简命令操作 | 含义 |
| pg_extension | \dx | 插件 |
| pg_foreign_data_wrapper | \dew | 支持外部数据库接口 |
| pg_foreign_server | \des | 外部服务器 |
| pg_user_mappings | \deu | 用户管理 |
| pg_foreign_table | \det | 外部表 |

4.2. 使用优化

减少对远端服务器的连接影响;可以使用物化视图。

1、在本地数据库创建物化视图

create materialized view mv_t1 as select * from t1;

2、 刷新一下本地的物化视图即可看到新进来的数据:

refresh materialized view mv_t1

4.3. 数据同步

本地创建外部表;可对外部表支持执行delete、update、insert语句;同时远程数据库的表也会执行相对应的操作。例如两个数据库实现token的一致。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论