/trino-postgresql-gateway

A gateway/proxy for using any PostgreSQL client to connect to a Trino cluster

Primary LanguageGoApache License 2.0Apache-2.0

trino-postgresql-gateway

A gateway/proxy for using any PostgreSQL client to connect to and run SQL queries in a Trino cluster.

It is an experiment to test Trino access in programs that do not support the official Trino drivers, like JDBC.

It does not implement 100% client functionality and it is using the Trino Go client, which itself is not complete yet.

It does NOT parse PostgreSQL queries and expects ANSII SQL queries supported by Trino. To fully support PostgreSQL queries, it would be better to implement it as a PostgreSQL Foreign Data Wrapper (FDW)

Usage

Start the server, pointing it to a Trino cluster:

./trino-postgresql-gateway -target http://user@localhost:8080

Then connect to it using any PostgreSQL client, like psql:

psql -h localhost -U aaa -c 'select * from tpch.tiny.nation limit 2'

To run the latest version directly from the main branch:

go run github.com/nineinchnick/trino-postgresql-gateway -listen localhost:5432 -target http://localhost:8080

Limitations

Authentication

There's no authentication for PostgreSQL clients.

Trino authentication has to be specified in the -target option.

Data types

Only basic data types are supported, like VARCHAR, INTEGER and DOUBLE.

Multiple queries

Simple queries are not being split, so if multiple queries are send together they'll fail to execute.

Prepared statements

Prepared statements are supported, but PostgreSQL uses positional placeholders like $1, which are replaced with ? using a plain regular expression. This means it might break queries that contain strings like this in literal values or quoted identifiers.

Canceling queries

Trino queries execute with a fixed timeout of 1 minute and cannot be cancelled.

Error reporting

Trino query errors are not decoded into PostgreSQL errors, so only an error message is returned, without details like the number of query line and column where an error ocurred.

Metadata

Most PostgreSQL tools that support schema discovery (like listing tables) do so by querying the PostgreSQL's system catalogs. They're not available in Trino. To read metadata, query the information_schema schema.