Chinaunix

标题: 用shell脚本保存数据库查询结果的问题 [打印本页]

作者: littlebirds    时间: 2007-08-06 21:52
标题: 用shell脚本保存数据库查询结果的问题
system:fc4
db:postgresql-8.1.4

在windows下执行一个数据库查询备份:
copy (select * from tablea where condition)  to 'd:/bkfile'    该文件的内容如下:
14052206001        1405220600109379        \N        2007-05-22
14052200004        1405220000404241        2007-05-22 08:55:51        2007-05-22

以下是在linux中的备份查询sh:
#! /bin/sh
psql -d RealtimeInfo -U postgres > /root/tbtime <<-EOF
        select *from tablea where condition;
EOF
tbtime的文件内容如下:
   mineid    |      cardid      |      entertime      |  holddate  
-------------+------------------+---------------------+------------
14052200004 | 1405220000404124 | 2007-05-22 08:55:21 | 2007-05-22
14052200004 | 1405220000404241 | 2007-05-22 08:55:51 | 2007-05-22

使用copy的命令将文件回复到数据库中后,windows下测试的结果是bkfile文件中每一列数据恢复到数据库表相应的字段中,
但是linux下的测试结果是:整个文件的内容都恢复到数据库表的第一个字段,即:mineid中。不是对应的字段中。

为什么会出现这种情况?
相同的查询结果,bkfile的文件内容格式和tbtime的内容格式却不一样?

请各位高手多多指教!
作者: zhangshebao    时间: 2007-08-07 01:50
正确啊,分隔符不同.你试试:
echo "        select mineid from tablea where condition;
"|psql -d RealtimeInfo -U postgres > /root/tbtime
作者: littlebirds    时间: 2007-08-07 20:53
标题: 回复 #2 zhangshebao 的帖子
好象不行吧,执行的时候出错:
line 2: echo select mineid,cardid,entertime,holddate from hisrealresult where holddate > '2007-05-01' and holddate < '2007-06-01';: command not found
作者: littlebirds    时间: 2007-08-07 22:01
那你的写法测试结果一样。
从数据库输出的时候可以指定文件的输出格式么?
谢谢
作者: zhangshebao    时间: 2007-08-07 22:12
1楼说结果到了第1个第段,我看不象,所以让你仅选第1个字段。
3楼少引号所以出错,而且选了全部字段达不到测试目的。
字段对错了是导入不对;字段正确,输出格式不对需要指定输出格式或作格式转换。
如何指定输出格式,要去了解psql用法。
我让你测试的是验证你说的“但是linux下的测试结果是:整个文件的内容都恢复到数据库表的第一个字段,即:mineid中。不是对应的字段中。
”是否正确。
作者: zhangshebao    时间: 2007-08-07 22:19
如果数据库数据正确,又不会指定格式,就用格式转换:
echo "        select * from tablea where condition;
"|psql -d RealtimeInfo -U postgres |sed -e 's/ | /\t/g'> /root/tbtime
作者: littlebirds    时间: 2007-08-07 22:43
标题: 回复 #6 zhangshebao 的帖子
看来是文件分割符的问题:
把tbtime中的“|”分隔符全部替换成“Tab”制表符后,保存在tbtime文件中的数据通过copy命令可以恢复到目标数据表相应的字段中。

这样的话,通过什么命令可以对tbtime文件中的“|”进行替换,我在做测试的时候是手动进行的。

谢谢!
作者: littlebirds    时间: 2007-08-07 23:25
按6楼的提示可以指定输出字段的分隔符。

多谢!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2