PostgreSQL 對於一個連線的 Session,就是一個 postgres 程序,會開一個 Unix Socket 來進行。所以若是頻繁的斷線/連線,對 PostgreSQL 來說,開銷比較大。
這也使的 PostgreSQL 一直到 9.5 版為止,對於一個處在 Idle 狀態的 Session,沒有自動逾時斷線的機制,除非手動踢掉它。直到 9.6 版,才多設計一個預設不啟用 Transaction Timeout 的參數,idle_in_transaction_session_timeout,才比較「接近」逾時中止交易的機制。這些都算是傾向保留住 Session 的設計。
(註 1:嚴格來說,idle_in_transaction_session_timeout 這個參數不是逾時斷線,而是交易卡住強制中斷)
(註 2:idle_in_transaction_session_timeout 參數可以針對 Database 或 User 進行個別設置。)
因此對於短暫交易的活動型態,在 PostgreSQL 中,便會採用 Connection Pooling 程式,咬住一些 PostgreSQL 的 Session,然後負責應付外部連線,由它進行分配。