npx skills add ...
npx skills add convex-dev/convex --skill convex-db
npx skills add convex-dev/convex --skill convex-db
Use Convex DB — a lattice-backed SQL database. Use when helping users write queries, connect via JDBC or PostgreSQL clients, create tables, insert/query data, or use the direct lattice API.
Convex DB provides SQL access over lattice data. Connect via JDBC, PostgreSQL wire protocol, or the direct lattice API.
Reference: convex-db/README.md for full documentation including replication, PostgreSQL server setup, and architecture details.
Driver auto-registers via ServiceLoader. Class: convex.db.jdbc.ConvexDriver
Column 0 (first column) is always the primary key. Types are inferred from inserted data.
For bulk loading, use prepared statements with batch:
CREATE TABLE, DROP TABLEINSERT, UPDATE, DELETESELECT, WHERE, ORDER BY, LIMIT, OFFSETINNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOINGROUP BY, HAVING, COUNT, SUM, AVG, MIN, MAXCASE WHEN, COALESCE, CAST, BETWEEN, IN, LIKE, IS NULLABS, FLOOR, CEIL, SQRT, UPPER, LOWER, TRIM, SUBSTRING, LENGTH, CONCAT| SQL Type | CVM Type | Notes |
|---|---|---|
| BIGINT / INTEGER | CVMLong | 64-bit signed integer |
| DOUBLE | CVMDouble | 64-bit float |
| VARCHAR | AString | Unicode string |
| BOOLEAN | CVMBool | true/false |
| VARBINARY / BLOB | ABlob | Binary data |
| TIMESTAMP | CVMLong | Milliseconds since epoch |
| ANY | ACell | Dynamic type |
For programmatic access without SQL overhead:
WHERE id = ?) for point queries — O(log n) via index pushdownimport psycopg2
conn = psycopg2.connect(host="localhost", port=5432, dbname="mydb")CREATE TABLE users (id, name, email)INSERT INTO users VALUES (1, 'Alice', 'alice@example.com')PreparedStatement ps = conn.prepareStatement("INSERT INTO users VALUES (?, ?, ?)");
for (int i = 0; i < 10000; i++) {
ps.setLong(1, i);
ps.setString(2, "Name-" + i);
ps.setString(3, "email-" + i + "@example.com");
ps.addBatch();
}
ps.executeBatch();-- Point lookup (fast — O(log n) via PK index pushdown)
SELECT * FROM users WHERE id = 1
-- Filtering, sorting, pagination
SELECT name, email FROM users WHERE name LIKE 'A%' ORDER BY name LIMIT 10
-- Joins
SELECT c.name, o.amount
FROM customers c INNER JOIN orders o ON c.id = o.customer_id
-- Aggregations
SELECT department, COUNT(*), AVG(salary)
FROM employees GROUP BY department HAVING COUNT(*) > 5conn.setAutoCommit(false);
stmt.execute("INSERT INTO users VALUES (2, 'Bob', 'bob@example.com')");
stmt.execute("UPDATE users SET email = 'new@example.com' WHERE id = 1");
conn.commit(); // atomic merge — all changes become visible
// or conn.rollback() to discardConvexDB cdb = ConvexDB.create();
SQLDatabase db = cdb.database("mydb");
// Create table
db.tables().createTable("users", new String[]{"id", "name", "email"});
// Insert
db.tables().insert("users", 1, "Alice", "alice@example.com");
// Point lookup
AVector<ACell> row = db.tables().selectByKey("users", 1);
// Scan all
Index<ABlob, AVector<ACell>> all = db.tables().selectAll("users");
// Delete
db.tables().deleteByKey("users", 1);# Build (requires Convex core installed first)
cd convex && mvn clean install -DskipTests -pl convex-db -am
# Run tests
cd convex && mvn test -pl convex-db