diff --git a/databases/index.mdx b/databases/index.mdx index 6916e3f..1ea25f2 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. @@ -38,6 +38,7 @@ driver comes from, not what the license covers. | [Microsoft SQL Server](/databases/mssql) | 1433 | Plugin | | [MongoDB](/databases/mongodb) | 27017 | Plugin | | [MySQL](/databases/mysql) | 3306 | Built-in | +| [Neo4j](/databases/neo4j) | 7687 | Plugin | | [OceanBase](/databases/oceanbase) | 2881 | Built-in | | [Oracle Database](/databases/oracle) | 1521 | Plugin | | [PGlite](/databases/pglite) | 5432 | Built-in | diff --git a/databases/neo4j.mdx b/databases/neo4j.mdx new file mode 100644 index 0000000..ddceb1a --- /dev/null +++ b/databases/neo4j.mdx @@ -0,0 +1,86 @@ +--- +title: Neo4j +description: Connect to Neo4j over Bolt, browse labels and relationship types, and run Cypher +--- + +import RegistryPlugin from "/snippets/registry-plugin.mdx"; + +Labels and relationship types take the place of tables. Open one to see its nodes or relationships as rows, one column per property, and run any Cypher in the editor. + +## Quick setup + +Click **New Connection…**, select **Neo4j**, enter the host, the Bolt port and your user and password, and connect. The driver speaks Bolt 4.2 to 5.4, so it reaches Neo4j 4.2 and later. It is tested on Neo4j 4.4 and 5.26. + + + +## Connection settings + +| Field | Description | +|-------|-------------| +| **Host** | Server host, such as `localhost` | +| **Port** | Bolt port, default `7687`. The browser port, `7474`, does not work | +| **Username / Password** | A Neo4j user. Leave both empty for a server with authentication turned off | +| **Database** | The database to open. Empty opens the user's home database | + +## Connection URL + +```text +neo4j://neo4j:password@localhost:7687/neo4j +neo4j+s://neo4j:password@xxxxxxxx.databases.neo4j.io +``` + +`neo4j`, `neo4j+s`, `neo4j+ssc`, `bolt`, `bolt+s` and `bolt+ssc` all open a Neo4j connection. `+s` sets SSL to **Verify Identity**, `+ssc` to **Required**, which accepts a self-signed certificate. See [Connection URL Reference](/connections/urls). + +A `neo4j://` URL connects to the host it names. TablePro does not follow a cluster's routing table, so on a cluster it talks to the member you point it at. + +## Databases, labels and relationship types + +Every database the user can see is listed in the sidebar. Inside each one, **Labels** lists the node labels and **Relationship Types** lists the relationship types. Switching database does not reconnect. + +## Nodes and relationships in the grid + +Opening a label shows one row per node: + +- `` is the node's element id, and `` lists all of its labels. +- Every other column is a property key. A node without that property shows an empty cell. +- Property keys come from the first 1,000 nodes, plus any new key on the page you are looking at. + +A relationship type shows ``, `` and ``, the element ids of the relationship and its two nodes, then its properties. + +Dates, times and durations read the way Cypher's `toString` writes them, such as `2024-01-01T07:00:00+07:00` or `P1Y2M`. Points show as `point({srid: 4326, x: 106.7, y: 10.8})`, and lists and maps as JSON. + +Sort and filter work on any column. A filter on a number also matches the same number stored as a string, since Neo4j does not fix a property's type. + +## Cypher + +The editor runs one Cypher statement at a time. Each returned key becomes a column. A node, relationship or path shows as JSON with its element id, labels or type, and properties. + +```cypher +MATCH (p:Person)-[:ACTED_IN]->(m:Movie) +RETURN p.name, m.title +LIMIT 25 +``` + +**Stop** cancels the running statement on the server and keeps the connection. Safe Mode reads the statement's clauses: `CREATE`, `MERGE`, `SET`, `REMOVE`, `DELETE` and a procedure call it does not know to be read-only count as writes, and `DROP` as destructive. + +## SSL/TLS + +**Required** encrypts without checking the certificate, like `+ssc`. **Verify CA** checks the certificate against the CA file on the **SSL/TLS** tab, or the system trust store when none is set. **Verify Identity** also checks the host name, like `+s`. + +## Limitations + +- The grid and structure are read-only. Change data with Cypher in the editor. +- Cluster routing is not followed. Connect to the member that should run your queries. +- Import is not available. Export works, see [Import and Export](/features/import-export). +- Explain and Profile plans are not shown. +- The editor treats Cypher as plain text, with no syntax coloring. + +## Troubleshooting + +### Connection reset by peer during the Bolt handshake + +The server closed the connection before it answered the Bolt handshake, and the error ends with "If the server requires TLS, turn on SSL." Usually the server only accepts TLS: set SSL to **Required** or **Verify Identity**. + +### this port speaks HTTP; use the Bolt port, usually 7687 + +The port is the Neo4j Browser's HTTP port. Use the Bolt port. diff --git a/docs.json b/docs.json index 7d896d6..53a40ed 100644 --- a/docs.json +++ b/docs.json @@ -261,6 +261,7 @@ "databases/mssql", "databases/mongodb", "databases/mysql", + "databases/neo4j", "databases/oceanbase", "databases/oracle", "databases/pglite", 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).