Я пытался повторить это, и я думаю, что ваша проблема на самом деле в блоке try-catch-finally.
Итак, когда ваш код достиг части const dataStream = client.query(copyTo(q))
, он начинает потоковый процесс, которыйне связано с обещанием, поэтому выполнение идет непосредственно к блоку finally
. Однако в этом finally
блоке вы завершаете работу клиента, поэтому при потоковой передаче данных (которая все еще выполняется) будет выдана ошибка Error: Connection terminated
, так как для потоковой передачи потребуется некоторое время.
Чтобы это исправить, вы можете простоудалите client.end()
из блока finally и поместите это клиентское завершение как в блок catch, так и в обработчик событий end
stream, и тогда оно должно работать.
Вы также можете сделать console.log(data.toString())
во время события readable
, так как в противном случае распечатанные данные будут двоичными.