说明:下面的操作在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 |
这个文本文件中有三列数据,分别叫调用顺序,调用层次,函数名,从文本数据中我们看出分割符并不固定,是一个或者多个空格。
下面通过三步把上面的文本数据导入到PostgreSQL中。
首先,设计数据库,叫syscall, 表为tree,表中字段包括调用顺序id,调用层次depth,函数名func。具体创建库和表(在gentoo发行版上):
Quote: |
$ su postgres |
现在我们处理一下上面的文本,把分割符设置成单个空格。
Quote: |
$ sed -i -e 's/[[:space:]][[:space:]]*/ /g' db |
把处理过后的文件存放到某个指定目录下(我把它放在/home/falcon/database/db),然后导入数据库中。
Quote: |
$ psql -d syscall |
注:貌似用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