タイトルのような状況に遭遇してしまった場合
以下のように実行する。
$ docker exec -i postgres /usr/local/bin/psql db -U db_user <<EOT
select version();
EOT
version
---------------------------------------------------------------------------------------
PostgreSQL 11.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 8.2.0) 8.2.0, 64-bit
(1 row)
ヒアドキュメントを入力とするので -t オプション(疑似TTYの割り当て)は不要
つけた場合はエラーになる。
$ docker exec -it postgres /usr/local/bin/psql db -U db_user <<EOT
select version();
EOT
the input device is not a TTY
以下のように sh -c で実行することもできる。
$ docker exec -it postgres sh -c "/usr/local/bin/psql db -U db_user <<EOT
select version();
EOT"
version
---------------------------------------------------------------------------------------
PostgreSQL 11.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 8.2.0) 8.2.0, 64-bit
(1 row)