I've found perhaps a bug.
I've narrowed down my code and the problem is indeed at: conn = PQconnectdb(conninfo);
My connection string: host=192.168.178.12 dbname=DATABASE user=foo password=bar
When I remove key/value host=xxx then everything is OK. Valgrind mentions: no leaks are possible.
When key/value host=xxx is added, not everything is freed and there are tons of bytes still reachable.
==9195==
==9195== HEAP SUMMARY:
==9195== in use at exit: 450,080 bytes in 2,829 blocks
==9195== total heap usage: 9,476 allocs, 6,647 frees, 7,810,733 bytes allocated
==9195==
==9195== LEAK SUMMARY:
==9195== definitely lost: 0 bytes in 0 blocks
==9195== indirectly lost: 0 bytes in 0 blocks
==9195== possibly lost: 0 bytes in 0 blocks
==9195== still reachable: 450,080 bytes in 2,829 blocks
==9195== suppressed: 0 bytes in 0 blocks
==9195== Rerun with --leak-check=full to see details of leaked memory
==9195==
==9195== For counts of detected and suppressed errors, rerun with: -v
==9195== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 14 from 6)
The network address is the machine's address where I was testing on. So I could also have used localhost or 127.0.0.1 but this gave me the same result when using the network address.