尝试从DB加载数据时,预计脚本会退出太快

时间:2016-12-02 21:10:49

标签: postgresql csv expect psql

我有一个expect脚本,它将来自heroku postgres数据库的数据加载到本地.csv文件中。由于需要自动化和输入密码,我需要使用expect。到目前为止,我的脚本如下所示:

SELECT COALESCE(RoleDuty1,RoleDuty2,RoleDuty3,RoleDuty4,RoleDuty5,RoleDuty6,RoleDuty7,'All null) as FIRST_NON_NULL
FROM aTable

#!/usr/bin/expect spawn psql -h <host> -p <port> -U <username> -W <db name> -t -A -F "," -f sql.sql -o output.csv expect "Password for user <db name>: " send "<password>\r" sleep 10 是一个SQL查询,例如sql.sql。 请注意,我需要在expect脚本的末尾添加一个sleep,以允许将数据写入.csv文件,否则不会写入任何内容。但是,如果我试图加载的数据太大,那么我将不得不每次都要不断调整睡眠时间。我该如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

要避免为不同的查询调整睡眠,只需在expect脚本中添加全局超时。

set timeout -1

所以你的脚本会是这样的: -

#!/usr/bin/expect

set timeout -1
spawn psql -h <host> -p <port> -U <username> -W <db name> -t -A -F "," -f sql.sql -o output.csv
expect "Password for user <db name>: "
send "<password>\r"
#sleep 10

希望它有所帮助。