I’d say in terms of Lwt, if you don’t think you need it, it’s much easier to do without it. I use Lwt with PGOcaml as everything is in an asynchronous context with what I’m doing, and Lwt also has some nice modules for things like connection pooling. But using promises definitely complicates matters!
SO answers are better than nothing, but I think a PR back to PGOcaml improving the docs is the best solution overall. I am guilty of not doing this enough. There’s an outstanding issue already for this at least: PGOCaml discovery - Documentation and sample code · Issue #96 · darioteixeira/pgocaml · GitHub
For some context, PGOcaml uses a common pattern in OCaml libraries of functors to abstract its functionality, so the same library code can be adapted to different “backends” - so PGOCaml can work with Lwt, Async (another concurrency library) or potentially any future threading or concurrency library as long as you can provide an adapter). The main PGOcaml module itself is actually just that generic functor instantiated with a basic backend assuming very direct usage: pgocaml/PGOCaml.ml at master · darioteixeira/pgocaml · GitHub