ssh -L reaches a database that is only on the private network
The database only accepts connections from the bastion. Tunnel through it, and your local client thinks the database is on localhost.
ssh -N -L 5433:db.internal:5432 bastion
psql "host=localhost port=5433 dbname=app"-N runs no remote command, only the tunnel. Put it in ~/.ssh/config as a LocalForward line and opening it is one word.
shelloperations