Skip to content

Latest commit

 

History

History
80 lines (74 loc) · 4.72 KB

File metadata and controls

80 lines (74 loc) · 4.72 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

  • Realtime events: config-gated SSE endpoint bridging Postgres LISTEN/NOTIFY (events_channels, events_path, events_heartbeat_interval) (#81).
  • application/geo+json broadened from relation reads to also cover mutations (with Prefer: return=representation), /rpc/*, and embedded reads, whenever the PostGIS extension is installed (#63).
  • Behavior note: response bodies are now byte-identical to PostgREST v14.12, including its , \n row separator between top-level JSON array elements and jsonb-styled embed internals — this shifts Content-Length on any multi-row response compared to earlier Bier versions (#31).
  • Breaking: Location is no longer emitted on POST/PUT responses for Prefer: return=representation or return=minimal — only return=headers-only carries it now, matching PostgREST 14.12 (hosts that read Location after a plain POST must switch to return=headers-only).
  • The empty-payload mutation short-circuit now carries a Content-Range of */* (*/0 under Prefer: count=exact).
  • Scalar/composite RPC responses always carry Content-Range (0-0/* without a count preference).
  • Content-Profile is echoed on success responses whenever more than one schema is exposed and the profile-schema model is not configured.
  • Added jwt_role_claim_key (PostgREST jwt-role-claim-key, alias role-claim-key): a JSPath selecting the database role inside the JWT claims — nested keys, array indexes, and PostgREST's filter expressions are supported; an invalid expression aborts startup (#49).
  • Added jwt_secret_is_base64 (PostgREST jwt-secret-is-base64, alias secret-is-base64): the JWT secret is base64-decoded before use (URL-safe characters accepted); an undecodable secret aborts startup (#49).
  • Perf: reads no longer compute count(*) OVER() unless the request's count mode consumes it (table reads: Prefer: count=exact|estimated; RPC: any mode but none; mutations: never) — filtered pages with a limit get their fast plan back instead of scanning the whole filtered set. The application/vnd.pgrst.plan output now reflects the request's count mode (#67).
  • Added an HTTP benchmark harness (bench/http/) that measures Bier against PostgREST v14.12 head-to-head with k6 under matched configuration; results and methodology in bench/http/REPORT.md.
  • Added server_host (PostgREST server-host): the listener bind address as a Warp-style host preference (!4 default, !6/*6, *, IP literals, resolvable host names), honored by both the API and admin listeners (#49).
  • Added server_unix_socket / server_unix_socket_mode (PostgREST server-unix-socket(-mode)): serve the API on a Unix domain socket instead of a TCP port, applying the octal file mode (600–777) to the socket file; an invalid mode aborts startup (#49).
  • Added openapi_server_proxy_uri (PostgREST openapi-server-proxy-uri): the generated OpenAPI document advertises the proxy's scheme/host/port/path as schemes/host/basePath; a malformed URI aborts startup (#49).
  • Added app_settings (PostgREST app.settings.*, PGRST_APP_SETTINGS_<NAME>): arbitrary app.settings.<name> GUCs set transaction-locally on requests running with the auth context (#49).
  • Added db_pool_max_idletime (PostgREST db-pool-max-idletime, alias db-pool-timeout) mapping onto the connection pool's idle-interval knob, and the CLI now models db-pool (pool size) (#49).
  • The CLI grew --example/-e, printing a loadable config template with every implemented key at its default; --dump-config now covers the full implemented key table (conformance cases 1705/1707/1714/1715/1716/1727/1729 are active) (#49).

Nothing has been published to Hex yet. Current state of the library:

  • RESTful API generated at boot from PostgreSQL introspection (pg_catalog), heavily inspired by PostgREST and driven by a conformance suite frozen from PostgREST v14.12.
  • Reads, mutations (insert/update/upsert/delete), and /rpc/* function calls compiled into a single parameterized SQL statement per request.
  • JWT authentication (HS/RS/ES/PS/EdDSA via JOSE) with role switching and request-scoped GUCs.
  • Schema-cache reload via LISTEN/NOTIFY and Bier.reload_schema_cache/1.
  • Multiple named instances per BEAM node, each with its own connection pool, runtime-built router, and Bandit server.
  • Standalone PostgREST-compatible CLI (PGRST_* env), mix release target, and Dockerfile.