A RESTful API for managing your Postgres. Fetch tables, add roles, and run queries (and more).
https://supabase.github.io/postgres-meta/
Schema:
-
POST /query
(Execute SQL query)-
POST /format
(Format SQL query) -
POST /parse
(Parse SQL query into AST) -
POST /explain
(Explain SQL query)
-
-
/columns
- GET (List)
- POST (
alter table add column
) - PATCH (
alter table alter/rename column
) - DELETE (
alter table drop column
)
-
/extensions
- GET (List)
- POST (
create extension
) - PATCH (
alter extension
) - DELETE (
drop extension
)
-
/functions
- GET (List)
- POST (
create function
) - PATCH (
alter function
) - DELETE (
drop function
)
-
/publications
- GET (List)
- POST (
create publication
) - PATCH (
alter publication
) - DELETE (
drop publication
)
-
/roles
- GET (List)
- POST (
create role
) - PATCH (
alter role
) - DELETE (
drop role
)
-
/schemas
- GET (List)
- POST (
create schema
) - PATCH (
alter schema
) - DELETE (
drop schema
)
-
/tables
- GET (List)
- POST (
create table
) - PATCH (
alter table
) - DELETE (
drop table
)
-
/triggers
- GET (List)
- POST (
create trigger
) - PATCH (
alter trigger
) - DELETE (
drop trigger
)
-
/types
- GET (List)
- POST (
create type
) - PATCH (
alter type
) - DELETE (
drop type
)
Helpers:
-
/config
- GET
/version
: Postgres version
- GET
-
/generators
- GET
/openapi
: Generate Open API - GET
/typescript
: Generate Typescript types - GET
/swift
: Generate Swift types (beta)
- GET
Set the following ENV VARS:
PG_META_HOST="0.0.0.0"
PG_META_PORT=8080
PG_META_DB_HOST="postgres"
PG_META_DB_NAME="postgres"
PG_META_DB_USER="postgres"
PG_META_DB_PORT=5432
PG_META_DB_PASSWORD="postgres"
Then run any of the binaries in the releases.
Why?
This serves as a light-weight connection pooler. It also normalises the Postgres system catalog into a more readable format. While there is a lot of re-inventing right now, this server will eventually provide helpers (such as type generators). The server is multi-tenant, so it can support multiple Postgres databases from a single server.
What security does this use?
None. Please don't use this as a standalone server. This should be used behind a proxy in a trusted environment, on your local machine, or using this internally with no access to the outside world.
To start developing, run npm run dev
. It will set up the database with Docker for you. The server will restart on file change.
If you are fixing a bug, you should create a new test case. To test your changes, add the -u
flag to vitest
on the test:run
script, run npm run test
, and then review the git diff of the snapshots. Depending on your change, you may see id
fields being changed - this is expected and you are free to commit it, as long as it passes the CI. Don't forget to remove the -u
flag when committing.
To make changes to the type generation, run npm run gen:types:<lang>
while you have npm run dev
running,
where <lang>
is one of:
typescript
go
swift
(beta)
To use your own database connection string instead of the provided test database, run:
PG_META_DB_URL=postgresql://postgres:postgres@localhost:5432/postgres npm run gen:types:<lang>
Apache 2.0
We are building the features of Firebase using enterprise-grade, open source products. We support existing communities wherever possible, and if the products don’t exist we build them and open source them ourselves.