博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
file_fdw创建外部表及其与普通表的结合
阅读量:6689 次
发布时间:2019-06-25

本文共 4234 字,大约阅读时间需要 14 分钟。

hot3.png

参考原文:

postgresql从9.1开始增加了外部表访问的功能,这个功能就是数据库直接读取数据库以外的文件,比如csv或者text等类型的文件,暂时不支 持DML。postgresql有各种插件能直连各种异构DB,如oracle_fdw,mysql_fdw,file_fdw等,对数据的迁移是很方便 的,这是PG的扩展性较强的一个表现。这里介绍foreign data wrapper的file_fdw使用。 

一、环境: 
OS :CentOS 6.3 
DB :PostgreSQL 9.3 
二、使用过程 
1.创建扩展,因为默认不安装,安装需要手工创建

[postgres@kenyon ~]$ psqlpsql (9.3.0)Type "help" for help.postgres=# CREATE EXTENSION file_fdw;CREATE EXTENSIONpostgres=# \dx                        List of installed extensions   Name   | Version |   Schema   |                Description                ----------+---------+------------+------------------------------------------- file_fdw | 1.0     | public     | foreign-data wrapper for flat file access plpgsql  | 1.0     | pg_catalog | PL/pgSQL procedural language(2 rows)

2.创建外部表服务接口,查看

postgres=# create server pg_file_server foreign data wrapper file_fdw;CREATE SERVERpostgres=# \des             List of foreign servers      Name      |  Owner   | Foreign-data wrapper ----------------+----------+---------------------- pg_file_server | postgres | file_fdw(1 row)

3.建立一个外部表,与外部文件结构一致

postgres=# create foreign table tab_area(id int,cname varchar(80),ename varchar(80),create_time varchar(30)) server pg_file_server options(filename '/home/postgres/data1.csv',format 'csv',header on,delimiter ',',null '1'); --后面options里面参数的说明--filename后面是文件名和绝对路径--format是格式,csv是逗号分隔,text表示是tab分隔的方式--delimiter是分隔符--header表示第一行数据是否需要--null表示空数据的转化处理,例子中字段1将转化为null

4.上传外部文件

[postgres@kenyon ~]$ more data1.csv ?ID,cname,ename,create_time1,浙江,zhejiang,2013-01-012,杭州,hangzhou,2013-01-023,北京,beijing,2012-09-124,默认,,2013-09-105,四川,sichuan,2012-12-126,,nanjing,7,甘肃,,1998-12-12

5.查询

postgres=# select * from tab_area; id | cname |  ename   | create_time ----+-------+----------+-------------    | 浙江  | zhejiang | 2013-01-01  2 | 杭州  | hangzhou | 2013-01-02  3 | 北京  | beijing  | 2012-09-12  4 | 默认  |          | 2013-09-10  5 | 四川  | sichuan  | 2012-12-12  6 |       | nanjing  |   7 | 甘肃  |          | 1998-12-12(7 rows)

6.查看外部表

postgres=# \d+ tab_area                                    Foreign table "public.tab_area"   Column    |         Type          | Modifiers | FDW Options | Storage  | Stats target | Description -------------+-----------------------+-----------+-------------+----------+--------------+------------- id          | integer               |           |             | plain    |              |  cname       | character varying(80) |           |             | extended |              |  ename       | character varying(80) |           |             | extended |              |  create_time | character varying(10) |           |             | extended |              | Server: pg_file_serverFDW Options: (filename '/home/postgres/data1.csv', format 'csv', delimiter ',', header 'true', "null" '1')Has OIDs: no

7.与实际普通表的结合

postgres=# create table tab_act_area as select * from tab_area;SELECT 7postgres=# insert into tab_act_area select * from tab_area where id>2;INSERT 0 5postgres=# \d+                              List of relations Schema |     Name     |     Type      |  Owner   |    Size    | Description --------+--------------+---------------+----------+------------+------------- public | empsalary    | table         | postgres | 16 kB      |  public | tab_act_area | table         | postgres | 8192 bytes |  public | tab_area     | foreign table | postgres | 0 bytes    |  public | test         | table         | postgres | 5096 kB    | (4 rows)

8.修改外部表

postgres=# alter foreign table tab_area options(set null '^null*');ALTER FOREIGN TABLEpostgres=# select * from tab_area; id | cname |  ename   | create_time ----+-------+----------+-------------  1 | 浙江  | zhejiang | 2013-01-01  2 | 杭州  | hangzhou | 2013-01-02  3 | 北京  | beijing  | 2012-09-12  4 | 默认  |          | 2013-09-10  5 | 四川  | sichuan  | 2012-12-12  6 |       | nanjing  |   7 | 甘肃  |          | 1998-12-12(7 rows)

其他语法和普通表类似,除了option的三个选项(drop、add和set) ,具体参考: 

http://www.postgresql.org/docs/9.3/static/sql-alterforeigntable.html

9.工具的使用

三总结: 
1.外部表实际不存储数据,只是一张表结构; 
2.9.2版本比9.1版本多了option的选择,9.3又多了collate一些排序的补充,功能进一步完善,现在已有约束、default普通表的应有功能; 
3.实用性,对定期的数据抽取但无需入库检查是很方便的,既减少了数据存储,像基于postgresql的greenplum的数据导入导出就非常实用

转载于:https://my.oschina.net/liuyuanyuangogo/blog/369717

你可能感兴趣的文章
Canvas裁剪和Region、RegionIterator
查看>>
双色汉诺塔【分离型】
查看>>
【驱动】linux设备驱动·入门
查看>>
android 中文 api (72) —— BluetoothSocket[蓝牙]
查看>>
(Mediator)中介者模式的Java实现(加修改)
查看>>
思科网络模块和接口卡(语音&广域网)的名称标识
查看>>
我为什么关注node.js
查看>>
3.3. Forms
查看>>
如何设置Windows 8开始画面中瓷贴最大行数
查看>>
Irrlicht引擎使用2之中文显示
查看>>
架构设计-业务逻辑层简述
查看>>
Repcached介绍
查看>>
LGPL与闭源程序
查看>>
路由器PPPOE拨号配置
查看>>
JavaScript中的click()方法在JSF中的应用
查看>>
【聚能聊话题】有“一个女程序媛征男友的需求说明书”等你的回复
查看>>
shell中if的讲解及注意事项
查看>>
java正则表达式 --简单认识
查看>>
屏蔽优酷广告
查看>>
第六章--定时测量
查看>>