8000 GitHub - schemamap/omnigres: Postgres as a Platform
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

schemamap/omnigres

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Omnigres

Discord Chat Documentation License

Omnigres makes Postgres a developer-first application platform. You can deploy a single database instance and it can host your entire application, scaling as needed.

  • Running application logic inside or next to the database instance
  • Deployment provisioning (Git, containers, etc.)
  • Database instance serves HTTP, WebSocket and other protocols
  • In-memory and volatile on-disk caching
  • Routine application building blocks (authentication, authorization, payments, etc.)
  • Database-modeled application logic via reactive queries
  • Automagic remote APIs and form handling
  • Live data updates

Blogs and Publications

🏃 Quick start

The fastest way to try Omnigres out is by using its container image:

docker volume create omnigres
docker run --name omnigres --mount source=omnigres,target=/var/lib/postgresql/data \
           -p 5432:5432 -p 8080:8080 --rm ghcr.io/omnigres/omnigres:latest
# Now you can connect to it:
psql -h localhost -p 5432 -U omnigres omnigres # password is `omnigres`

Postgres parameters such as database, user or password can be overridden as per the "Environment Vari 9654 ales" section in postgres image instructions

You can access the HTTP server at localhost:8080

Building your own image

If you can't use the pre-built image (for example, you are running a fork or made changes), you can build the image yourself:

# Build the image
DOCKER_BUILDKIT=1 docker build . -t ghcr.io/omnigres/omnigres

👋 "Hello, world"

Here we expect you are running the container image, which has omni_httpd and omni_web extensions provisioned by default.

Let's start with a traditional example:

update omni_httpd.handlers
set
    query =
        $$select omni_httpd.http_response('Hello, world!') from request;$$;

Here we instruct the handler that is provisioned by omni_httpd by default to use the enclosed query to greet the world:

$ curl localhost:8080
Hello, world!

Now, let's make it more personal and let it greet the requester by name.

update omni_httpd.handlers
set
    query =
        $$select omni_httpd.http_response('Hello, ' || 
                   coalesce(omni_web.param_get(request.query_string, 'name'), 'world') || '!')
          from request;$$;

Now, it'll respond in a personalized manner if name query string parameter is provided:

$ curl localhost:8080
Hello, world!

$ curl "localhost:8080?name=John"
Hello, John!

This, of course, only barely scratches the surface, but it may give you a very high-level concept of how Omnigres web services can be built.

For a more complex example, that uses the underlying database and employs more real-world layout, check out this MOTD service example.

🏗️ Component Roadmap

Below is the current list of components being worked on, experimented with and discussed. This list will change (and grow) over time.

Name Status Description
omni_schema ✅ First release candidate Application schema management
omni_http ✅ First release candidate Common HTTP types library
omni_httpd and omni_web ✅ First release candidate Serving HTTP in Postgres and building services in SQL
omni_mimetypes ✅ First release candidate MIME types and file extensions
omni_httpc ✅ First release candidate HTTP client
omni_sql 🚧 Extremely limited API surface Programmatic SQL manipulation
omni_vfs ☑️ Initial prototype Virtual File System interface
omni_containers ☑️ Initial prototype Managing containers
omni_ext and Dynpgext interface ☑️ Getting ready to become first release candidate Advanced Postgres extension loader
omni_git 🥼 Early experiments (unpublished) Postgres Git client
omni_types ✅ First release candidate Advanced Postgres typing techniques (sum types, etc.)
omni_seq ✅ First release candidate Extended Postgres sequence tooling
omni_reactive 🗓️ Haven't started yet Reactive queries

⌨️ Hacking

Building & using extensions

To build and run Omnigres, you would currently need a recent C compiler, OpenSSL and cmake:

mkdir -p build && cd build
cmake ..
make psql_<COMPONENT_NAME> # for example, `psql_omni_containers`

Running tests

# in the build directory
CTEST_PARALLEL_LEVEL=$(nproc) make -j $(nproc) all test

About

Postgres as a Platform

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 62.1%
  • PLpgSQL 25.7%
  • C++ 10.7%
  • CMake 1.1%
  • Dockerfile 0.3%
  • Shell 0.1%
0