How many databases? Sixteen, twenty-six, or forty-two
Three different true answers to the simplest question anyone asks about a database tool, and why the registry behind them records a refusal as carefully as it records a success.
Blog
A dated record of what we discussed, what broke afterwards and what we chose to do about it — kept as written rather than tidied up. It continues into the work in front of us: databases, SQL and NoSQL, LLMs and agents.
Three different true answers to the simplest question anyone asks about a database tool, and why the registry behind them records a refusal as carefully as it records a success.
One tree, one editor and one results grid for relational, document, key-value, analytical, search and federated engines — and the capability flags that stop that promise from breaking on the fourth engine.
A searchable history of statements, outcomes and error detail, readable by admins only, and on this engine it also records what the agent was permitted to run.
MariaDB, Percona, TiDB, Vitess and five more arrive through the same MySQL connection, and protocol compatibility is not capability compatibility.
Host-heuristic SSL turns encryption on without verifying the certificate, and two sslmode values are declined by name rather than guessed at.
The panel names the command to run instead of showing a blank table, and the metrics beside it are omitted rather than reported as zero.
Cache hit ratio, queries per second and buffer-pool usage are omitted rather than defaulted, and two more figures mean less than their names suggest.
A tour of the health surface organised by what is missing and why, because a panel that reads Not measured is the only version an operator can act on.
The editor, the object browser and every CQL type read back identically, and the panels that go quiet do so because one virtual keyspace is not there.
A pasted rediss URL selects encryption without verification, because nothing in a URL says whose certificate to trust; verification stays an explicit choice.
On recent server versions a sequential scan makes an un-indexed keyspace open slowly, so a primary index is a recommendation now rather than a prerequisite.
The empty relation list here means impossible rather than none found, and the relationships a document model leaves for you to know live in the shape and in the pipeline.
Measured against a coordinator with authentication switched off, a basic auth header over plain HTTP still answers 401, so the connection is refused early.
An https URL sets TLS and moves the default port, but only the platform trust store applies, so a custom CA has nowhere to go on this transport.
Two catalog functions other engines have are absent here, so both panels stay empty carrying the engine own error, and table bytes are block-granular.
There is no network protocol, so the form collapses to one input and a remote user of a hosted deployment cannot open a file from their own machine.
What the plan tree answers on MySQL, and where the surrounding introspection runs out: index figures here are estimates of distinct values.
Two EXPLAIN forms with different consequences: the editor emits the executing one, and the agent path emits the planning one only.
Why a database IDE belongs in the network beside the database, and what that constraint forces the architecture to look like.
The keyword is not in the grammar at all, and the only alternative profiles a statement that has already run, which is not a plan and is not offered as one.
Health, performance, slow log and clients all derive from Redis introspection commands, while the table and index panels come back empty because Redis has neither.
Selecting everything nests the document and drops the key, so generated statements project it explicitly, and that alias is why cell editing is switched off.
A statement beginning db. cannot run here at all, and the two operations that look alike have very different default bounds on the result set.
The clause order is transposed for you and a trailing semicolon is a syntax error, while a session setting succeeds and then affects nothing.
Update and delete are not in this SQL anywhere, create is not in the grammar, and the refusals are surfaced word for word instead of rewritten.
A bare update statement answers not implemented on this engine, so no editable cell is offered, and the documented route reports zero rows changed.
A second read-only process is refused with the same lock error as a second writer, which makes two Studio replicas on one file a broken configuration.
The query plan returns step descriptions and nothing else, so the rendering shows structure and answers index questions rather than cost questions.
Real blocked-session detection and real index seek and scan counts are things most engines cannot give, and a restricted login still sees none of them.
Thin mode is the default and needs no native client, and the field people get wrong is the one Oracle actually connects to: a service, not a database name.
Every introspection query binds to the connected database, so a reference that crosses schemas simply does not appear as an edge on the diagram.
The schema tree renders before relationships arrive, and every introspection CTE is materialized on purpose: a 122-table read measured about 295 seconds before the change and about 2.6 seconds after.
A double-quoted identifier is a string literal here, so a filter on one compares two literals and answers nothing with a perfectly successful response.
There are no writes in this grammar at all, no second page, and a trailing semicolon is a syntax error, so the list of edges is the useful part.
Table, index and storage statistics send no statement at all and carry the measurement behind the refusal, because no honest count or size exists to publish.
Two panels refuse with their reason, one stays empty in the engine's own words, a third reads not measured, and each of those is a different claim about the database.
Prefix groups come from a bounded cursor scan, so several per-row actions are hidden rather than offered against something no command can address.
This dialect has no analyze form, so the direct action and the background pre-warm show the same estimate, and a negative cost renders as no estimate.
There is no catalog to read, so the sidebar samples each collection and states its own reach - three levels deep, arrays closed, two hundred fields.
The catalog views a connector could declare a key through do not exist here, so the empty edge set is the engine answer rather than an empty schema.
Rows come from the task table and every column is relabelled to say so, because there is no session catalog and no query log anywhere to read.
An empty edge list here is the engine answer, not an unfinished read: no engine, no table setting and no DDL declares a foreign key anywhere.
File-reaching SQL works on the writable editor connection and is refused under the read-only agent handle, so the capability has to be stated with that split.
The credential is an auth token rather than a password and the database is the host, so the dialog renders no user name and no database input at all.
Path validation rejects a null byte and nothing else, so any logged-in user can open any SQLite file the Studio process is able to read.
Wide integers and high-scale decimals arrive as JavaScript numbers, only the first result set of a batch is read, and one paged statement is not recognised.
A wide NUMBER arrives as a double and drops digits, and a timestamp with a zone folds its offset into UTC, so both are recorded rather than smoothed over.
Supplying a connection string takes a different branch entirely, so the SSL panel, the timezone and cloud detection stop applying and must live in the URI.
Automatic LIMIT injection applies to unbounded SELECT and CTE-SELECT statements only, and there is one statement shape it deliberately leaves alone.
A default distribution serves HTTPS with a self-signed certificate on the same port, and no custom CA can be supplied on this transport.
An index that maps container fields answers a select-everything statement with no columns at all, so the schema tree is built from the mapping instead.
The driver refuses to build a load-balancing policy without a local data centre, which is why that field sits in the open rather than under Advanced.
The whole grammar is get, put, delete, prefix and range, and yet the tree still shows declared columns for the namespaces that have them.
There is no separate connection type and no per-server branch, so the version panel shows the compatibility level a server publishes, not its product release.
Without the query system catalog role, slow queries and sessions are empty and denied metrics are omitted rather than reported as zero.
authSource names the database the credentials live in, not the one you are opening, and getting it wrong fails exactly like a bad password.
Nodes, sessions, slow queries and per-catalog connectors all report, while database size is N/A rather than zero, because there is no storage to measure.
Both ports serve the identical SQL endpoint and nothing in the connection knows which it reached, and there is no database field because there is one catalog.
Every ClickHouse monitoring panel is a read of a catalog the server already maintains, with two boundaries: a setting that empties one panel, and a counter nobody publishes.
The timing form of EXPLAIN executes the statement it was asked to explain, so it is never emitted and no measured node timings are published.
A server started without authentication takes no token at all, and sending an empty one is rejected rather than treated as an anonymous connection.
The provider holds no session across two requests, so the begin, commit and rollback controls are withheld rather than offered and then failed.
The showplan setting is session-level state and the explain path sends one statement, so the capability is declared false and the action is hidden.
Oracle has EXPLAIN PLAN and DBMS_XPLAN; what is missing is a two-statement wrapper, so the capability is declared false and the action is hidden.
Port 3306 with the fixture credentials, the container-network case, and the pool settings that are quietly ignored because the driver model differs.
The container-to-container case is the one that breaks: when Studio is itself a container, localhost is its own loopback and the service name is the fix.
A failed cluster read produces no storage row at all rather than one claiming zero bytes, and a partial sum is refused for exactly the same reason.
Nested elements are stored as documents of their own, so the panel and the editor legitimately disagree, and one panel asks the cluster nothing at all.
A second page is refused with its reason rather than silently re-serving the first, and there is no cancel path at all on this engine to fall back on.
There is no host, no port and no server, and the lock sidecar means command-line tooling cannot hold the same file while a connection is open.
Because the rows are groupings from a bounded scan, the plan rules carry a sentence saying so, what a command may name instead, and how far the list reaches.
A managed endpoint carries neither a port nor a bucket path, so the scheme supplies the port and the TLS mode while the bucket is typed by hand and nothing is invented for it.
An SRV URI implies TLS in the driver and maps the form to a verifying mode, but two of the five SSL choices build the same options object.
Only the planning form is ever emitted, because the analyze form executes the statement and a plan view reaching object storage twice is a real invoice.
The plan returns the native query the cluster will run, rendered in its own operator vocabulary, and the planner publishes no cost and no row estimate.
Port 8123 is the whole transport, the native port is never used, and a permission denial arrives as a 500, so failures are read by exception code.
Foreign keys come from a single bulk read of the constraint catalog, and every catalog statement the DuckDB provider issues is scoped to the current database.
The server refuses the pragma a database-native read-only profile depends on, so the boundary moves from the session to the token the database issues.
Health is an integrity check, a journal mode and file sizes, and one per-table figure depends on which built-in driver the deployment is running.
Encryption is on out of the box while certificate validation is off for any host that is not the recognised managed one, and two named modes do not pin a CA.
A least-privilege application user gets a dashboard that renders with gaps, because each dynamic-view read is guarded on its own rather than as one block.
No server-side statement timeout is wired into the pool, so nothing kills a long query on its own and cancellation is an explicit act with a caveat.
Containment is the database itself - a read-only transaction, exactly one statement on the extended protocol, then ROLLBACK and DISCARD ALL.
A plan run once answered with a native aggregation body, correct for the cluster and unrunnable in the editor, so the contract now names the dialect outright.
An index has no namespace above it, so a database selector would be a control with no effect, and a self-signed cluster certificate has nowhere to go here.
The catalog reports no position for regular columns and sorts by name, so the tree rebuilds the order a where clause actually needs.
The grounding read is bounded by the provider itself, and the plan rules say outright that the rows are groupings derived from one scan.
A Redis ACL user without the INFO grant connects and browses keys, while health, overview and performance raise a permission error and the connection test reports degraded.
Only the management port is stored, and the query endpoint comes from the cluster's own node services, preferring the external address it advertises.
The read-only guard and the identifier reader are SQL readers, so on a MongoDB draft they record that they do not apply instead of passing it.
Pinning a catalog scopes the whole tree two levels deep, and a connection that pins none still connects and runs fully qualified statements with no tree.
Marking segments unused removes a datasource from the catalog entirely, and a stopped node makes an existing one answer with the same error as a typo.
The estimated plan is the only plan there is, because this engine never executes the statement to produce one, so nothing in the view was measured.
Under read-only access alone, file copies, exports, extension installs and filesystem reads all succeeded while an insert was refused in the same session.
Active connections are absent rather than zero and no connection ceiling is published, while table and index bytes are real because the storage view answers.
A read-only open reads the query-only pragma back as off, so the profile sets it too and re-verifies it before every statement it sends.
The one managed host the code recognises by name switches certificate validation on, and the same move narrows the monitoring and maintenance surface.
Five bulk dictionary reads build the tree regardless of table count, and every one of them is filtered by owner, so other schemas are simply not drawn.
The tool-using run ends engine-unsupported here, so the useful post is what plan mode does instead: read the real schema and hand a statement to a person.
Agent AUTO mode refuses a superuser connection outright, so the deployment task is a login holding CONNECT, USAGE and SELECT and nothing else.
We use cookies to analyse site traffic and improve your experience. See our Privacy Policy for details.