根据txt文件更新表行

Ale*_*ves 1 postgresql shell

我一直在搜索,但到目前为止,我仅发现了如何基于csv文件将日期插入表中。

我有以下情况:

目录名称= ticketID

在此目录中,我有几个文件,例如:

  • Description.txt
  • Summary.txt -包含票头,并且已成功导入。
  • Progress_#.txt-这是每张票过期的时候。我得到一个新文件。
  • Solution.txt

导入Issue.txt其实很容易,因为它实际上是CSV。

现在我的问题是描述和进度文件。

我需要使用此文件中的数据更新现有行。线上的东西

update table_ticket set table_ticket.description = Description.txt where ticket_number = directoryname
Run Code Online (Sandbox Code Playgroud)

我使用的是PostgreSQL,该COPY命令对新数据有效,由于',; /特殊字符,它仍然会失败。

我想使用bash脚本执行此操作,但似乎不可能:

for i in `find . -type d`
do
  update table_ticket 
  set table_ticket.description = $i/Description.txt
  where ticket_number = $i
done
Run Code Online (Sandbox Code Playgroud)

当然,上面的代码将考虑到数据库的连接。

任何人都有关于如何使用Shell脚本实现此目标的想法。还是最好只用Java制作一些东西并读取和更新记录,尽管我想避免这种方法。

谢谢亚历克斯

Ale*_*ves 5

感谢您的回答,但我遇到了这个问题:

psql -U dbuser -h dbhost db 
\set content = `cat PATH/Description.txt`
update table_ticket set description = :'content' where ticketnr = TICKETNR;
Run Code Online (Sandbox Code Playgroud)

将其放入一个简单的脚本中,我创建了以下内容:

#!/bin/bash
for i in `find . -type d|grep ^./CS`
do
    p=`echo $i|cut -b3-12 -`
    echo $p
    sed s/PATH/${p}/g cmd.sql > cmd.tmp.sql
    ticketnr=`echo $p|cut -b5-10 -`
    sed -i s/TICKETNR/${ticketnr}/g cmd.tmp.sql
    cat cmd.tmp.sql
    psql -U supportAdmin -h localhost supportdb -f cmd.tmp.sql
done
Run Code Online (Sandbox Code Playgroud)

缺点是它将始终创建一个新连接,稍后我将更改以创建单个文件

但这正是我想要的,将内容放在一列中。

  • 注意`\ set content = \`cat PATH / Description.txt \``将在`:'content'`值的前面放置一个前导`=`-仅推荐`\ set content \`cat PATH / Description.txt \'' (3认同)