Можете пользоваться пулом подключений, если подключения нет — пул автоматом создаст новое (обычно библиотеки, которые позволяют создать pool — хорошо и эффективно создают такие соединения)
Ваша задача только: между сервисами разделить потребности пулов, чтобы размеры пулов в сумме у всех сервисов не были больше количества соединений самого Postgres.
Также посмотрите на pgbouncer или odissey, если у вас нагруженное приложение.
Вообще пересоздать подключение не сложно — вы же создаете первое, также создаете и новое... Предварительно можете пинговать соединение через метод ping() — такой обычно есть у всех библиотек для работы с серверами баз, если оно занято — пересоздать его, Но вам нужно учитывать, что подключение может быть занято долгой транзакцией... потому пул соединений является лучшим решением.