Skip to content

supabase/postgres-meta

master
Switch branches/tags
Code

Latest commit

E.g.

```sql
create function f(OUT text) returns void as $$ $$ language sql;
```

Shows up as

```ts
export type Json =
  | string
  | number
  | boolean
  | null
  | { [key: string]: Json }
  | Json[];

export interface Database {
  extensions: {
    Functions: {
      f: {
        Args: { OUT: text };
        Returns: undefined;
      };
    };
  };
}
```
b787e81

Git stats

Files

Permalink
Failed to load latest commit information.

postgres-meta

A RESTful API for managing your Postgres. Fetch tables, add roles, and run queries (and more).

Documentation

https://supabase.github.io/postgres-meta/

Progress

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
  • /generators
    • GET /openapi: Generate Open API
    • GET /typescript: Generate Typescript types

Quickstart

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.

FAQs

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.

Developers

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/--updateSnapshot flag to jest 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/--updateSnapshot flag when committing.

Licence

Apache 2.0

Sponsors

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.

New Sponsor