From 277ebff925c691538c59e6b3bdc6a20224cdf401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Nam=20Long?= <26674308+J2TeamNNL@users.noreply.github.com> Date: Sun, 1 Nov 2026 10:02:44 +0700 Subject: [PATCH 1/3] docs(databases): add the InfluxDB page --- databases/index.mdx | 5 +- databases/influxdb.mdx | 107 +++++++++++++++++++++++++++++++++++++ docs.json | 1 + index.mdx | 2 +- snippets/driver-counts.mdx | 4 +- 5 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 databases/influxdb.mdx diff --git a/databases/index.mdx b/databases/index.mdx index 6916e3f..1a096f2 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. @@ -31,6 +31,7 @@ driver comes from, not what the license covers. | [etcd](/databases/etcd) | 2379 | Plugin | | [Firebase Realtime Database](/databases/firebase) | API-based | Plugin | | [Firestore](/databases/firebase) | API-based | Plugin | +| [InfluxDB](/databases/influxdb) | 8086 | Plugin | | [KingbaseES](/databases/kingbasees) | 54321 | Plugin | | [libSQL](/databases/libsql) | API-based | Plugin | | [Kafka](/databases/kafka) | 9092 | Plugin | diff --git a/databases/influxdb.mdx b/databases/influxdb.mdx new file mode 100644 index 0000000..0defb79 --- /dev/null +++ b/databases/influxdb.mdx @@ -0,0 +1,107 @@ +--- +title: InfluxDB +description: Connect to InfluxDB 2 or 3, browse measurements, and run SQL, InfluxQL or Flux +--- + +import RegistryPlugin from "/snippets/registry-plugin.mdx"; + +Databases (buckets on 2.x) are the containers, measurements are tables, and each point is a row with `time` first. The editor runs the languages the server accepts: SQL and InfluxQL on 3.x, Flux and InfluxQL on 2.x. + + + +## Quick setup + +Click **New Connection…**, select **InfluxDB**, enter host, port and token, then click **Save & Connect**. + +For a server on a private network, open the **Network** tab and set **Connect via** to **SSH Tunnel**, then set **Host** to the address InfluxDB listens on as the SSH server sees it, usually `localhost`. See [SSH Tunneling](/connections/ssh-tunneling). + +## Connection settings + +| Field | Description | +|-------|-------------| +| **Host** | Server hostname. `localhost` for Docker | +| **Port** | `8086` by default, the 2.x port. InfluxDB 3 Core and Enterprise listen on `8181` | +| **Token** | An API token. Leave it empty for a 3.x server started with `--without-auth` | +| **Database** | The database (3.x) or bucket (2.x) the sidebar opens. Switch it later from the database list | +| **Organization** | 2.x only. Optional when the token sees one organization | +| **Skip TLS Verification** | Options tab. Trusts any certificate, even under **Verify CA** or **Verify Identity** | + +TablePro reads the server version from `/ping` when it connects, and picks the API from it: `/api/v3` on 3.x, `/api/v2` and the v1 `/query` endpoint on 2.x. The token is then checked by listing databases or buckets, so a wrong token fails the connection instead of the first query. + +## Browsing measurements + +The sidebar lists databases or buckets, and the measurements in the one that is open. `_internal`, `_monitoring` and `_tasks` show as system databases. + +Columns come back with `time` first and the rest by name. Each has a type: `timestamp` for `time`, `tag` for a tag, and the field type (`float`, `integer`, `unsigned`, `string`, `boolean`) for a field. + +A page opens newest first. Timestamps show as RFC 3339 text in UTC, such as `2024-10-27T03:34:20Z`, not as nanosecond integers. + +On 3.x the grid runs SQL and sorts by any column. On 2.x it runs InfluxQL, which sorts by `time` only, so a sort on another column keeps the time order. + +## Filtering + +| Operators | 3.x SQL | 2.x InfluxQL | +|----------|---------|--------------| +| equals, not equals, greater than, less than and the rest | `=`, `!=`, `>`, `<` | Same | +| contains, not contains, starts with, ends with, REGEX | `~` and `!~` with an escaped pattern | `=~` and `!~` with a `/regex/` | +| in list, not in list | `=` joined by `OR`, `!=` joined by `AND` | Same | +| between | Two inclusive bounds | Same | +| is NULL, is not NULL | `IS NULL`, `IS NOT NULL` | An empty tag, `= ''`. Fields have no null test | + +A filter on `time` takes an RFC 3339 timestamp. A tag value is always text, so `host = 1` matches the tag `"1"`. + +## Query editor + +Type a statement and run it. The language is chosen from the text: + +| Server | What runs | +|--------|-----------| +| 3.x | SQL. A `SHOW MEASUREMENTS`, `SHOW TAG KEYS` or `SHOW FIELD KEYS`, a `GROUP BY time(...)` or a duration such as `now() - 1h` runs as InfluxQL | +| 2.x | InfluxQL. A script with a `\|>` pipe, or one starting with `from(`, `import` or `buckets(`, runs as Flux | + +To choose the language yourself, start the first line with a comment naming it: `-- influxql`, `-- sql` or `// flux`. A language the server does not accept reports which ones it does. + +```sql +SELECT date_bin(INTERVAL '5 minutes', time) AS bucket, avg(usage) +FROM cpu +WHERE time >= now() - INTERVAL '1 hour' +GROUP BY bucket +ORDER BY bucket +``` + +A Flux result arrives as one table per series. The grid shows them as one, with the columns of every table, so a `pivot()` reads as one row per timestamp. + +## Safe Mode and read-only connections + +A Flux script reads unless it calls `to()` or `wideTo()`, which write points. One that uses the `http`, `sql` or a notification package counts as reaching outside the database. SQL and InfluxQL are read like any SQL: `SELECT ... INTO` writes, `DROP MEASUREMENT` destroys data. + +## SSL/TLS + +New connections start on **Disabled**, plain HTTP. Every other mode goes over HTTPS. **Preferred** and **Required (skip verify)** accept a self-signed certificate. See [SSL/TLS](/connections/ssl). + +## Limitations + +- The grid is read-only. Points are written with line protocol, which TablePro does not send. +- InfluxDB 1.x is not supported. +- On 3.x an empty string field and a missing field both show as NULL: the CSV format the driver reads writes them the same way. +- There are no views, routines, foreign keys or schema edits. +- The plugin is registry-only. It is not on iPhone or iPad. + +## Troubleshooting + +### InfluxDB refused the token + +The token is wrong, expired, or has no read access to the database or bucket. On 3.x with auth on, even `/ping` needs the token. + +### InfluxDB 2 needs an organization + +The token sees more than one organization. Set **Organization** to the one that owns the bucket. + +### Flux is not available on this server + +The server is 3.x, which has no Flux. Write the query in SQL or InfluxQL. + +## Related + +- [Import & Export](/features/import-export) +- [Filtering](/features/filtering) diff --git a/docs.json b/docs.json index 7d896d6..bcb44d3 100644 --- a/docs.json +++ b/docs.json @@ -254,6 +254,7 @@ "databases/firebase", "databases/bigquery", "databases/bigtable", + "databases/influxdb", "databases/kafka", "databases/kingbasees", "databases/libsql", 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). From 73e559107871374b41316a7dbbe62871aee2d346 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sun, 1 Nov 2026 22:08:39 +0700 Subject: [PATCH 2/3] docs(databases): describe the reworked InfluxDB driver --- databases/index.mdx | 4 ++-- databases/influxdb.mdx | 12 +++++++----- index.mdx | 2 +- snippets/driver-counts.mdx | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/databases/index.mdx b/databases/index.mdx index 4087e2b..ba17ca4 100644 --- a/databases/index.mdx +++ b/databases/index.mdx @@ -1,11 +1,11 @@ --- title: Supported Databases -description: All 43 engines TablePro connects to, their default ports, and which ones need a plugin +description: All 44 engines TablePro connects to, their default ports, and which ones need a plugin --- import DriverCounts from "/snippets/driver-counts.mdx"; -Forty-three engines, and every one of them is free to use. What differs between them is where the +Forty-four 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. diff --git a/databases/influxdb.mdx b/databases/influxdb.mdx index 0defb79..34b6d00 100644 --- a/databases/influxdb.mdx +++ b/databases/influxdb.mdx @@ -26,7 +26,7 @@ For a server on a private network, open the **Network** tab and set **Connect vi | **Organization** | 2.x only. Optional when the token sees one organization | | **Skip TLS Verification** | Options tab. Trusts any certificate, even under **Verify CA** or **Verify Identity** | -TablePro reads the server version from `/ping` when it connects, and picks the API from it: `/api/v3` on 3.x, `/api/v2` and the v1 `/query` endpoint on 2.x. The token is then checked by listing databases or buckets, so a wrong token fails the connection instead of the first query. +TablePro reads the server version from `/ping` when it connects, and picks the API from it: `/api/v3` on 3.x, `/api/v2` and the v1 `/query` endpoint on 2.x. A wrong token fails the connection instead of the first query: 3.x checks it on `/ping`, and on 2.x TablePro lists one bucket with it. A 1.x server is refused at connect. ## Browsing measurements @@ -44,12 +44,14 @@ On 3.x the grid runs SQL and sorts by any column. On 2.x it runs InfluxQL, which |----------|---------|--------------| | equals, not equals, greater than, less than and the rest | `=`, `!=`, `>`, `<` | Same | | contains, not contains, starts with, ends with, REGEX | `~` and `!~` with an escaped pattern | `=~` and `!~` with a `/regex/` | -| in list, not in list | `=` joined by `OR`, `!=` joined by `AND` | Same | +| in list, not in list | `IN`, `NOT IN` | `=` joined by `OR`, `!=` joined by `AND` | | between | Two inclusive bounds | Same | -| is NULL, is not NULL | `IS NULL`, `IS NOT NULL` | An empty tag, `= ''`. Fields have no null test | +| is NULL, is not NULL | `IS NULL`, `IS NOT NULL` | `= ''` and `!= ''` on a tag. InfluxQL has no null test for a field | A filter on `time` takes an RFC 3339 timestamp. A tag value is always text, so `host = 1` matches the tag `"1"`. +A filter the language cannot run on that column, such as a null test on a 2.x field or a regex on a number, shows an error instead of an empty grid. + ## Query editor Type a statement and run it. The language is chosen from the text: @@ -59,7 +61,7 @@ Type a statement and run it. The language is chosen from the text: | 3.x | SQL. A `SHOW MEASUREMENTS`, `SHOW TAG KEYS` or `SHOW FIELD KEYS`, a `GROUP BY time(...)` or a duration such as `now() - 1h` runs as InfluxQL | | 2.x | InfluxQL. A script with a `\|>` pipe, or one starting with `from(`, `import` or `buckets(`, runs as Flux | -To choose the language yourself, start the first line with a comment naming it: `-- influxql`, `-- sql` or `// flux`. A language the server does not accept reports which ones it does. +To choose the language yourself, make the first line a comment naming it, such as `-- influxql`, `-- sql` or `// flux`. Either comment style works for any language, and TablePro removes the line before sending the statement. A language the server does not accept reports which ones it does. ```sql SELECT date_bin(INTERVAL '5 minutes', time) AS bucket, avg(usage) @@ -73,7 +75,7 @@ A Flux result arrives as one table per series. The grid shows them as one, with ## Safe Mode and read-only connections -A Flux script reads unless it calls `to()` or `wideTo()`, which write points. One that uses the `http`, `sql` or a notification package counts as reaching outside the database. SQL and InfluxQL are read like any SQL: `SELECT ... INTO` writes, `DROP MEASUREMENT` destroys data. +A Flux script reads when every package it imports only reads, such as `strings`, `date`, `array`, `csv` or `influxdata/influxdb/schema`, and it never names `to()` or `wideTo()`. Any other package, such as `http`, `sql`, `experimental/influxdb` or a notification package, counts as a write that reaches outside the database. A `host:` argument, which reads another server, and a `file:` argument, which reads the server's disk, count as reaching outside without writing. SQL and InfluxQL are read like any SQL: `SELECT ... INTO` writes, `DROP MEASUREMENT` destroys data. ## SSL/TLS diff --git a/index.mdx b/index.mdx index 7079bb9..edeb2d1 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 38 more +description: Native macOS database client for MySQL, PostgreSQL, SQLite, MongoDB, Redis, and 39 more --- import DriverCounts from "/snippets/driver-counts.mdx"; diff --git a/snippets/driver-counts.mdx b/snippets/driver-counts.mdx index 2f0288b..c8f8155 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-seven registry plugins cover the -other thirty-one and install on the first connection that needs one. See +Five drivers ship inside the app and cover twelve databases. Twenty-eight registry plugins cover the +other thirty-two and install on the first connection that needs one. See [Plugins](/features/plugins). From 30552a09663c1ef6708645273797ca75534b08bd Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Sun, 1 Nov 2026 22:58:20 +0700 Subject: [PATCH 3/3] docs(databases): note the InfluxQL and Flux refusals --- databases/influxdb.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/databases/influxdb.mdx b/databases/influxdb.mdx index 34b6d00..2171d8a 100644 --- a/databases/influxdb.mdx +++ b/databases/influxdb.mdx @@ -63,6 +63,8 @@ Type a statement and run it. The language is chosen from the text: To choose the language yourself, make the first line a comment naming it, such as `-- influxql`, `-- sql` or `// flux`. Either comment style works for any language, and TablePro removes the line before sending the statement. A language the server does not accept reports which ones it does. +Run InfluxQL one statement at a time. 2.x runs every statement it receives, so an InfluxQL statement with a `;` anywhere but at its end is refused, even inside a value or a comment. + ```sql SELECT date_bin(INTERVAL '5 minutes', time) AS bucket, avg(usage) FROM cpu @@ -75,7 +77,7 @@ A Flux result arrives as one table per series. The grid shows them as one, with ## Safe Mode and read-only connections -A Flux script reads when every package it imports only reads, such as `strings`, `date`, `array`, `csv` or `influxdata/influxdb/schema`, and it never names `to()` or `wideTo()`. Any other package, such as `http`, `sql`, `experimental/influxdb` or a notification package, counts as a write that reaches outside the database. A `host:` argument, which reads another server, and a `file:` argument, which reads the server's disk, count as reaching outside without writing. SQL and InfluxQL are read like any SQL: `SELECT ... INTO` writes, `DROP MEASUREMENT` destroys data. +A Flux script reads when every package it imports only reads, such as `strings`, `date`, `array`, `csv` or `influxdata/influxdb/schema`, and it never names `to()` or `wideTo()`. Any other package, such as `http`, `sql`, `experimental/influxdb` or a notification package, counts as a write that reaches outside the database. A `host:` argument, which reads another server, and a `file:` argument, which reads the server's disk, count as reaching outside without writing. Before running a Flux script, TablePro has the 2.x server parse it and refuses one the server reads as writing or reaching outside where TablePro's own check did not. SQL and InfluxQL are read like any SQL: `SELECT ... INTO` writes, `DROP MEASUREMENT` destroys data. ## SSL/TLS