View data page (browse and edit rows)
Look at the rows of a table in the console and change them with forms - add, edit and delete - without writing SQL.
- Category: Web console
- Keywords: data page, View data, browse, browser, table browser, edit row, change row, add row, insert row, delete row, new table, phpMyAdmin, WHERE filter, paging, per page, sort column, primary key, read-only, time-series, no primary key, Open in SQL
- See also: Web console, Settings page (data folder, old log, capacity, program files and users), Monitor panel (memory, processor, caches), INSERT, UPDATE and DELETE, Constraints, CREATE TABLE, Table rights - GRANT ON TABLE
The View data page of the web console (Home menu) shows the tables of the chosen database and the rows inside them. You can add, change and delete rows with a form instead of writing INSERT, UPDATE and DELETE by hand.
Everything it does goes through /exec, so a user may only do what their role allows: a read user sees the rows and no buttons, a write user may change them, and an admin may also make tables.
The screen
+--------------------+------------------------------------------------------------------------+
| TABLES | trades timeseries - by DAY [Add row] [Open in SQL] [Refresh] |
| [Find a table ] | WHERE [ qty > 10 ] [Apply] [Filter columns...] |
| trades 69.3M | | date | symbol | broker | qty | rate | |
| items 5 | | [(all) v] | [CITY v] | [(all) v]| LONG | DOUBLE | |
| | | 2026-09-11 | CITY | 58 | 100 | 512.40 | |
| | | 2026-09-11 | CITY | 12 | 50 | 512.00 | |
| [New table] | Rows 1-50 of 4,112 < 1 2 3 ... 83 > Last Per page [50 v] |
+--------------------+------------------------------------------------------------------------+
| Part | What it is |
|---|---|
| Left list | every table of the database, with its row count. Type in the box to find one. |
| New table | a small form for CREATE TABLE; it shows the statement it will run before it runs it (admins only) |
| WHERE box | an extra condition, exactly as you would write it in SQL. Press Enter or Apply. |
| Filter columns... | tick the columns that get a list of their values in the heading (symbol, date, broker ...). Pick a value from a list to see only its rows; several lists combine. The list holds each different value once, newest first for a time column, at most 500. |
| Column heads | click one to sort the whole table by it (not only the page); click again for the other direction. A time-series table opens newest first. |
| Edit / Delete | change or remove that one row |
| Add row | a form with one box per column |
| Open in SQL | puts the SELECT this page is showing into the Home page (SQL editor), to change it by hand |
| Pager | page numbers, < > and Last; 25 to 500 rows a page; how many rows the filters found |
The page remembers the table you were looking at, the rows-per-page and each table's filter columns, so coming back opens where you left off. A value list is one SELECT DISTINCT per column, read once per table (and again on Refresh): on a table of many million rows it takes a moment, and the rows show first.
Which tables can be edited
To change or delete one row, KDB has to be able to name that row on its own. That is what a PRIMARY KEY is for.
| Table | Browse | Add a row | Edit or delete one row |
|---|---|---|---|
relational, with PRIMARY KEY | yes | yes | yes |
| relational, without a key | yes | yes | no |
time-series (TIMESERIES(...)) | yes | yes | no |
A time-series table has a DEDUP KEY, not a primary key, and the same key may appear more than once. A form that edited "the row" could quietly change several, so the page does not offer it and says why instead. Use the SQL editor on Home with a WHERE you have checked, and run the matching SELECT first to see what it will hit.
- The primary key column itself cannot be changed in the edit form: it is the name the row is found by. Delete the row and add a new one to change a key.
- A
PRIMARY KEY AUTOcolumn is left out of the add form; the server hands the value out. - Computed columns are left out too: the engine works them out.
What it sends
Nothing is hidden. Each button sends one ordinary statement:
| Button | Statement |
|---|---|
| Add row | INSERT INTO items (name, qty) VALUES ('bolt', 12) |
| Save (edit) | UPDATE items SET qty = 137 WHERE id = 2 |
| Delete | DELETE FROM items WHERE id = 2 |
| New table | the CREATE TABLE shown in the form |
- Only the boxes you actually changed go into the
SETlist. - An empty box means
NULL. - Text is quoted and
'inside it is doubled. A number box that does not hold a number is refused before anything is sent, with a message that says which column. - Anything the server refuses (a
NOT NULLcolumn left empty, aCHECKthat fails, a missingREFERENCESrow, a role that is too weak) is shown as it came back, so the reason is the server's own.
Example: A table the View data page can fully edit
CREATE TABLE items (
id INT PRIMARY KEY AUTO,
name STRING NOT NULL,
qty INT,
price DOUBLE
);
INSERT INTO items (name, qty, price) VALUES ('bolt', 12, 0.45), ('nut', 40, 0.12);
SELECT * FROM items;
Result:
CREATE TABLE items (
table 'items' created
INSERT INTO items (name, qty, price) VALUES ('bolt', 12, 0.45), ('nut', 40, 0.12)
2 row(s) inserted
SELECT * FROM items
| id (INT) | name (STRING) | qty (INT) | price (DOUBLE) |
|---|---|---|---|
| 1 | bolt | 12 | 0.45 |
| 2 | nut | 40 | 0.12 |
(2 rows)
Notes
- The row count under the pager is a real
SELECT count(*)with the same filter, so it is the true number, not an estimate. - Big values are cut off in the grid; the full text is in the cell's tooltip. For the whole value use the SQL editor on Home.
- The page reads at most one page of rows at a time, so opening a table with millions of rows costs the same as opening a small one.
- Rights per table (table rights) apply here as everywhere else: a table you may not read is not listed.