Async PostgreSQL client for Nim.
Implements the PostgreSQL wire protocol v3 with full support for the extended query protocol, connection pooling, SSL/TLS, and binary format optimization.
Async Backend
Select at compile time with -d:asyncBackend=asyncdispatch (default) or -d:asyncBackend=chronos.
Quick Start
import pkg/async_postgres proc main() {.async.} = let conn = await connect("postgresql://myuser:mypass@127.0.0.1:5432/mydb") defer: await conn.close() # Insert with typed parameters let name = "Alice" let age = 30'i32 let cr = await conn.exec(sql"INSERT INTO users (name, age) VALUES ({name}, {age})") echo "Inserted: ", cr.affectedRows # Query multiple rows let minAge = 25'i32 let row = await conn.query(sql"SELECT id, name, age FROM users WHERE age > {minAge}") for r in row: echo r.getStr("name"), " age=", r.getInt("age") # Query a single value let count = await conn.queryValueOrDefault("SELECT count(*) FROM users", default = "0") echo "Total users: ", count waitFor main()
Modules
- pg_connection — Connection management, DSN parsing, SSL, LISTEN/NOTIFY
- pg_client — Query execution, prepared statements, cursors, pipelines, transactions, COPY, zero-alloc macros (queryDirect/execDirect)
- pg_pool — Connection pooling with health checks and maintenance
- pg_pool_cluster — Read replica pool cluster with automatic query routing
- pg_types — Type conversions (toPgParam, row accessors, arrays, ranges, composites, enums)
- pg_protocol — Wire protocol encoding/decoding
- pg_auth — MD5 and SCRAM-SHA-256 authentication
- pg_largeobject — Large Object API for streaming binary data
- pg_advisory_lock — Advisory lock API (session/transaction, exclusive/shared)
- pg_replication — Logical replication streaming with pgoutput decoder
- async_backend — Async framework abstraction (asyncdispatch / chronos)
Imports
-
async_postgres/async_backend, async_postgres/pg_protocol, async_postgres/pg_auth, async_postgres/pg_types, async_postgres/pg_connection, async_postgres/pg_client, async_postgres/pg_pool, async_postgres/pg_pool_cluster, async_postgres/pg_largeobject, async_postgres/pg_advisory_lock, async_postgres/pg_sql, async_postgres/pg_replication
Exports
-
milliseconds, <=, >=, cancelAndWait, <, >, wait, hours, >=, <=, sleepMsAsync, -, ZeroDuration, Moment, ==, toMilliseconds, Duration, scheduleSoon, seconds, hasChronos, unregisterFdReader, +, $, nanoseconds, -, +, minutes, sleepAsync, now, AsyncTimeoutError, allFutures, -, <, completed, >, cancelTimer, registerFdReader, CancelledError, hasAsyncDispatch, nanoseconds, asyncSpawn, ErrorField, addCString, FrontendMessageKind, RowData, encodeDescribe, encodeParse, addInt16, TransactionStatus, isBinarySafeOid, patchMsgLen, addSync, flushMsg, encodeClose, addCopyFieldNull, ParseResult, addCopyFieldInt64, pgCopyBinaryTrailer, encodeQuery, encodeTerminate, addCopyFieldText, encodePassword, syncMsg, decodeInt32, DescribeKind, encodeCopyDone, encodeSASLResponse, addCopyFieldInt16, buildResultFormats, newRowData, buildResultFormats, encodeStartup, addCopyFieldInt32, copyDoneMsg, addParse, encodeSSLRequest, BackendMessageKind, getErrorField, addClose, encodeStandbyStatusUpdate, encodeCancelRequest, formatError, addFlush, Row, addCopyFieldFloat64, reuseRowData, encodeBind, encodeInt16, addCopyFieldFloat32, addCopyDone, encodeInt32, addCopyBinaryTrailer, parseBackendMessage, encodeCopyFail, decodeCString, BinarySafeOids, addBind, addCopyTupleStart, addInt32, encodeCopyData, FieldDescription, decodeInt64, addDescribe, addInt64, ParseState, patchLen, encodeFlush, addExecute, CopyFormat, BackendMessage, addCopyBinaryHeader, addCopyFieldString, reuseRowData, ProtocolError, parseDataRowInto, encodeSASLInitialResponse, pgCopyBinaryHeader, decodeInt16, encodeSync, encodeExecute, addCopyFieldBool, md5AuthHash, scramVerifyServerFinal, scramClientFirstMessage, scramClientFirstMessage, scramClientFinalMessage, ScramState, scramEscapeUsername, get, getInt8Multirange, get, writeParamOid, writeParamOid, PgParam, get, toPgBinaryParam, OidBool, ==, getMacAddr, getStrOpt, getDate, getDateRangeArrayOpt, OidCircle, get, $, getDateRangeArray, encodeBinaryComposite, getLseg, getNumRangeArray, toPgBinaryParam, writeParamOid, $, getPath, writeParamOid, emptyRange, writeParamOid, getInt4Range, toMultirange, getBoolOpt, $, OidTsTzRangeArray, getBitOpt, toPgParam, writeParamValue, getTsTzRangeOpt, getInt64Array, getPathOpt, getPointOpt, getTsTzRange, get, affectedRows, writeParamFormat, getTsRange, getInt, ==, getInt4RangeOpt, writeParamValue, fromBE32, <=, getPolygon, getPolygon, ==, toPgBinaryParam, OidInt2, OidInt4, getInt8Range, toPgParam, getInetOpt, getNumeric, rangeFrom, ==, getStrArray, toPgBinaryParam, OidTsQuery, getNumRangeOpt, ==, toPgBinaryParam, columnIndex, getBool, PgNumeric, getXmlOpt, OidVarchar, toPgParam, hash, getInt64Opt, getTsMultirangeOpt, OidInt4Multirange, getCircle, OidNumeric, getInet, get, toPgBinaryParam, OidTimestampTz, toPgBinaryParam, OidInt4Array, getInt4RangeArrayOpt, toPgBinaryParam, getTsTzMultirangeOpt, get, getInt8MultirangeOpt, OidUuid, getHstore, CommandResult, toPgParam, getBitArrayOpt, getBox, encodeNumericBinary, getBoxOpt, toPgMultirangeParam, OidMacAddr, toPgBinaryParam, getIntOpt, getTsQueryOpt, getDateRange, toPgBinaryParam, OidXml, toPgBinaryParam, OidInt8, toPgParam, writeParamOid, toPgBinaryParam, getTimestamp, isNull, toPgBinaryParam, OidInt4Range, $, ==, get, getFloatOpt, OidFloat4Array, getNumMultirange, get, writeParamOid, getTsMultirange, getTsRangeOpt, columnIndex, $, getLseg, OidRecord, toPgParam, isZero, getXml, getTsRange, getInterval, writeParamOid, toPgBinaryParam, toPgParam, rangeOf, getInt8Range, getUuidOpt, isBinaryCol, getInt8MultirangeOpt, [], PgXml, writeParamFormat, ==, getTsMultirange, getTsQuery, toPgBinaryParam, OidFloat4, getHstoreOpt, [], $, PgUuid, toPgParam, getPath, toPgParam, PgPath, getBitOpt, toPgParam, getFloatArray, get, toPgParam, $, getTsVectorOpt, getMacAddr8Opt, toPgParam, toPgBinaryParam, getXml, writeParamValue, OidDateMultirange, pgComposite, toPgBinaryParam, $, get, getLineOpt, toPgBinaryTsTzRangeParam, OidPath, toPgBinaryParam, coerceBinaryParam, writeParamFormat, pgEpochDaysOffset, getStrArrayOpt, getFloat, toPgBinaryParam, getInt4Multirange, toPgParam, getBoolArrayOpt, get, get, toPgParam, getFloatArray, toPgParam, get, toBytes, $, toPgParam, $, PgTsVector, $, OidInet, OidJson, writeParamValue, get, getNumRangeArrayOpt, OidTsVector, OidBit, len, $, PgTsQuery, getMacAddr, ==, getInt8RangeArrayOpt, toPgBinaryParam, toPgParam, writeParamValue, getTsQueryOpt, toPgBinaryParam, getDateMultirange, ==, toPgParam, toPgBinaryParam, getBitArrayOpt, get, writeParamValue, toPgBinaryParam, toPgParam, toPgParam, encodeBinaryArray, getStr, parseTextArray, getHstoreOpt, OidInt2Array, getNumRange, getMacAddrOpt, getIntArray, getTsTzRangeOpt, OidTsTzRange, writeParamOid, getFloatArrayOpt, contains, getInt4Multirange, getIntArrayOpt, $, OidBytea, decodeBinaryArray, getInt64Array, get, get, getIntArrayOpt, getInt16ArrayOpt, getUuid, toPgBinaryTsTzRangeArrayParam, getDateMultirangeOpt, $, writeParamFormat, getInt16ArrayOpt, toPgBinaryParam, getBit, toPgBinaryParam, PgNumericSign, get, getNumRangeOpt, parseBitString, toPgParam, getPathOpt, ==, getBool, toPgParam, toPgParam, toPgBinaryParam, toPgBinaryParam, getFloat, getBitArray, OidNumRangeArray, ==, len, getNumeric, toPgBinaryParam, $, getStr, get, pgDomain, pgParams, writeParamFormat, toPgBinaryParam, ==, PgMacAddr8, getStrArray, OidTextArray, toPgBinaryParam, getLsegOpt, getMacAddr8, getCircleOpt, getDate, toPgBinaryParam, ==, getTsTzMultirange, getNumMultirangeOpt, getPoint, OidCidr, OidNumMultirange, getTsRangeOpt, toPgParam, getMacAddr8, ==, getBitArray, toPgParam, writeParamValue, getFloat32ArrayOpt, toPgBinaryParam, rangeTo, getPolygonOpt, OidTime, get, get, toPgBinaryParam, OidDateRangeArray, OidInt4RangeArray, PgBit, toPgRangeParam, ==, toPgParam, OidPoint, toPgParam, getBoolArray, OidBitArray, PgInterval, toPgTsTzRangeParam, getComposite, getXmlOpt, addParseDirect, getTsTzMultirangeOpt, getTsVector, decodeBinaryComposite, getFloat32ArrayOpt, OidTsTzMultirange, toPgParam, PgTypeError, OidText, getLine, getInt4MultirangeOpt, hash, getInt8Multirange, getCidr, getInt64ArrayOpt, getTsTzRangeArrayOpt, get, getStrOpt, PgLseg, get, addParse, getDateRange, writeParamOid, fromPgText, toPgParam, getInt4RangeOpt, encodeCompositeText, toPgBinaryParam, getInetOpt, $, getCircle, toPgParam, toPgParam, getInt4RangeArray, getTsTzMultirange, OidTsMultirange, getFloat32Array, >=, getIntOpt, toPgParam, getTimestamp, writeParamFormat, parsePgNumeric, PgRangeBound, get, ==, PgInet, getInt64Opt, toPgBinaryParam, $, OidPolygon, toPgBinaryParam, PgBox, OidInt8Range, OidInt8RangeArray, writeParamFormat, getJson, writeParamValue, toPgParam, rangeUpperInc, toPgBinaryParam, get, colTypeOid, getFloat32Array, toPgBinaryParam, rangeHasLower, getCircleOpt, encodeHstoreBinary, getBoolArrayOpt, get, OidDate, toPgBinaryParam, rangeHasUpper, ==, get, parseAffectedRows, toPgBinaryParam, ==, <, getNumMultirangeOpt, OidTimestamp, OidBoolArray, decodeHstoreBinary, get, initCommandResult, unboundedRange, getJsonOpt, getTsVectorOpt, get, toPgDateMultirangeParam, OidMacAddr8, fromBE16, OidBox, OidLine, toPgParam, getHstore, OidInt8Array, get, toPgDateRangeParam, getInt8RangeOpt, getLine, PgMultirange, PgError, OidTsRangeArray, toPgBinaryDateRangeArrayParam, toPgParam, getEnum, getIntervalOpt, getJsonOpt, ResultFormat, getInt64, getMacAddr8Opt, getInt16Array, getBytes, getDomainOpt, getBox, getBoxOpt, toPgBinaryParam, toPgParam, getTsTzRange, writeParamFormat, toPgParam, toPgParam, columnMap, addBindDirect, PgLine, OidFloat8, getDateRangeOpt, getBoolArray, getIntervalOpt, fromBE64, getFloatOpt, writeParamValue, getEnumOpt, toPgBinaryParam, getInterval, getFloatArrayOpt, getBoolOpt, getPointOpt, encodeHstoreText, getInt4Range, parseHstoreText, ==, toPgBinaryParam, PgHstore, getJson, getDateMultirange, PgCircle, getDomain, getLsegOpt, $, getNumericOpt, getTsMultirangeOpt, pgEnum, get, $, toPgParam, getBit, $, getInt16Array, get, toPgParam, PgPolygon, getLineOpt, OidDateRange, get, writeParamFormat, writeParamValue, getBytes, toPgBinaryParam, getUuid, ==, getCidr, OidLseg, getTsVector, getInt8RangeArray, toPgTsTzMultirangeParam, PgPoint, getDateMultirangeOpt, getTsQuery, PgCidr, getNumericOpt, getTsTzRangeArray, getInt, getInt8RangeOpt, toPgBinaryDateRangeParam, isNull, toPgParam, PgMacAddr, toPgParam, PgRange, getCompositeOpt, parseMultirangeText, getStrArrayOpt, toPgParam, toPgBinaryParam, getInt4MultirangeOpt, getInt64ArrayOpt, addBind, toPgParam, getUuidOpt, pgEpochUnix, getInet, getInt64, toPgParam, getNumMultirange, pgEnum, OidInterval, toPgBinaryParam, writeParamFormat, $, toRow, ==, OidTsRange, rangeEmpty, toPgParam, get, OidInt8Multirange, OidVarbitArray, toPgParam, items, getNumRange, OidNumRange, >, getPolygonOpt, OidVarcharArray, parseCompositeText, get, getMacAddrOpt, rangeLowerInc, toPgParam, OidVarbit, getTsRangeArrayOpt, getCidrOpt, parseRangeText, getPoint, toString, getIntArray, OidFloat8Array, encodeBinaryArrayEmpty, get, getDateRangeOpt, getTsRangeArray, cmp, OidJsonb, getCidrOpt, TargetSessionAttrs, clearStmtCache, PgError, PgTimeoutError, connect, CopyOutCallback, NoticeCallback, quoteIdentifier, ping, columnIndex, onNotify, PgConnState, dispatchNotice, listen, cancel, makeCopyOutCallback, HostEntry, CopyInCallback, PgConnection, getHosts, close, parseDsn, unlisten, addStmtCache, stopListening, sendBufMsg, newPgQueryError, PgQueryError, isUnixSocket, recvMessage, RowCallback, simpleExec, NotifyCallback, fillRecvBuf, ConnConfig, nextMessage, evictStmtCache, CopyInInfo, PgConnectionError, items, waitNotification, checkReady, CachedStmt, sendMsg, CopyResult, Notice, len, QueryResult, lookupStmtCache, makeCopyInCallback, Notification, PgPoolError, initConnConfig, SslMode, simpleQuery, removeStmtCache, nextStmtName, PgNotifyOverflowError, cancelNoWait, unixSocketPath, dispatchNotification, connect, CopyOutInfo, rows, buildTxBeginAndTimeout, newPipeline, close, close, Pipeline, queryValue, copyIn, PipelineResult, Cursor, addQuery, columnIndex, query, queryInTransaction, PreparedStatement, copyIn, queryDirect, addExec, queryValueOpt, copyIn, queryValueOrDefault, execInTransaction, PipelineResultKind, queryOne, DeferrableMode, copyIn, execute, withSavepoint, queryColumn, copyInStream, execInTransaction, queryEach, prepare, AccessMode, withTransaction, exec, hasReturnStmt, queryValueOrDefault, notify, queryValueOpt, columnIndex, execDirect, TransactionOptions, queryValue, copyOutStream, buildBeginSql, queryInTransaction, execute, copyOut, queryExists, IsolationLevel, openCursor, withCursor, fetchNext, metrics, queryExists, pendingAcquires, activeCount, queryValueOpt, simpleExec, queryValue, initPoolConfig, PgPool, queryEach, exec, queryInTransaction, query, queryValueOpt, simpleQuery, acquire, PoolConfig, withPipeline, resetSession, queryValueOrDefault, notify, poolConfig, size, isClosed, close, PoolMetrics, queryValueOrDefault, queryValue, idleCount, queryOne, withTransaction, withConnection, newPool, release, queryColumn, execInTransaction, writeQueryValueOrDefault, readQueryValueOrDefault, writeQueryColumn, PgPoolCluster, writeQueryValue, newPoolCluster, writeNotify, replicaFallback, primaryPool, readQueryValueOpt, readQuery, writeExecInTransaction, writeExec, readQueryValue, readQueryExists, withWriteConnection, readQueryOne, writeQueryInTransaction, writeQueryValueOrDefault, readQueryValue, writeQuery, readQueryValueOrDefault, writeSimpleQuery, readSimpleQuery, readQueryEach, writeQueryExists, writeQueryOne, close, writeQueryEach, readQueryColumn, fallbackTimeout, replicaPool, ReplicaFallback, writeQueryValue, withReadConnection, withPipeline, writeQueryValueOpt, writeSimpleExec, isClosed, readQueryValueOpt, writeQueryValueOpt, INV_WRITE, SEEK_END, SEEK_SET, makeLoWriteCallback, loTell, loReadStream, loWriteAll, loDefaultChunkSize, loImport, withLargeObject, makeLoReadCallback, loWrite, LoWriteCallback, Oid, LoReadCallback, INV_READ, SEEK_CUR, loTruncate, loSize, loClose, loWriteStream, loSeek, loCreate, loRead, loUnlink, INV_READWRITE, loExport, loOpen, loReadAll, LargeObject, withAdvisoryLockShared, withAdvisoryLockShared, withAdvisoryLock, advisoryTryLock, withAdvisoryLockXactShared, withAdvisoryLockXactShared, withAdvisoryLockXact, withAdvisoryLockXact, advisoryTryLockXact, advisoryLockXact, advisoryUnlockShared, withAdvisoryLockXact, advisoryLock, advisoryLock, withAdvisoryLockShared, withAdvisoryLockXact, advisoryLockShared, advisoryTryLockXact, withAdvisoryLockShared, advisoryUnlock, advisoryLockXact, advisoryTryLockShared, advisoryUnlockShared, advisoryUnlock, advisoryTryLockXactShared, withAdvisoryLock, advisoryTryLock, advisoryTryLockXactShared, advisoryLockXactShared, withAdvisoryLock, withAdvisoryLockXactShared, advisoryLockShared, advisoryUnlockAll, withAdvisoryLockXactShared, withAdvisoryLock, advisoryLockXactShared, advisoryTryLockShared, queryOne, queryValue, writeQueryValue, readQueryColumn, queryValue, writeQueryColumn, exec, queryEach, addQuery, readQueryValue, query, writeQueryExists, queryInTransaction, execInTransaction, readQueryOne, queryValueOrDefault, readQueryValue, writeQuery, addExec, readQueryEach, queryValueOpt, queryValueOpt, queryValueOrDefault, queryColumn, queryValue, readQueryValueOpt, queryOne, writeQueryValue, execInTransaction, readQueryValueOpt, execInTransaction, queryExists, readQueryValueOrDefault, readQuery, queryValueOpt, readQueryValueOrDefault, queryEach, writeExecInTransaction, exec, queryInTransaction, queryValueOrDefault, writeQueryEach, queryValueOpt, writeExec, writeQueryValueOpt, sql, writeQueryValueOrDefault, queryValueOrDefault, writeQueryValueOrDefault, query, readQueryExists, SqlQuery, queryValue, writeQueryOne, queryColumn, queryInTransaction, queryExists, writeQueryInTransaction, writeQueryValueOpt, sqlParams, decodePgOutput, ReplicationMessage, PgOutputMessageKind, DeleteMessage, toUInt64, ReplicationSlotInfo, readReplicationSlot, ==, dropReplicationSlot, TruncateMessage, currentPgTimestamp, RelationCache, pgEpochOffset, $, CommitMessage, <=, RelationColumn, TupleField, parseReplicationMessage, <, InvalidLsn, SystemInfo, LogicalMessage, parsePgOutputMessage, TypeMessage, toString, BeginMessage, identifySystem, PgOutputMessage, OriginMessage, toInt64, UpdateMessage, PrimaryKeepalive, Lsn, createReplicationSlot, TupleDataKind, sendStandbyStatus, makeReplicationCallback, parseLsn, XLogData, ReplicationMessageKind, InsertMessage, startReplication, connectReplication, stopReplication, ReplicationCallback, connectReplication, RelationInfo