On Saturday, 13 January 2018 at 17:58:14 UTC, Joe wrote:
On Saturday, 13 January 2018 at 10:10:41 UTC, Jacob Carlborg
wrote:
There's a native D library, ddb [1], for connecting to
Postgres. Then you don't have to worry about null-terminated
strings.
There are several D libraries that I would consider "native":
derelict-pq, dpq, dpq2 and ddb. The latter perhaps has the
distinction that it doesn't use libpq, but rather implements
the Postgres FE/BE protocol. That's a bit *too* native for my
taste. It means the library maintainer has to keep up with
changes to the internal protocol, which although published, the
Postgres group doesn't have to maintain compatibility from
version to version. For example, they haven't dropped the
PQsetdbLogin function even though the PQconnectdb and
PQconnectdbParams functions are obviously preferred. OTOH,
there used to be an AsciiRow message format in the protocol,
that was dropped, unceremoniously (not even mentioned in the
release notes).
If you are after a good way to use Postgres in a real-world
application, I highly recommend ddbc[1] (which also supports
other backends).
There are a lot of D Postgres bindings out there, and all of them
are about 70% completed, but nobody really bothered to make one
finished and really good (and well maintained) binding. DDBC is
really close to being complete, and contains a few convenience
features that make it nice to use in an application. It also is
used by Hibernated[2] in case you want an ORM for your app at
some point.
Both libraries aren't up to tools like SQLAlchemy & Co. from
other programming languages, but they are decent.
For simple cases, dpq2 & Co. might work well enough as well.
In any case, please don't start another Postgres library and
consider contributing to one of the existing ones, so that we
maybe have one really awesome, 100% complete library at some
point.
If, on the other hand, your goal is to learn about the low-level
Postgres interface and not just to have a Postgres interface for
an application you develop, by all means, play with it :-)
Cheers,
Matthias
[1]: https://github.com/buggins/ddbc
[2]: https://github.com/buggins/hibernated