package pgx

  1. Overview
  2. Docs
Pure-OCaml PostgreSQL client library

Install

Dune Dependency

Authors

Maintainers

Sources

pgx-2.1.tbz
sha256=3c53140b3b7082835927604f2511c77329406edcea5f378fed60f9fe9cb7da5d
sha512=cc95e07625c195675f01700e31906488bbe40f3db887b2564c9d19f250900b165174ba595acdb35adb5f7db6bcaf5f9fb1d784efd1c5f7d5202d61641ac55a12

Description

PGX is a pure-OCaml PostgreSQL client library, supporting Async, LWT, or synchronous operations.

Published: 31 May 2022

README

README.md

PGX is a pure-OCaml PostgreSQL client library, supporting Async, LWT, or synchronous operations.

This library focuses on correctness and safety, with features like:

  • It is nearly impossible to try to execute a prepared statement that hasn't been prepared.

  • Trying to run multiple queries at the same time will work properly (although there's no performance benefit, since we currently don't send queries in parallel).

  • Lots of automated tests.

  • Pgx.Value for parameters and returned data, encouraging people to use the built-in converters instead of trying to handle everything as a string.

  • Async and LWT support are built in, no need to write your own IO module.

  • Mirage OS is supported via Pgx_lwt_mirage

We also provide a relatively high-level interface, like Pgx_async.execute_pipe, which prepares a statement, executes it with the given parameters, returns an Async.Pipe.Reader.t (so you can stream results), and unprepares the statement when the query is finished.

Significant portions of the code come from PG'Ocaml.

Setup

opam install pgx_async # or pgx_lwt_unix or pgx_unix or pgx_lwt_mirage

Examples

See pgx_async/bin/pgx_async_example.ml for a complete example of the high-level functional interface. To translate the example to Lwt, replace Pgx_async with Pgx_lwt and >>| with >|=. To translate it to synchronous IO / standard-library-only, use Pgx_unix and replace both >>| and >>= with |>, or just replace >>| fun () -> with ;.

I.e. in Pgx_unix, you can replace:

Pgx_async.execute ~params "INSERT INTO ..."
>>| fun () ->

... with:

Pgx_unix.execute ~params "INSERT INTO ...";

Dependencies (10)

  1. uuidm
  2. sexplib0 >= "v0.13.0"
  3. re >= "1.5.0"
  4. ppx_sexp_conv >= "v0.13.0"
  5. ppx_custom_printf >= "v0.13.0"
  6. ppx_compare >= "v0.13.0"
  7. ocaml >= "4.08" & < "5.0"
  8. ipaddr
  9. hex
  10. dune >= "1.11"

Dev Dependencies (3)

  1. odoc with-doc
  2. bisect_ppx dev & >= "2.0.0"
  3. alcotest with-test & >= "1.0.0"

Conflicts

None