Как поправить ошибку FATAL: remaining connection slots are reserved for non-replication superuser connections?
То есть, закрытие соединения на уровне кода..
Да? Это вам кто сказал?
Connections can be used as context managers. Note that a context wraps a transaction: if the context exits with success the transaction is committed, if it exits with an exception the transaction is rolled back. Note that the connection is not closed by the context and it can be used for several contexts
https://www.psycopg.org/docs/connection.html
Тем более у вас контекст на курсор.

SET SESSION idle_in_transaction_session_timeout = '2min';
Снова мимо. IDLE и IDLE IN TRANSACTION, очевидно, разные состояния.

Закрывайте соединения как положено.
Поставьте PgBouncer для переиспользования пула соединений