I want to execute a psql statement within a bash script and output the results to a file. The code I have below works as desired:
#!/bin/bash
query=\"select
You are overwriting the file each time with >
inside the loop. You need >>
inside or have >
outside the loop:
#!/bin/bash
query="select * from mytable;"
for (( i=0; i<5; i++ ))
do
psql <<EOF
\timing
$query
EOF
done > output.txt
Putting >
after done
is a little more efficient than >>
inside the loop.
Similar post:
It is usually better to not run Postgres in a loop. Just generate the commands you want to execute, then run the sequence of generated commands once.
#!/bin/bash
query="select * from mytable;"
for (( i=0; i<5; i++ ))
do
cat <<___EOF
\timing
$query
___EOF
done |
psql > output.txt
which of course in this case can be simplified to just
#!/bin/bash
printf '-- %s\n\\timing\nselect * from mytable;\n' {1..5} |
psql >output.txt
The brace expansion {1..5}
is Bash-specific, so you can't use sh
for this particular snippet. (There is a difference.)