我有一个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文件,否则不会写入任何内容。但是,如果我试图加载的数据太大,那么我将不得不每次都要不断调整睡眠时间。我该如何避免这种情况?
答案 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
希望它有所帮助。