postgres_fdw-PostgreSQL外部数据封装器的使用
我的PostgreSQL数据库在Windows上,MADlib不支持,于是使用Docker部署了个Linux版本的PostgreSQL,并且安装了MADlib插件,利用postgres_fdw就可以方便分析Windows下的数据库进行分析了。
postgres_fdw模块提供外部数据封装器的功能,PostgreSQL通过 它可以访问存储在外部的 PostgreSQL服务器上的数据。
本模块提供的功能不但涵盖老版本中dblink模块实现的功能, 而且postgres_fdw提供更加透明和符合标准的语法来访问远程表,并在许多情况下 提供更好的性能。
使用postgres_fdw模块做远程访问的准备:
- 使用CREATE EXTENSION语句安装postgres_fdw.
CREATE EXTENSION if not exists postgres_fdw;
- 使用CREATE SERVER语句,为每个需要连接的远程数据库 创建一个外部服务器对象。指定除了user和password 以外的连接信息作为服务器对象的选项。
CREATE SERVER foreign_server_99 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.0.99', port '5432', dbname 'ml');
- 使用CREATE USER MAPPING语句,为每个需要通过外部服务器 访问的数据库创建用户映射。指定远程的和密码作为映射用户的user 和password。
CREATE USER MAPPING FOR postgres SERVER foreign_server_99 OPTIONS (user 'postgres', password '1234');
- 使用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');