详情页标题前

阿里云RDS数据库跨库操作(dblink、postgres_fdw)-云淘科技

详情页1

使用PostgreSQL本身提供的扩展插件,例如dblinkpostgres_fdw,可以跨库操作

背景信息

阿里云RDS for PostgreSQL云盘版实例开放dblink和postgres_fdw插件,支持相同VPC内实例(包括自建PostgreSQL数据库)间的跨库操作。

购买PostgreSQL云盘版实例。

注意事项

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

  • 相同VPC内的ECS/RDS PostgreSQL实例可以直接跨库操作。

  • 自建PostgreSQL实例可以通过oracle_fdw或mysql_fdw连接VPC外部的Oracle实例或MySQL实例。

  • 同一实例中的不同数据库之间进行跨库连接时:

    • 建议host显式设置为127.0.0.1而非localhost,以避免因实例开启IPV6导致跨库连接失效。

    • 不建议显式设置Port,因为阿里云运维操作或者用户执行变配等操作可能导致Port变化,从而导致连接失败。不显式设置Port能够在连接时默认使用数据库当前Port参数,从而保证连接有效性。

    • 如果需要显式设置Port,则请连接数据库执行SQL语句SHOW PORT;查询后再设置。

  • 需要将RDS PostgreSQL的专有网络网段(例如172.XX.XX.XX/16)添加到目标数据库的白名单中,允许RDS PostgreSQL访问。

    说明

    您可以在RDS PostgreSQL实例的数据库连接中查看专有网络网段。阿里云RDS数据库跨库操作(dblink、postgres_fdw)-云淘科技

使用dblink

  1. 新建dblink插件。

    create extension dblink;
  2. 创建dblink连接。

    postgres=> select dblink_connect('', 'host= port= user= password= dbname=');
    
    postgres=> SELECT * FROM dblink('', '') 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);  //查询远端目标数据库中的表
    
                            

    阿里云RDS数据库跨库操作(dblink、postgres_fdw)-云淘科技

更多详情请参见dblink。

使用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                                                               
            FOREIGN DATA WRAPPER postgres_fdw  
            OPTIONS (host ',port '', dbname '');  
    
    db1=> CREATE USER MAPPING FOR       
            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 ;  //导入外部表
    
    db1=> select * from .      //远端目标数据库的表

    示例

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

    阿里云RDS数据库跨库操作(dblink、postgres_fdw)-云淘科技

更多详情请参见postgres_fdw。

常见问题

问题:通过postgres_fdw访问外部表时,如果访问的表是一个分区表,如何导入外表?

解决方案:在目标实例上执行,只需要导入分区表名字即可,无需导入partition表。

以Range Partition为例,代码示例如下:

-- 源头实例的源头库
CREATE TABLE sales (id int, p_name text, amount int, sale_date date) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2022_Q1 PARTITION OF sales FOR VALUES FROM ('2022-01-01') TO ('2022-03-31');
CREATE TABLE sales_2022_Q2 PARTITION OF sales FOR VALUES FROM ('2022-04-01') TO ('2022-06-30');
CREATE TABLE sales_2022_Q3 PARTITION OF sales FOR VALUES FROM ('2022-07-01') TO ('2022-09-30');
CREATE TABLE sales_2022_Q4 PARTITION OF sales FOR VALUES FROM ('2022-10-01') TO ('2022-12-31');

INSERT INTO sales VALUES (1,'prod_A',100,'2022-02-02');
INSERT INTO sales VALUES (2,'prod_B', 5,'2022-05-02');
INSERT INTO sales VALUES (3,'prod_C', 5,'2022-08-02');
INSERT INTO sales VALUES (4,'prod_D', 5,'2022-11-02');

-- 目标实例上执行,只需要导入分区表名字即可,无需导入partition表。
import FOREIGN SCHEMA public limit to (sales) from server pg_fdw_server into public;
select * from sales;

返回结果如下:

阿里云RDS数据库跨库操作(dblink、postgres_fdw)-云淘科技

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/155841.html

(0)
上一篇 2023年12月9日 下午7:49
下一篇 2023年12月9日 下午7:50
详情页2

相关推荐

  • 腾讯云Serverless SSR账号权限管理-云淘

    操作场景 Serverless SSR 基于 Serverless Framework 与 Coding DevOps 构建计划完成部署,用户在使用前,必须保证已经开通这两项服务,并拥有相关角色的调用权限。本文主要介绍首次登录 SSR 控制台时,Serverless Framework 与 Coding DevOps 的授权流程。 操作步骤 主账号授权 1.…

    腾讯云 2023年12月9日
  • 腾讯云对象存储静态网站

    简介 本文档提供关于静态网站的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket website 设置静态网站 为已存在的存储桶设置静态网站配置信息 GET Bucket website 查询静态网站 查询指定存储桶的静态网站配置信息 DELETE Bucket website 删除静态网站 删除指定存储桶的静态网站配置信…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云RDS数据库申请或释放外网地址-云淘科技

    RDS支持内网地址和外网地址两种地址类型,默认提供内网地址供您内部访问RDS实例,如果需要外网访问,您需要申请外网地址。 内网地址和外网地址 地址类型 说明 内网地址 默认提供内网地址,无需申请,无法释放,可以切换网络类型。 如果您的应用部署在ECS实例,且该ECS实例与RDS实例在同一地域,且网络类型相同,则RDS实例与ECS实例可以通过内网互通,无需申请…

    阿里云数据库 2023年12月9日
  • 阿里云RDS数据库空间分析-云淘科技

    数据库自治服务DAS为RDS PostgreSQL提供空间分析功能,可以直观地查看数据库实例的空间使用概况、空间剩余可用天数,以及数据库中某个表的空间使用情况、空间异常诊断等,能够帮助您及时发现数据库中的空间异常,避免影响数据库稳定性。 前提条件 RDS PostgreSQL数据库实例为高可用版。 注意事项 空间分析功能最多分析20000张表。 操作步骤 访…

    阿里云数据库 2023年12月9日
  • 腾讯云云函数(SCF)流量路由配置-云淘科技

    操作场景 云函数(Serverless Cloud Function,SCF)支持流量路由设置。通过该设置,您可便捷控制函数版本在实际使用场合或环境中的灰度上线或回滚流程,避免一次性上线可能带来的风险。在创建别名或进行流量配置调整时,可通过控制台控制流量指向两个函数版本,实现流量在版本间按照一定的规则路由。目前支持按权重随机路由和按规则路由两种路由方案:当您…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。