全部產品
Search
文件中心

ApsaraDB RDS:查詢SQL Server資料庫(tds_fdw)

更新時間:Nov 27, 2024

您可以使用tds_fdw外掛程式訪問SQL Server資料庫的資料。

前提條件

  • 執行個體大版本為RDS PostgreSQL 11或以上。

  • 如執行個體大版本已滿足要求,但仍提示不支援,請升級核心小版本,具體操作,請參見升級核心小版本

  • 將RDS PostgreSQL的專用網路網段(例如172.xx.xx.xx/16)添加到SQL Server執行個體的白名單中,允許RDS PostgreSQL訪問。

    說明

    您可以在RDS PostgreSQL執行個體的資料庫連接中查看專用網路網段。查看VPC網段

背景資訊

tds_fdw是PostgreSQL外部資料封裝器,可以串連到使用Tabular Data Stream(TDS)協議的資料庫,例如Microsoft SQL server。

詳細說明請參見postgres_fdw

建立外掛程式

串連執行個體後建立tds_fdw外掛程式,命令如下:

create extension tds_fdw;

使用外掛程式

  1. 建立伺服器,樣本如下:

    CREATE SERVER mssql_svr
      FOREIGN DATA WRAPPER tds_fdw
      OPTIONS (servername '<串連地址>', port '<串連連接埠>', database 'tds_fdw_test', tds_version '7.1');
    說明

    伺服器定義中的servername必須配置為SQL Server的內網地址,port必須配置為SQL Server的內網連接埠。

  2. 建立外部表格。您可以通過多種方式建立外部表格:

    • 使用table_name定義建立外部表格,樣本如下:

      CREATE FOREIGN TABLE mssql_table (
       id integer,
       data varchar)
       SERVER mssql_svr
       OPTIONS (table_name 'dbo.mytable', row_estimate_method 'showplan_all');
    • 使用schema_name和table_name定義建立外部表格,樣本如下:

      CREATE FOREIGN TABLE mssql_table (
       id integer,
       data varchar)
       SERVER mssql_svr
       OPTIONS (schema_name 'dbo', table_name 'mytable', row_estimate_method 'showplan_all');
    • 使用query定義建立外部表格,樣本如下:

      CREATE FOREIGN TABLE mssql_table (
       id integer,
       data varchar)
       SERVER mssql_svr
       OPTIONS (query 'SELECT * FROM dbo.mytable', row_estimate_method 'showplan_all');
    • 使用遠程列名建立外部表格,樣本如下:

      CREATE FOREIGN TABLE mssql_table (
       id integer,
       col2 varchar OPTIONS (column_name 'data'))
       SERVER mssql_svr
       OPTIONS (schema_name 'dbo', table_name 'mytable', row_estimate_method 'showplan_all');
  3. 建立使用者映射,樣本如下:

    CREATE USER MAPPING FOR postgres
      SERVER mssql_svr 
      OPTIONS (username 'sa', password '123456');
  4. 匯入外部模式,樣本如下:

    IMPORT FOREIGN SCHEMA dbo
      EXCEPT (mssql_table)
      FROM SERVER mssql_svr
      INTO public
      OPTIONS (import_default 'true');