设为首页 收藏本站
查看: 1031|回复: 0

[经验分享] [转载]导入文本文件中的数据到PostgreSQL中

[复制链接]

尚未签到

发表于 2016-11-20 11:03:22 | 显示全部楼层 |阅读模式
作者: falcon   来源:http://oss.lzu.edu.cn/blog/article.php?tid_1265.html

说明:下面的操作在gentoo上完成,关于postgreSQL的基本使用请参考资料[1]

    上次在《用AWK转换树形数据成关系表》中提到可以通过AWK把以“树形”方式存放的数据转换成关系表,这里将介绍如何把这个表从文本文件中直接导入到PostgreSQL数据库管理系统中。
    如果用过mysql,你会发现它提供了一个非常有用的load命令来导入文本文件中存放的数据,强大的PostgreSQL也提供了类似的工具,那就是COPY命令,基本的用法是:

Quote:
COPY  tablename FROM  'filename' WITH DELIMITER ' delimiter'



    这里涉及到导入哪个表,从哪里导入,以及原始数据的分割符。这里涉及的核心东西还是原始数据,因为我们需要根据原始数据设计表,指定分割符,然后导入到PostgreSQL中。
    首先看看上次的数据(用AWK转换树形数据成关系表),文件名叫db,内容是一个系统函数的部分调用层次.
Quote:
1   1   sys_clone
2   2    do_fork
3   3    alloc_pidmap
4   3    copy_process
5   4    dup_task_struct
6   5    prepare_to_copy
7   5    kmem_cache_alloc
8   5    kmem_cache_alloc
9   5    memcpy
10  4    ktime_get_ts
11  5    getnstimeofday
12  6    do_gettimeofday
13  7    get_offset_tsc
14  5    set_normalized_timespec
15  4    audit_alloc
16  4    copy_semundo
17  4    copy_files
18  5    dup_fd
19  6    alloc_files


    这个文本文件中有三列数据,分别叫调用顺序,调用层次,函数名,从文本数据中我们看出分割符并不固定,是一个或者多个空格。
    下面通过三步把上面的文本数据导入到PostgreSQL中。
    首先,设计数据库,叫syscall, 表为tree,表中字段包括调用顺序id,调用层次depth,函数名func。具体创建库和表(在gentoo发行版上):
Quote:
$ su postgres
$ createdb syscall
$ psql -d syscall
syscall=#  CREATE TABLE "tree" (id bigint, depth bigint, func char(100));
syscall=# \quit


    现在我们处理一下上面的文本,把分割符设置成单个空格。
Quote:
$ sed -i -e 's/[[:space:]][[:space:]]*/ /g' db


    把处理过后的文件存放到某个指定目录下(我把它放在/home/falcon/database/db),然后导入数据库中。
Quote:
$ psql -d syscall
syscall=# COPY tree FROM '/home/falcon/database/db' with DELIMITER ' ';
或者
syscall=# \COPY tree FROM '/home/falcon/database/db' with DELIMITER ' '
看看效果:
syscall=# select * from tree limit 10;


    注:貌似用COPY命令的时候得指定文本文件的绝对路径,而\copy命令可以用相对路径。集合上篇文章(用AWK转换树形数据成关系表),实际上我们就可以把内核函数跟踪工具KFT的结果存放到数据库中了,相关的工作包括如何处理KFT产生的调用树,如何自动跟踪不同的系统调用等。如果有兴趣届时可以访问我的个人首页。
   
[1] http://gentoo-wiki.com/HOWTO_Configure_Postgresql
[2] PostgreSQL Usage and Tutorials
http://www.eskimo.com/~ericj/personal/postgresql/
[3] COPY command of psql
http://www.postgresql.org/docs/8.2/static/sql-copy.html  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302848-1-1.html 上篇帖子: 基于pgpool II 和PostgreSQL的分布式数据库的设计与实现 下篇帖子: 在postgreSQL数据库上 SSH应用开发bug记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表