postgres psql bash script - ghdrako/doc_snipets GitHub Wiki

Flagi

  • -A — unaligned output - brak ramek, wyrównywania i dodatkowych spacji
-- bez -A
id | name
----+-------
 1  | Jan

-- Z -A:

id|name
1|Jan
  • -t — tuples only - Brak nagłówka i informacji dodatkowych
--Bez -t:

 id
----
 1
(1 row)


-- Z -t:

1
  • -F ',' - własny separator (np. CSV)

  • -X --no-psqlrc - bez ładowania .psqlrc

  • -q → mniej szumu w output

  • Pobranie jednej wartości do zmiennej (Bash)

USER_ID=$(psql -A -t -c "SELECT id FROM users WHERE email='[email protected]';")
echo $USER_ID
count=$(sudo -u postgres psql << EOF
SELECT COUNT(*) FROM (
  SELECT datname FROM pg_catalog.pg_database 
  WHERE lower(datname)=lower($DATABASE)
)
EOF
)
  • Pętla po wynikach zapytania
psql -A -t -c "SELECT id FROM users;" | while read id
do
  echo "User: $id"
done
  • CSV bez dodatkowych narzędzi
psql -A -t -F ',' -c "SELECT id,name FROM users;"

Wynik:

1,Jan
2,Anna
  • \copy in a "here document"
#!/bin/bash

psql -U username -h hostname -d database -p password -f - <<EOF
\copy (SELECT data FROM table LIMIT 100) to "Users/name/Downloads" With CSV
EOF
  • Run PSQL command from bash script psql -c \du -L output_of_du.txt

export PGDATABASE="${database}" export PGHOST="${host}" export PGPORT="${port}" while read -r file_name do psql -qAtX -1 -v "SCHEMA=${PGSCHEMA}" -v ON_ERROR_STOP=1 -f "${file_name}" || exit 1 done < <( printf '%s\n' migrations/*.sql | sort -V )