postgres_fdw-PostgreSQL外部数据封装器的使用

我的PostgreSQL数据库在Windows上,MADlib不支持,于是使用Docker部署了个Linux版本的PostgreSQL,并且安装了MADlib插件,利用postgres_fdw就可以方便分析Windows下的数据库进行分析了。

postgres_fdw模块提供外部数据封装器的功能,PostgreSQL通过 它可以访问存储在外部的 PostgreSQL服务器上的数据。

本模块提供的功能不但涵盖老版本中dblink模块实现的功能, 而且postgres_fdw提供更加透明和符合标准的语法来访问远程表,并在许多情况下 提供更好的性能。

使用postgres_fdw模块做远程访问的准备:

  1. 使用CREATE EXTENSION语句安装postgres_fdw.
    CREATE EXTENSION if not exists  postgres_fdw;
    

     

  2. 使用CREATE SERVER语句,为每个需要连接的远程数据库 创建一个外部服务器对象。指定除了userpassword 以外的连接信息作为服务器对象的选项。
    CREATE SERVER foreign_server_99
            FOREIGN DATA WRAPPER postgres_fdw
            OPTIONS (host '192.168.0.99', port '5432', dbname 'ml');

     

  3. 使用CREATE USER MAPPING语句,为每个需要通过外部服务器 访问的数据库创建用户映射。指定远程的和密码作为映射用户的userpassword
     CREATE USER MAPPING FOR postgres
            SERVER foreign_server_99
            OPTIONS (user 'postgres', password '1234');

     

  4. 使用CREATE FOREIGN TABLE语句,为每个需要访问的远程表创建外部表。 创建的外部表的对应列必须与远程表匹配。也可以在外部表中使用与远程表不同的表名和列名, 但前提是你必须将正确的远程对象名作为创建外部表对象的选项
     CREATE foreign TABLE abc_trans (
    	customer_id text NULL,
    	order_id text NULL,
    	brand text NULL,
    	category text NULL,
    	product_id text NULL,
    	purchase_date timestamptz NULL,
    	dow float8 NULL,
    	"time" time NULL,
    	quantity float8 NULL,
    	sales float8 NULL,
    	unit_price float8 NULL,
    	m_order float8 NULL,
    	m_order_product float8 NULL
    )
            SERVER foreign_server_99
            OPTIONS (schema_name 'abc', table_name 'trans');