How to iterate through a result set from a bash script
12 May 2014
This is my new favourite way:
#!/bin/bash
set -e
set -u
PSQL=/usr/bin/psql
DB_USER=myuser
DB_HOST=myhost
DB_NAME=mydb
$PSQL \
-X \
-h $DB_HOST \
-U $DB_USER \
-c "select username, password, first_name, last_name from users" \
--single-transaction \
--set AUTOCOMMIT=off \
--set ON_ERROR_STOP=on \
--no-align \
-t \
--field-separator ' ' \
--quiet \
-d $DB_NAME \
| while read username password first_name last_name ; do
echo "USER: $username $password $first_name $last_name"
done
Also, you can read into an array:
#!/bin/bash
set -e
set -u
PSQL=/usr/bin/psql
DB_USER=myuser
DB_HOST=myhost
DB_NAME=mydb
$PSQL \
-X \
-h $DB_HOST \
-U $DB_USER \
-c "select username, password, first_name, last_name from users" \
--single-transaction \
--set AUTOCOMMIT=off \
--set ON_ERROR_STOP=on \
--no-align \
-t \
--field-separator ' ' \
--quiet \
$DB_NAME | while read -a Record ; do
username=${Record[0]}
password=${Record[1]}
first_name=${Record[2]}
last_name=${Record[3]}
echo "USER: $username $password $first_name $last_name"
done