导入文本文件中的数据到PostgreSQL中

阅读更多
作者: 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  

你可能感兴趣的:(PostgreSQL,MySQL,PHP,Cache,SQL)