If you add binaries like psql, that need to control the terminal, to `eshell-visual-commands', Emacs will give them their own ansi-term buffers when you start them in eshell. `eshell-visual-subcommands' does the same for e.g. git log (but try Magit, too!)
The most annoying problem I couldn't find a solution for was lack of ability to open majority of applications in terminal - e.g. postgress shell.
Solution I am using nowadays is:
1. Zsh->Emacs shell macro to open file in emacs using emacsclient.
2. Emacs->Zsh by emacs function generating "cd" command to the folder of current file and adding it to my clipboard.