使用shell脚本更新PostgreSQL表的每一行

时间:2015-04-21 18:38:33

标签: database postgresql shell

我有一个shell脚本,其中包含一个ips列表。

在该脚本的for循环下,每次挑选15 ips并将状态更改为'删除'。

有些专家可以说明如何在shell脚本for循环下更新那些ips列表? 这意味着我应该从shell脚本的for循环内部做些什么来对PostgreSQL数据库进行连续更改?

2 个答案:

答案 0 :(得分:3)

您可以使用命令行工具psql更改PostgreSQL数据库。如果您有更新所需的密码,则可以设置PGPASSWORD环境变量。例如:

PGPASSWORD="mypassword" psql -U username -c database "statement"

如果不需要密码,请执行

psql -U username -c database "statement"

如果访问不需要用户名,则可以

psql -c database "statement"

对于要更改的随机IP,我要使用psql创建一个包含所有IP的数组

SELECT * FROM ips;

然后创建15个随机数,将它们用作索引(当然你必须确保没有创建两次随机数),然后将它们设置为在数据库中删除的状态。

阅读评论后: 要更新,您可以这样做:

updateIP=`echo ip_string | awk -F' ' '{print $1}'`
psql -U user -c database "UPDATE iptable SET status='status_removed' WHERE ip='${updateIP}';"

要更新单个记录,您可以将IP存储在表格中,然后输入#34; iptable"输入列" ip"列"状态"。

下的状态

答案 1 :(得分:0)

psql -U pgsql -d database -c "statement"

至少对于基于FreeBSD的系统,上述声明适用。在postgres 10中,这些标志是不同的。对于Linux,同样可能也是这样。