Using Postgres connection functions

Matthias Klumpp mak at debian.org
Mon Jan 15 02:28:29 UTC 2018


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


More information about the Digitalmars-d-learn mailing list