Every serious database has a canonical C library. PostgreSQL has libpq, MySQL has libmysqlclient, SQLite practically is one. That single C library matters far beyond C programmers: it is what PHP extensions bind, what Lua and Nim and a dozen scripting languages wrap, what anyone ports to a new platform first. Netezza never had one. For twenty years the only way to speak to the appliance from native code was IBM’s proprietary binaries: the ODBC and OLE-DB drivers, and libnzpq beneath them, downloaded from behind a support login, installed system-wide, and bound by licence rather than by a header file. IBM’s own Apache Arrow ADBC driver (IBM/nz-adbc) links libnzpq for exactly this reason: there was no open C library to build on.
Having built native Netezza drivers in ten languages this year – Python, Go, Java, Rust, C#, Perl, Ruby, Elixir, R and Julia – we kept arriving at the same conclusion: the ecosystem needs the foundation piece, not just the leaves. So we built libnz.
Two files, the whole protocol
libnz is deliberately small to adopt: one header, one C file. Vendor them into your tree or make a shared library; either way you get the complete NPS wire protocol – connect and authenticate against both appliance generations (old racks negotiate MD5, current systems SHA-256, the library follows), run queries, bind parameters injection-safely, read fully typed results, drive external tables in both directions at wire speed, and encrypt the session with TLS.
The default build’s only dependency is the system OpenSSL, and even that is optional: compile with one flag and libnz has no dependencies at all, with TLS requests failing cleanly instead of silently downgrading. The login hashes are implemented in the file, tested against the official specification vectors, so an air-gapped build machine compiles it as happily as a laptop.
The details C gets right
Results come back as UTF-8 C strings rendered exactly as the appliance’s own text format, with a null pointer for SQL NULL – no locale surprises, no half-decoded encodings. The European character set Netezza uses for CHAR and VARCHAR on disk is transcoded in the library, so a euro sign survives into your C string byte-exact. Netezza’s widest NUMERIC spans 38 digits, beyond any hardware integer; libnz decodes it exactly using the compiler’s 128-bit arithmetic rather than rounding through a double. And after a server error the library drains the connection back to a ready state, so one failed statement never poisons the session – a detail we learned the hard way porting the first driver, and every port since has inherited the fix.
Everything above was tested live against a real NPS 7.2 appliance and a real NPS 11.2 system before we called it done, the same bar every driver in this programme has met.
What this unlocks
The point of a foundation is what gets built on it. A PHP PDO driver that binds libnz instead of the creaking ODBC bridge. Lua and Nim bindings that are an afternoon’s work instead of a from-scratch protocol implementation. A WebAssembly build that runs queries from edge compute. Those are next on our roadmap, and each becomes tractable precisely because the wire protocol now lives in one well-tested C file instead of being re-derived per language.
A database ecosystem is only as healthy as its C library. Netezza finally has one.
Where you get it
We did not build this for ourselves. Our software is written in Python, so nothing in our stack uses it; it exists because the gap did, and because other teams kept falling into it. Open publication is coming soon. If you maintain native code that reaches Netezza through ODBC because there was no alternative – there is one now. Talk to us if you want it in your own estate.
Built from the published open source Netezza drivers (IBM/nzpy and IBM/nzalchemy under Apache-2.0, IBM/nzgo under MIT), verified live against both NPS 7.2 and NPS 11.2, and produced without decompiling, disassembling or inspecting any IBM proprietary binary.
Running Netezza? Let’s talk. Smart Associates has been engineering on IBM Netezza for two decades: disaster recovery, migrations, performance and the deep platform work in between. If any of the above sounds familiar, why not get in touch.
