Quick setup
Click Create Connection…, select Spanner, pick an auth method, fill in Project ID, Instance ID and Database, then click Save & Connect.Connection settings
A custom REST Endpoint has to be an
https address under googleapis.com, such as a regional or Private Service Connect endpoint. Credentials are never sent anywhere else. Any Spanner version works; it is a managed service.
Connection URL
There is no URL scheme for Spanner. Create the connection from the form.Authentication
Pick Application Default Credentials on a Mac that already hasgcloud. Use a service account key for a shared or unattended setup, and a Google account when you have neither.
Application default credentials
GOOGLE_APPLICATION_CREDENTIALS when it is set, otherwise ~/.config/gcloud/application_default_credentials.json. It accepts the authorized_user, service_account and impersonated_service_account types.
Service account key
Point Service Account Key at a key file from Google Cloud Console (IAM > Service Accounts > Keys), or paste the JSON. The private key alone is not enough; paste the whole file.roles/spanner.databaseUser covers queries, grid edits, the DDL tab and schema changes. roles/spanner.databaseReader is enough for a connection that only reads.
Google account (OAuth 2.0)
1
Create a desktop OAuth client
In Google Cloud Console, under APIs & Services > Credentials, click Create Credentials > OAuth client ID and pick Desktop app.
2
Copy it into TablePro
Paste the client ID and client secret into the connection form and connect.
3
Sign in
The first connect stops at Google Sign-In Required. Click Sign In and approve access in the browser; the connection retries when sign-in finishes. The browser step times out after two minutes.
Local emulator
Choose Emulator (no credentials) and set REST Endpoint to the emulator’s REST port,http://127.0.0.1:9020 by default. The project, instance and database must already exist in the Spanner emulator. This method only accepts a local address, and sends no credentials.
Schemas
A GoogleSQL database’s default schema has no name. The sidebar and the schema switcher show it as (default), beside any named schemas. Its tables are written without a schema prefix, and a table in a named schema assales.Orders. A PostgreSQL-dialect database starts on public.
Queries and transactions
SELECT results stream, so a large result or a full-table export is not capped at Spanner’s 10 MiB response limit. Each statement commits on its own.BEGIN opens a read-write transaction that holds every statement until COMMIT or ROLLBACK. While one is open, saving grid edits is refused, so a save never commits or abandons it. When Spanner aborts the transaction, later statements fail until you run ROLLBACK; then run them again. A single statement outside a transaction is retried automatically when Spanner aborts it.
CREATE, ALTER and DROP go through Spanner’s schema-change API, outside any transaction. The editor waits for the change up to the query timeout; a change still running then keeps running on the server.
Editing rows
Grid edits, inserts and deletes becomeINSERT, UPDATE and DELETE keyed on the table’s primary key. Values are sent as typed query parameters, so quotes, backslashes and the text null are stored as typed. A column left at its default or generated by Spanner is written as DEFAULT. Views are read-only.
EXPLAIN
Explain shows Spanner’s query plan as a tree. A DML statement is planned in a transaction that is rolled back, so nothing is written. DDL and transaction statements cannot be explained, andEXPLAIN ANALYZE is not available because it runs the statement. See EXPLAIN Visualization.
SSL/TLS
Traffic to Google is always HTTPS. There is no SSL pane. The emulator is plain HTTP on your own Mac.Limitations
- The Structure tab is read-only. Change a table with
ALTER TABLEin the editor. DROP TABLEfails while the table has secondary indexes or interleaved children. Drop those first.- Truncate Table runs
DELETE … WHERE TRUEin one transaction, which Spanner rejects past its mutation limit. Delete a large table in batches from the editor. - SQL export writes
BYTESasX'…'and booleans as quoted text, which Spanner will not load. Export data as CSV or JSON. - Text filters such as contains and starts with fail on
JSON,ARRAYandSTRUCTcolumns. Filter those in the editor with JSON or array functions. - Data Compare is not available for Spanner.
- On a PostgreSQL-dialect database, completions and the AI assistant still quote with backticks. Write
"double quotes"yourself. - The emulator returns no query plans, so Explain reports that no plan was returned.
Troubleshooting
Application default credentials not found. Run gcloud auth application-default login.
No ADC file was found. Run the command, or setGOOGLE_APPLICATION_CREDENTIALS to a key file. Or switch the connection to a service account key.
Sign in with your Google account to use this connection.
The OAuth connection has no saved sign-in yet. Click Sign In in the prompt that follows.Google no longer accepts these credentials. Sign in again, or renew the key or the gcloud login.
Google rejected the refresh token or the service account’s signed request. For a Google account, sign in again from the prompt. For ADC, rungcloud auth application-default login again. For a service account, create a new key.
The REST endpoint must be an https address under googleapis.com. Choose the Emulator auth method for a local emulator.
REST Endpoint names a host that is not Google’s. Clear it for production, or pick Emulator (no credentials) for a local emulator.Spanner aborted the transaction. Roll it back and run it again.
Spanner ended the open transaction, usually over a lock conflict. RunROLLBACK, then the statements again.

