ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PostgreSQL跨库操作(dblink、postgres_fdw)

2021-07-09 13:32:59  阅读:533  来源: 互联网

标签:PostgreSQL postgres 跨库 dblink fdw db1


PostgreSQL跨库操作(dblink、postgres_fdw)

使用PostgreSQL本身提供的扩展插件,例如dblink和postgres_fdw,可以跨库操作表。

背景信息

阿里云RDS for PostgreSQL云盘版实例开放dblink和postgres_fdw插件,支持相同VPC内实例(包括自建PostgreSQL数据库)间的跨库操作。如果要访问VPC外部的其他实例,可以通过相同VPC内ECS的端口跳转实现。

注意事项

PostgreSQL云盘版的dblink和postgres_fdw插件进行跨库操作的注意事项如下:

相同VPC内的ECS/RDS PostgreSQL实例可以直接跨库操作。
RDS PostgreSQL实例可以通过本VPC内的ECS实例进行端口跳转,实现跨库操作。
自建PostgreSQL实例可以通过oracle_fdw或mysql_fdw连接VPC外部的Oracle实例或MySQL实例。
连接自身跨库操作时,host请填写localhost,port请填写show port命令返回的本地端口。

一、使用dblink

1、新建dblink插件。

create extension dblink;

2、创建dblink连接。

postgres=> select dblink_connect('<连接名称>', 
'host=<同一VPC下的另一RDS的内网域名> port=<同一VPC下的另一RDS的内网监听端口> user=<远程数据库用户名> password=<密码> dbname=<库名>');


postgres=> SELECT * FROM dblink('<连接名称>', '<SQL命令>') as <表名>(<列名> <列类型>); 

示例

postgres=> select dblink_connect('a', 'host=pgm-bpxxxxx.pg.rds.aliyuncs.com port=3433 user=testuser2 password=passwd1234 dbname=postgres'); 


postgres=> select * from dblink('a','select * from products') as T(id int,name text,price numeric);  //查询远端表

在这里插入图片描述

更多详情请参见dblink https://www.postgresql.org/docs/12/dblink.html

二、使用postgres_fdw

1、新建一个数据库。

postgres=> create database <数据库名>;  //创建数据库

postgres=> \c <数据库名>  //切换数据库

示例

postgres=> create database db1;  
CREATE DATABASE  

postgres=> \c db1  

2、新建postgres_fdw插件。

db1=> create extension postgres_fdw;

3、新建远程数据库服务器。

db1=> CREATE SERVER <server名称>                                                              
        FOREIGN DATA WRAPPER postgres_fdw  
        OPTIONS (
        host '<同一VPC下的另一RDS的内网域名>,
        port '<同一VPC下的另一RDS的内网监听端口>', 
        dbname '<同一VPC下的另一RDS的库名>'
        );  
db1=> CREATE USER MAPPING FOR <本地数据库用户名>      
        SERVER <server名称> 
        OPTIONS (
        user '<远程数据库用户名>', 
        password '<远程数据库密码>'
        );  

示例

db1=> CREATE SERVER foreign_server1                                                              
        FOREIGN DATA WRAPPER postgres_fdw  
        OPTIONS (
        host 'pgm-bpxxxxx.pg.rds.aliyuncs.com', 
        port '3433', 
        dbname 'postgres'
        );  
CREATE SERVER  


db1=> CREATE USER MAPPING FOR testuser      
        SERVER foreign_server1  
        OPTIONS (
        user 'testuser2', 
        password 'passwd1234'
        );  
CREATE USER MAPPING  

4、导入外部表。

db1=> import foreign schema public from server foreign_server1 into <SCHEMA名称>;  //导入外部表
db1=> select * from <SCHEMA名称>.<表名>      //查询远端表

示例

db1=> import foreign schema public from server foreign_server1 into ft;  
IMPORT FOREIGN SCHEMA  

db1=> select * from ft.products;  

更多详情请参见postgres_fdw https://www.postgresql.org/docs/12/postgres-fdw.html

在这里插入图片描述

来源 :https://help.aliyun.com/document_detail/142422.html

标签:PostgreSQL,postgres,跨库,dblink,fdw,db1
来源: https://blog.csdn.net/sunny_day_day/article/details/118604303

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有