PostgreSQL创建外部表

PostgreSQL创建外部表

PostgreSQL从9.1开始增加了外部表访问的功能,这个功能就是数据库直接读取数据库以外的文件,比如csv或者text等类型的文件,暂时不支持DML。

PostgreSQL有各种插件能直连各种异构DB,如oracle_fdw,mysql_fdw,file_fdw等,对数据的迁移是很方便的,这是PG的扩展性较强的一个表现。

一、环境:
PostgreSQL 11.5

创建postgres_fdw插件

 CREATE EXTENSION postgres_fdw;

如果不创建会以下报错

ERROR: server “timescale_db” already exists

二、使用过程 :

begin;  
-- 括号里的三个参数,分别是timescaledb(要连接的表)的ip、端口和数据库名称
CREATE SERVER timescale_db FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.5.5', port '5432', dbname 'postgres');
-- 括号里的两个参数,分别是timescaledb(要连接的表)数据库的用户名、密码
create user mapping for postgres server timescale_db options(user 'postgres', password '123456');

--创建相关表框架
--DROP FOREIGN TABLE tb_fdw_timescale_XXX;
CREATE FOREIGN TABLE tb_fdw_timescale_XXX 
 (
  collect_time timestamp(6),
  target_code varchar(36) ,
  value numeric(12,2) ,
  file_no int4 ,
  create_time timestamp(6),
  out_of_range char(1)
 )
 server timescale_db 
 options ("schema_name" 'postgres',table_name 'tb_ss_emp');  --指定连接的外部模式名和表名

commit;

三、查验:

--查看外部表连接情况
select * from pg_foreign_server;
--级联删除外部表
DROP SERVER timescale_db CASCADE;

四、总结:
1. 外部表实际不存储数据,只是一张表结构;

2. 9.2版本比9.1版本多了option的选择,9.3又多了collate一些排序的补充,功能进一步完善,现在已有约束default普通表的应有功能;

3. 实用性,对定期的数据抽取但无需入库检查是很方便的,既减少了数据存储,像基于postgresql的greenplum的数据导入导出就非常实用

你可能感兴趣的:(PostgreSQL数据库)