Skip to content

v16.0

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Aug 20:37
· 6 commits to main since this release

Changes

HTTP Server

Performance

Integrations

JWT

API

  • Prefer: timezone now supports numeric offsets like 05:00 or -4 by @steve-chavez in #5100

  • Fix unexpected results when embedding and filtering the same table more than once by @laurenceisla in #4075

  • Deprecate filters, orders and limits with the name of an embedded table when it has an alias by @steve-chavez, @laurenceisla in #4075

    • e.g. ?select=alias:table(*)&table.id=eq.1 will not be possible anymore, use ?select=alias:table(*)&alias.id=eq.1 instead.
    • You will see a warning in the logs and a Warning header on the client response when this happens.
    • You can disable this behavior now by setting url-use-legacy-target-names = false.
  • Add Vary header to responses by @develop7 in #4609

  • Fix automatic transaction retries on 40001 (serialization_failure) errors to prevent replication lag by @laurenceisla in #3673

Observability

Admin Server

Deployment

Schema Cache

  • Fix requests failing when the schema cache fails to reload, when this happens PostgREST will continue serving requests in "best effort" by @mkleczek in #4873 #4869
  • Fix reporting 503s errors unnecessarily while the schema cache is loading at startup by @mkleczek in #4880
  • Fix schema cache dump missing RPC transaction isolation level by @taimoorzaeem in #5079

Listener

Migration to v16

  • Drop support for PostgreSQL EOL version 13 by @wolfgangwalther in #4193

    • PostgreSQL 13 end of life was on 2025 (ref)
    • Upgrade your PostgreSQL version to at least 14 to use this new PostgREST version.
  • Fail at startup when db-schemas contains schema pg_catalog or information_schema by @taimoorzaeem in #4359

    • Previously it failed at runtime with PGRST205 on requests related to these schemas.
    • Remove pg_catalog and information_schema from db-schemas.
  • Prefer: timezone no longer complies with handling=lenient and instead always fails by @steve-chavez in #5128

    • Supporting this required caching pg_timezone_names, which was expensive.
    • Ensure your requests always have a valid timezone.
  • jwt-role-claim-key no longer uses the JSPath DSL and instead uses JSON Path by @taimoorzaeem in #4984

    • Now all config values must start with $ character.
      Example: .roles.read -> $.roles.read
    • Keys with special characters, with the exception of _ char must be quoted.
      Example: .roles.write-role -> $.roles["write-role"]
    • String comparison operators (^==, ==^ and *==) are replaced with regular expression search.
      Example: .roles[?(@ ^== "postgrest_test_")] -> $.roles[?search(@, "^postgrest_test_")]
    • Update the jwt-role-claim-key value accoring to the above rules. Also see the syntax reference: RFC 9535.