What KDBS is not

v3.0.0

The features KDBS leaves out on purpose, the workloads it is not built for, and the reason for each.

In this article

KDBS is an OLTP engine, not a general-purpose one. It leaves out features that would make a statement’s cost unpredictable or give one thing two spellings, and it says so with an error instead of accepting the statement and doing something else. If your workload is analytical scans over long history, use a column store. If it is frequent transactional access to current data that must obey rules, KDBS is built for that.

Workloads it is not for

WorkloadWhy not
Analytics and data warehousingNo CTEs, derived tables, window functions or HAVING. A full scan costs about twice what PostgreSQL’s does per row, measured on one host (see Known gaps).
Ad-hoc reporting with complex SQLThe grammar is small on purpose: joins are inner equi-joins run in the order written, and WHERE conditions combine only with AND.
Serving clients over a networkThe server listens on loopback (127.0.0.1) only, so clients run on the same host. TLS and SCRAM authentication exist but are off by default.
Long-running transactionsAn explicit transaction is rolled back once it exceeds txn_lifetime_ceiling_ms (60 s by default).
Replicated or highly available deploymentsThere is no streaming standby, and no logical dump.

SQL it refuses on purpose

Every refusal carries the byte position of the offending token. NOT_IMPLEMENTED means the design admits the form and this release has not built it. UNSUPPORTED means the engine’s design cannot admit it, so the statement must be rewritten. See Refusals.

Left outReason
CTEs (WITH) and subqueries in FROMThe inner result would have to become a temporary relation, which breaks direct primary-key probing into the next step. Subqueries are allowed in WHERE.
Window functionsAn analytical feature; KDBS makes no attempt to be a data warehouse.
Expressions in a select list or WHEREA smaller grammar that always runs predictably was chosen over a larger one. Expressions are allowed in UPDATE … SET.
OR and NOT over conditionsSame reason. Conditions combine with AND.
Outer joins (LEFT, RIGHT, FULL)Not built. The words are reserved so the grammar will not change if they land.
HAVING, and ORDER BY over grouped resultsKept as one open decision. Filter before grouping with WHERE, or filter the result in the client.
A cost-based plannerThe plan is fixed when the statement is parsed and never changes with table size. This is what lets a pattern_id name one plan. See Statements and execution plans.
Query rewrites and decorrelationThe order you write is the order that runs; it is part of the contract with the client.
UNIQUE indexesAn index speeds up reads and must never make a write fail. See CREATE INDEX.
floatIts comparison and rounding rules do not fit an engine that keeps values exact. Use decimal(p, s). See Data types.
Updating a primary keyThe key is the row’s identity, not a field of it. See Row identity and primary keys.
SERIAL, AUTO_INCREMENT, IF NOT EXISTS, public., FROM t a without ASEach would be a second spelling of something that already has one. An INSERT that leaves out the key already gets an issued id.
Escaping a quote inside a string literalSame reason as above.
Data-moving ALTER TABLEALTER TABLE only renames. See ALTER TABLE, DROP TABLE.
CREATE TABLE ... HEAPNew tables are B+ trees only, so that storage form can mature first.
Savepoints and nested transactionsNot offered.
CursorsA reply streams whole. Page with WHERE id > <last seen> LIMIT n. See SELECT.

Storage and operations it does not do

  • The data file never shrinks. Pages of a dropped table are reused, but nothing returns space to the file system, and no VACUUM moves live rows.
  • No incremental, compressed or encrypted backup, no parallel copy, no object-storage target. See Back up and restore.
  • Point-in-time recovery targets a log position, not a time, because the commit record carries no time.

Not production-hardened yet

KDBS v3.0.0 is under active development. Read Known gaps before you rely on it: it lists what is missing and what a restart loses.

See also