日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

跨庫操作(dblink、postgres_fdw)

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

您可以加入RDS PostgreSQL插件交流釘釘群(103525002795),進行咨詢、交流和反饋,獲取更多關于插件的信息。

背景信息

阿里云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實例的數據庫連接中查看專有網絡網段。查看VPC網段

使用dblink

  1. 新建dblink插件。

    create extension dblink;
  2. 創建dblink連接。

    postgres=> select dblink_connect('<連接名稱>', 'host=<同一VPC下遠端目標數據庫所在實例的內網域名> port=<同一VPC下遠端目標數據庫所在實例的內網監聽端口> 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

使用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下的遠端目標數據庫所在實例的內網域名>,port '<同一VPC下的遠端目標數據庫所在實例的內網監聽端口>', dbname '<同一VPC下的遠端目標數據庫的名稱>');  
    
    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

常見問題

問題:通過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;

返回結果如下:

輸出結果