A PostgreSQL binding for Zig.
Status: Experimental
Not even Alpha!
Install
Using zigmod, add a line to the dependencies
(or root_dependencies
) in your zig.mod
file:
dependencies:
- src: http https://chiselapp.com/user/javier/repository/pgzig/zip/pgzig.zip
then in your source code:
const Pg = @import("pgzig");
Usage
Create a DB
object passing a connection string specifying the host
, user
, and database
:
var db = try Pg.DB.connect("host=<host> user=<username> database=<dbname>");
For SQL commands that don't produce a return value, use the simpleQuery()
method:
try db.simpleQuery(
\\ DROP TABLE IF EXISTS students;
\\ CREATE TABLE students (id BIGINT, name VARCHAR, year INTEGER);
);
Prepared statements are pre-parsed and stored in the database server. Use the .finalize()
method to release them.
var stmt = try client.prepare("SELECT name, year FROM students WHERE year < $1");
defer stmt.finalize();
The .exec()
method receives arguments (written as $1
, $2
in the prepared statement's SQL text) as a tuple, and a struct to define the type of each returned row.
const Row = struct { name: []const u8, year: i64 }
var curs = try stmt.exec(.{2010}, Row); // "... WHERE year < $1"
defer curs.deinit();
To retrieve all responses as a slice of rows, use .fetchAll()
:
const data = try curs.fetchAll();
Or get each row in a while loop with .fetch()
:
while (try curs.fetch()) |row| {
...
}