# Versions and upgrades > A new KDB opens the data of an older KDB. An older KDB refuses the data of a newer KDB with "needs a newer KDB" and changes nothing. - Category: Backup, check, repair, restore - Keywords: version, versions, upgrade, kdb upgrade, kdb version, SHOW VERSION, VERSION, feature list, stored-format feature, needs a newer KDB, newer KDB, older KDB, old data, compatibility, exit code 3, Newer format, 0A000, KDB\_TEST\_HIDE\_FEATURES, partition\_format\_2, block\_stats, auto\_meta, table\_grants, pg\_catalog\_parts, batched\_log\_sync, database\_settings, dedup\_change, plpgsql\_triggers, symbol\_partitions, round\_time\_zone, no feature name, catalog part, downgrade, kdb downgrade, kdb features, going back, older version, go back to an older KDB, rollback - See also: [Backup, check, repair and restore](backup-and-safety.md), [kdb info, check, repair, dump-file](cli-maintenance.md), [The kdb program (exit-codes)](cli-overview.md#exit-codes), [How KDB stores data](data-formats.md), [Versions and upgrades (downgrade)](versions.md#downgrade) The rule: - A **newer** KDB opens the data of an **older** KDB, as it is. Nothing to convert. - An **older** KDB refuses the data of a **newer** KDB with the message `this database needs a newer KDB: it uses `. It does not call the data damaged, it repairs nothing and it changes nothing. How it works: every database keeps a **feature list** in its manifest. A feature is one change to what KDB writes on disk, for example `json` (a JSON column) or `sequences` (`CREATE SEQUENCE`). KDB adds a feature to the list **before** it writes the first data that needs it. When a database opens, KDB reads the list first. A name it does not know means: a newer KDB wrote this. Only schema statements (`CREATE`, `ALTER`, ...), first uses and checkpoints look at the list, so rows cost nothing extra. A database made by a KDB **before** feature lists (before 2026-09-12) has no list. It opens as always. KDB works out its list from the tables, files and log, and saves it at the next checkpoint (or now, with [kdb upgrade](#kdb-upgrade)). ## kdb version Syntax: ```sql kdb version kdb version [--data-dir ] ``` Without ``: this KDB and every feature it can read. With ``: the feature list of that database (read from its manifest, so it also works while a server has the database open). - **Exit code:** `0`. `3` when the database uses a feature this KDB does not know. `1` when the folder is not a database. - A database without a list yet says `feature list: not saved yet`. **Command line: This KDB and the features it reads** ```bash kdb version ``` Output: ```text kdb 0.2.0-dev (crc32c hardware: yes) tls: OpenSSL 3.6.3 9 Jun 2026 Stored-format features this build reads (51): views 0.2.0-dev (2026-09-10) CREATE VIEW: the "views" file partition_format_2 0.2.0-dev (2026-09-11) table partition files in format 2 (one raw block per column) block_stats 0.2.0-dev (2026-09-11) column stats section in partition files (count, min, max, sum per column) runs 0.2.0-dev (2026-09-11) log record 'C': rows of a bulk upsert kept as columns auto_meta 0.2.0-dev (2026-09-11) AUTO id counters in the manifest (auto.) json 0.2.0-dev (2026-09-11) JSON columns (type code 12) bytes 0.2.0-dev (2026-09-11) BYTES columns (type code 13) check 0.2.0-dev (2026-09-11) CHECK constraints (catalog format 2, part 'C') indexes 0.2.0-dev (2026-09-11) CREATE INDEX, UNIQUE and FULLTEXT indexes (catalog part 'I') routines 0.2.0-dev (2026-09-11) functions, procedures and triggers: the "routines" file users 0.2.0-dev (2026-09-11) server users and roles (_system.users) audit 0.2.0-dev (2026-09-12) SET AUDIT ON: catalog part 'A', log record 'P', the _audit_log table table_grants 0.2.0-dev (2026-09-12) GRANT ... ON TABLE (_system.users.table_grants) totp 0.2.0-dev (2026-09-12) two-factor logins (_system.users.totp) trash 0.2.0-dev (2026-09-12) dropped tables kept as _dropped__ for UNDROP TABLE database_settings 0.2.0-dev (2026-09-12) ALTER DATABASE ... SET READ ONLY (_system.database_settings) dialects 0.2.0-dev (2026-09-12) ALTER DATABASE ... SET dialect (_system.database_dialects) pg_catalog_parts 0.2.0-dev (2026-09-12) PostgreSQL column types, multi-column keys, foreign keys, expression and partial indexes (catalog parts 'T', 'K', 'F', 'X') sequences 0.2.0-dev (2026-09-12) CREATE SEQUENCE: the "sequences" file and its log records batched_log_sync 0.2.0-dev (2026-09-11) log segments in the batched format (header flag 1, 16-byte commit records): group commit and --sync-commits batch dedup_change 0.2.0-dev (2026-09-12) ALTER TABLE ... DEDUP ENABLE / DISABLE: the DEDUP KEY of a table that already holds rows plpgsql_triggers 0.2.0-dev (2026-09-12) PostgreSQL plpgsql trigger functions and FOR EACH ROW triggers in the "routines" file cached_views 0.2.0-dev (2026-09-13) CREATE CACHED VIEW: which views are cached, and REFRESH ON COMMIT, in the "views" file deferred_triggers 0.2.0-dev (2026-09-13) CREATE TRIGGER ... DEFERRED: job records in the log, and the "trigger_queue" and "q/" files of queued jobs materialized_views 0.2.0-dev (2026-09-13) CREATE MATERIALIZED VIEW: catalog part 'M', REFRESH MATERIALIZED VIEW log records, mv_dirty. in the manifest table_ttl 0.2.0-dev (2026-09-13) TTL n DAYS on a table: catalog part 'L' read_only_procedures 0.2.0-dev (2026-09-24) CREATE PROCEDURE ... READ ONLY in the "routines" file dedup_insert 0.2.0-dev (2026-09-24) WITH (dedup_insert = 'upsert') on a table: catalog part 'U' decimal128 0.2.0-dev (2026-09-25) NUMERIC(p, s) columns with more than 18 digits: 128-bit DECIMAL (type code 14) in the catalog, partition files and log dedup_generated_key 0.2.0-dev (2026-09-25) a stored generated column in a DEDUP KEY, like the minute of the time (an older build refuses such a catalog) symbol_partitions 0.2.0-dev (2026-09-25) PARTITION BY