diff --git a/connections/connection-form.mdx b/connections/connection-form.mdx index 686c1c4..6ddcaf9 100644 --- a/connections/connection-form.mdx +++ b/connections/connection-form.mdx @@ -179,6 +179,7 @@ Metadata connections are the extra ones opened to read a database's object list | [TiDB](/databases/tidb) | 4000 | Yes | Yes | Yes | No | Yes | Yes | | [Databend](/databases/databend) | 3307 | Yes | Yes | Yes | No | Yes | Yes | | [OceanBase](/databases/oceanbase) | 2881 | Yes | Yes | Yes | No | Yes | Yes | +| [StarRocks](/databases/starrocks) | 9030 | Yes | Yes | Yes | No | Yes | Yes | | [PostgreSQL](/databases/postgresql) | 5432 | Yes | Yes | Yes | Yes | Yes | Yes | | [Amazon Redshift](/databases/redshift) | 5439 | Yes | Yes | Yes | No | Yes | Yes | | [CockroachDB](/databases/cockroachdb) | 26257 | Yes | Yes | Yes | No | Yes | Yes | diff --git a/customization/general-settings.mdx b/customization/general-settings.mdx index a8f4101..15b2ae4 100644 --- a/customization/general-settings.mdx +++ b/customization/general-settings.mdx @@ -48,7 +48,7 @@ How many seconds a query runs before it is cancelled. The default is 60; the pic A connection can override this value under **Options > Query timeout**. Leave that field empty to inherit this setting, or enter `0` for no limit. The same section has a separate connect timeout for tunnels, proxies and database sign-in; it does not change how long a query can run. -Where the engine can enforce it, the timeout becomes a server-side setting: `statement_timeout` on PostgreSQL, `max_execution_time` on MySQL and ClickHouse, `max_statement_time` on MariaDB, `ob_query_timeout` on OceanBase. On SQLite it bounds how long a statement waits for a locked database instead. Drivers that talk HTTP (BigQuery, Bigtable, Spanner, Cloudflare D1, LibSQL, Etcd, DynamoDB, Elasticsearch, Typesense, and ClickHouse) bound the request at the timeout plus 30 seconds, and Oracle enforces it in the client: the connection is closed to unblock the call, and the next query reconnects and restores your current schema. SAP HANA ends the statement with the same `ALTER SYSTEM CANCEL SESSION` that **Stop** sends. +Where the engine can enforce it, the timeout becomes a server-side setting: `statement_timeout` on PostgreSQL, `max_execution_time` on MySQL and ClickHouse, `max_statement_time` on MariaDB, `ob_query_timeout` on OceanBase, `query_timeout` on StarRocks. On SQLite it bounds how long a statement waits for a locked database instead. Drivers that talk HTTP (BigQuery, Bigtable, Spanner, Cloudflare D1, LibSQL, Etcd, DynamoDB, Elasticsearch, Typesense, and ClickHouse) bound the request at the timeout plus 30 seconds, and Oracle enforces it in the client: the connection is closed to unblock the call, and the next query reconnects and restores your current schema. SAP HANA ends the statement with the same `ALTER SYSTEM CANCEL SESSION` that **Stop** sends. Older servers have neither: MySQL before 5.7.8, MariaDB before 10.1.1. A statement that passes the timeout there is stopped with `KILL QUERY` from a second connection, which reaches a `SELECT` on MySQL and any statement at all on MariaDB. A server behind a proxy that reports a version it does not have still gets the right one of the two. diff --git a/databases/index.mdx b/databases/index.mdx index 6916e3f..d6cab74 100644 --- a/databases/index.mdx +++ b/databases/index.mdx @@ -1,11 +1,11 @@ --- title: Supported Databases -description: All 42 engines TablePro connects to, their default ports, and which ones need a plugin +description: All 43 engines TablePro connects to, their default ports, and which ones need a plugin --- import DriverCounts from "/snippets/driver-counts.mdx"; -Forty-two engines, and every one of them is free to use. What differs between them is where the +Forty-three engines, and every one of them is free to use. What differs between them is where the driver comes from, not what the license covers. @@ -48,6 +48,7 @@ driver comes from, not what the license covers. | [ScyllaDB](/databases/cassandra) | 9042 | Plugin | | [Snowflake](/databases/snowflake) | 443 | Plugin | | [Spanner](/databases/spanner) | API-based | Plugin | +| [StarRocks](/databases/starrocks) | 9030 | Plugin | | [SQLite](/databases/sqlite) | File-based | Built-in | | [SurrealDB](/databases/surrealdb) | 8000 | Plugin | | [Teradata](/databases/teradata) | 1025 | Plugin | diff --git a/databases/starrocks.mdx b/databases/starrocks.mdx new file mode 100644 index 0000000..b2b5a71 --- /dev/null +++ b/databases/starrocks.mdx @@ -0,0 +1,72 @@ +--- +title: StarRocks +description: Connect to StarRocks on its MySQL port and browse default_catalog and external catalogs such as Iceberg and Hive +--- + +Point the connection at a frontend's MySQL port, 9030, not the 8030 HTTP port. The StarRocks driver is a plugin that installs the first time you pick StarRocks, and is built from the MySQL driver. It confirms the server is StarRocks with `SELECT current_version()`; a MySQL server saved under this type fails at connect and asks for the type to be changed. No minimum StarRocks version is enforced. + +## Quick setup + +A single-node cluster in Docker: + +```bash +docker run -d -p 9030:9030 -p 8030:8030 -p 8040:8040 starrocks/allin1-ubuntu +``` + +Connect as `root` with an empty password once the frontend reports ready, about a minute after start. + +## Connection settings + +| Field | Default | Notes | +|-------|---------|-------| +| **Port** | `9030` | The frontend's MySQL port | +| **Database** | empty | Optional. `catalog.database`, `catalog.` for a catalog alone, or a database of `default_catalog` | +| **SSL Mode** | Preferred | TLS first, plain text if the server refuses | + +Host, user, password and SSH tunnels work as on [MySQL](/databases/mysql). + +## Connection URL + +```text +starrocks://root:password@fe.example.com:9030/glue_iceberg.sales +``` + +The path is the Database field, so it takes `catalog.database` too. **Copy Connection String** gives the same form. + +## Catalogs and databases + +Catalogs fill the database level and each catalog's databases fill the schema level, so the sidebar shows `default_catalog` and every external catalog, with their databases beneath. `Cmd+K` switches catalog, and the database picker switches database within it. + +The Database field takes the same two levels. Write `glue_iceberg.sales` to open on database `sales` in catalog `glue_iceberg`, or `glue_iceberg.` to open the catalog with no database selected. A name with no dot is a database of `default_catalog`, as in other StarRocks clients. Leave the field empty to start in `default_catalog`. + +Materialized views in `default_catalog` list apart from views, and open on their `CREATE MATERIALIZED VIEW`. The sidebar hides `_statistics_`, `information_schema` and `sys`. + +## Editing rows + +What a save can do depends on the table's key model. Edits save one statement at a time with no transaction. + +| Key model | Row matched on | Edit a cell | Delete a row | +|---|---|---|---| +| Primary key | Key columns | Yes | Yes | +| Unique key, aggregate key | Key columns | No, the server refuses `UPDATE` | Yes | +| Duplicate key | Every column | No, the server refuses `UPDATE` | Yes | +| External catalog table | Every column | Up to the connector | Up to the connector | + +A match on every column leaves out ARRAY, MAP, STRUCT, JSON, BITMAP, HLL, PERCENTILE, BINARY and VARBINARY columns, and compares FLOAT columns as text. A delete from a duplicate key table reports 0 rows even when it removes some, so a delete matched on every column is not checked against the row count. To change a row the server refuses to update, delete it and insert it again in the SQL editor. + +JSON and VARIANT columns read as text in the grid and the inspector. + +## Limitations + +- No indexes, foreign keys, triggers, routines, events or partitions. The Structure tab shows columns, with key columns marked, and does not edit them. +- No Create Database, Drop Database, renames or import. Create catalogs and databases in the SQL editor. +- The table info panel shows row counts and sizes for `default_catalog` tables only. An external catalog's tables show none. +- `EXPLAIN ANALYZE` is not in the plan menu. Run it in the SQL editor; its report carries terminal color codes. +- No Users & Roles, Server Dashboard or Table Maintenance. +- Not available on iPhone and iPad. + +## Related + +- [MySQL](/databases/mysql), for connection fields, SSL/TLS, and troubleshooting +- [Trino](/databases/trino), which browses catalogs the same way +- [SSH Tunneling](/connections/ssh-tunneling) diff --git a/docs.json b/docs.json index 7d896d6..a94b67d 100644 --- a/docs.json +++ b/docs.json @@ -269,6 +269,7 @@ "databases/sap-hana", "databases/snowflake", "databases/spanner", + "databases/starrocks", "databases/sqlite", "databases/surrealdb", "databases/teradata", diff --git a/index.mdx b/index.mdx index c64e11f..7079bb9 100644 --- a/index.mdx +++ b/index.mdx @@ -1,6 +1,6 @@ --- title: Introduction -description: Native macOS database client for MySQL, PostgreSQL, SQLite, MongoDB, Redis, and 37 more +description: Native macOS database client for MySQL, PostgreSQL, SQLite, MongoDB, Redis, and 38 more --- import DriverCounts from "/snippets/driver-counts.mdx"; diff --git a/snippets/driver-counts.mdx b/snippets/driver-counts.mdx index 44a8722..2f0288b 100644 --- a/snippets/driver-counts.mdx +++ b/snippets/driver-counts.mdx @@ -1,3 +1,3 @@ -Five drivers ship inside the app and cover twelve databases. Twenty-six registry plugins cover the -other thirty and install on the first connection that needs one. See +Five drivers ship inside the app and cover twelve databases. Twenty-seven registry plugins cover the +other thirty-one and install on the first connection that needs one. See [Plugins](/features/plugins).