FDW参考快速入门

外部数据包装器FDW(FOREIGN DATA WRAPPER)是PostgreSQL提供用于访问外部数据的插件,外部数据源包括本实例中其它库中的数据或其他实例的数据。Ganos FDW提供了对于多种空间数据类型的统一访问,会自动将几何空间数据类型映射为Geometry字段类型,从而允许与数据库内部表进行统一地访问与查询。

操作步骤

  1. 创建时空引擎FDW插件。

    您可以通过以下两种方式创建扩展。

    • 使用CASCADE关键字创建扩展。

      CREATE EXTENSION ganos_fdw WITH schema public CASCADE;
      说明

      建议将扩展安装在public模式下,避免出现权限问题。

    • 直接创建ganos_fdw扩展。

      CREATE EXTENSION ganos_spatialref;
      CREATE EXTENSION ganos_geometry;
      CREATE EXTENSION ganos_fdw;
  2. 将空间数据文件注册为外表。

    1. 注册Shapefile。

      SELECT ST_RegForeignTables('OSS://<access_id>:<secrect_key>@[<Endpoint>]/<bucket>/path_to/filet');
      说明

      各参数解释如下:

      • ak_idak_secret分别为OSS访问的AccessKey信息,具体请参见获取AccessKey ID和Secret

      • Endpoint为OSS服务的Endpoint(地域节点)。为保证数据的可访问性,请确保云数据库与OSS所在Region相同,并使用内部Endpoint地址。 相关信息请参考OSS Endpoint

      • /<bucket>/path_to/file为文件在OSS中的路径。如果使用Shapefile文件,一个完整的Shapefile文件至少包含三个必须的相关文件:.shp、.shx和.dbf,且必须上传至同一个OSS文件夹中。

    2. 通过information_schema.foreign_tables视图查询注册的FDW表。

      SELECT foreign_table_name FROM information_schema.foreign_tables ORDER BY foreign_table_name ASC;
  3. 查询外表。

    SELECT fid, ST_AsText(geom), name, age, height FROM poly WHERE fid = 1;

    结果示例:

    fid  | ST_AsText(geom)                  | name      | age |  height
    --------------------------------------------------------------------
       1 | POLYGON((5 0,0 0,0 10,5 10,5 0)) | ZhangShan |  35 |   1.84 
  4. 导入到数据库表中。

    • 如果未创建表,使用如下命令创建并插入数据。

      CREATE TABLE poly_db AS SELECT * FROM poly;
    • 如果表已创建,可以通过以下两种方式导入数据。

      • 通过INSERT SELECT方式:

        INSERT INTO poly_db SELECT * FROM poly;
      • 通过IMPORT FOREIGN SCHEMA方式:

        CREATE SCHEMA imp;
        
        IMPORT FOREIGN SCHEMA ganos_fdw
          FROM SERVER ganos_fdw_server
          INTO imp;
  5. (可选)删除扩展。

    DROP EXTENSION Ganos_FDW CASCADE;