Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6de489c7ba | ||
|
|
bbf8431a23 | ||
|
|
729deafc56 | ||
|
|
19d70b9bc6 | ||
|
|
e004c5c5f8 | ||
|
|
ac464c3681 | ||
|
|
aa48038303 | ||
|
|
4e190ceebe |
@@ -17,7 +17,7 @@ runs:
|
|||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- if: ${{ inputs.vm == 'freebsd' }}
|
- if: ${{ inputs.vm == 'freebsd' }}
|
||||||
uses: vmactions/freebsd-vm@77ed28d336d03fe19a3f4f7266c1d2c4714dd79d # v1.5.2
|
uses: vmactions/freebsd-vm@83b151f58c6047089f4c80eb5ba2039d158ce093 # v1.5.3
|
||||||
with:
|
with:
|
||||||
envs: ${{ inputs.envs }}
|
envs: ${{ inputs.envs }}
|
||||||
prepare: ${{ inputs.prepare }}
|
prepare: ${{ inputs.prepare }}
|
||||||
|
|||||||
+93
-53
@@ -4,68 +4,108 @@ All notable changes to this project will be documented in this file. From versio
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
## [16.0] - 2026-08-07
|
## [16.1] - 2026-08-10
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Log error when `db-schemas` config contains schema `pg_catalog` or `information_schema` by @taimoorzaeem in #4359
|
|
||||||
- Optimize requests with `Prefer: count=exact` that do not use ranges or `db-max-rows` by @laurenceisla in #3957
|
|
||||||
+ Removed unnecessary double count when building the `Content-Range`.
|
|
||||||
- Add config `client-error-verbosity` to customize error verbosity by @taimoorzaeem in #4088, #3980, #3824
|
|
||||||
- Add `Vary` header to responses by @develop7 in #4609
|
|
||||||
- Log schema cache queries timings on `log-level=debug` by @steve-chavez in #4805
|
|
||||||
- Add GHC runtime metrics to the metrics endpoint by @mkleczek in #4862
|
|
||||||
- Support running the admin server on a unix socket by @wolfgangwalther in #5003
|
|
||||||
- Add config `server-reuseport` to allow starting multiple PostgREST instances using the same port on supported platforms by @mkleczek in #4703, #4694
|
|
||||||
- Make config `log-level` reloadable by @taimoorzaeem in #5113
|
|
||||||
- Optimize schema cache domain type resolution by using `pg_basetype` on PostgreSQL 17+ by @joelonsql in #4567
|
|
||||||
- `Prefer: timezone` is optimized so it no longer requires the schema cache by @steve-chavez in #5100
|
|
||||||
+ Previously this required caching `pg_timezone_names` which was slow in some systems
|
|
||||||
- `Prefer: timezone` now supports numeric offsets like `05:00` or `-4` by @steve-chavez in #5100
|
|
||||||
- Graceful shutdown by @mkleczek, @Vlix in #4702
|
|
||||||
- `jwt-role-claim-key` is now more flexible, supporting the standard JSON Path defined in RFC 9535 by @taimoorzaeem in #4984
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Remove automatic transaction retries on `40001 (serialization_failure)` errors to prevent replication lag by @laurenceisla in #3673
|
- JWT validation uses wrong current time due to a bug in auto-update by @mkleczek in #5159
|
||||||
|
|
||||||
|
## [16.0] - 2026-08-07
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
#### HTTP Server
|
||||||
|
|
||||||
|
- [Graceful shutdown](https://docs.postgrest.org/en/v16/references/http_server.html#graceful-shutdown) by @mkleczek, @Vlix in #4702
|
||||||
|
|
||||||
|
- [server-reuseport](https://docs.postgrest.org/en/v16/references/configuration.html#server-reuseport) allows starting multiple PostgREST instances using the same port on supported platforms by @mkleczek in #4703, #4694
|
||||||
|
|
||||||
|
#### Performance
|
||||||
|
|
||||||
|
- Optimize schema cache domain type resolution by using [pg_basetype](https://www.postgresql.org/docs/current/functions-info.html#FUNCTIONS-INFO-CATALOG) on PostgreSQL 17+ by @joelonsql in #4567
|
||||||
|
|
||||||
|
- [Prefer: count=exact](https://docs.postgrest.org/en/v16/references/api/pagination_count.html#exact-count) no longer does a double count on requests that do not use ranges or `db-max-rows` by @laurenceisla in #3957
|
||||||
|
|
||||||
|
- [Prefer: timezone](https://docs.postgrest.org/en/v16/references/api/preferences.html#prefer-timezone) no longer requires the schema cache by @steve-chavez in #5100
|
||||||
|
+ Previously this required caching [pg_timezone_names](https://www.postgresql.org/docs/current/view-pg-timezone-names.html) which was slow in some systems
|
||||||
|
|
||||||
|
#### Integrations
|
||||||
|
|
||||||
|
- PostgREST is now tested to work with [OrioleDB](https://github.com/orioledb/orioledb/) in #4845 by @wolfgangwalther
|
||||||
|
+ See [our guide for running OrioleDB on NixOS](https://docs.postgrest.org/en/v16/integrations/nixos.html)
|
||||||
|
|
||||||
|
#### JWT
|
||||||
|
|
||||||
|
- [JWT Role Extraction](https://docs.postgrest.org/en/v16/references/auth.html#jwt-role-extract) is now more flexible, supporting the standard JSON Path defined in RFC 9535 by @taimoorzaeem in #4984
|
||||||
|
|
||||||
|
#### API
|
||||||
|
|
||||||
|
- [Prefer: timezone](https://docs.postgrest.org/en/v16/references/api/preferences.html#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
|
- Fix unexpected results when embedding and filtering the same table more than once by @laurenceisla in #4075
|
||||||
+ You need to set `url-use-legacy-target-names = false`.
|
+ You need to set [url-use-legacy-target-names](https://docs.postgrest.org/en/v16/references/configuration.html#url-use-legacy-target-names) to `false`.
|
||||||
- If the schema cache fails to reload, PostgREST will no longer stop serving requests and will continue doing so in a "best effort" basis by @mkleczek in #4873 #4869
|
|
||||||
- Stop reporting 503s errors unnecessarily while the schema cache is loading at startup by @mkleczek in #4880
|
|
||||||
- Fix responding with `Something went wrong` on Admin server when under EMFILE by @mkleczek in #5077
|
|
||||||
- Fix schema cache dump missing RPC transaction isolation level by @taimoorzaeem in #5079
|
|
||||||
- Fix config `db-channel-enabled` not reloadable on config reload by @taimoorzaeem in #4894
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Drop support for PostgreSQL EOL version 13 by @wolfgangwalther in #4193
|
|
||||||
- All responses now include a `Vary` header by @develop7 in #4609
|
|
||||||
- Log error when `db-schemas` config contains schema `pg_catalog` or `information_schema` by @taimoorzaeem in #4359
|
|
||||||
+ Now fails at startup. Prior to this, it failed with `PGRST205` on requests related to these schemas.
|
|
||||||
- Build a static executable for aarch64-linux by @wolfgangwalther in #4193
|
|
||||||
- Build the minimal docker image for aarch64-linux by @wolfgangwalther in #4193
|
|
||||||
- `Prefer: timezone` no longer complies with `handling=lenient` and instead always fails by @steve-chavez in #5128
|
|
||||||
- `jwt-role-claim-key` no longer uses the JSPath DSL and instead uses JSON Path by @taimoorzaeem in #4984
|
|
||||||
|
|
||||||
#### Changed Syntax for JWT Role Extraction
|
|
||||||
|
|
||||||
The `jwt-role-claim-key` config should be updated according to the following:
|
|
||||||
|
|
||||||
- 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_")]`
|
|
||||||
- Detailed reference for syntax: [RFC 9535](https://www.rfc-editor.org/rfc/rfc9535.html#name-jsonpath-syntax-and-semanti).
|
|
||||||
|
|
||||||
### Deprecated
|
|
||||||
|
|
||||||
- Deprecate filters, orders and limits with the name of an embedded table when it has an alias by @steve-chavez, @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.
|
+ 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 when this happens.
|
+ 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`.
|
+ 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
|
||||||
|
|
||||||
|
- [GHC runtime metrics](https://docs.postgrest.org/en/v16/references/observability.html#ghc-runtime-metrics) by @mkleczek in #4862
|
||||||
|
- [client-error-verbosity](https://docs.postgrest.org/en/v16/references/configuration.html#client-error-verbosity) to customize responses error verbosity by @taimoorzaeem in #4088, #3980, #3824
|
||||||
|
- [log-level](https://docs.postgrest.org/en/v16/references/configuration.html#log-level) config is now reloadable by @taimoorzaeem in #5113
|
||||||
|
- Log error when `db-schemas` config contains schema `pg_catalog` or `information_schema` by @taimoorzaeem in #4359
|
||||||
|
- Log schema cache queries timings on `log-level=debug` by @steve-chavez in #4805
|
||||||
|
|
||||||
|
#### Admin Server
|
||||||
|
|
||||||
|
- [admin-server-unix-socket](https://docs.postgrest.org/en/v16/references/configuration.html#admin-server-unix-socket)/[admin-server-unix-socket-mode](https://docs.postgrest.org/en/v16/references/configuration.html#admin-server-unix-socket-mode) to run the admin server on a unix socket by @wolfgangwalther in #5003
|
||||||
|
- Fix responding with `Something went wrong` on Admin server when under EMFILE by @mkleczek in #5077
|
||||||
|
|
||||||
|
#### Deployment
|
||||||
|
|
||||||
|
- Make executable for aarch64-linux static instead of Ubuntu-based by @wolfgangwalther in #4193
|
||||||
|
- Docker image for aarch64-linux is now built from scratch instead of being Ubuntu-based by @wolfgangwalther in #4193
|
||||||
|
- Besides Docker Hub, docker images are now published to Github Container Registry by @wolfgangwalther in #2836
|
||||||
|
|
||||||
|
#### 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
|
||||||
|
|
||||||
|
- Fix config `db-channel-enabled` not reloading by @taimoorzaeem in #4894
|
||||||
|
|
||||||
|
### Migration to v16
|
||||||
|
|
||||||
|
- Drop support for PostgreSQL EOL version 13 by @wolfgangwalther in #4193
|
||||||
|
+ PostgreSQL 13 end of life was on 2025 ([ref](https://www.postgresql.org/support/versioning/))
|
||||||
|
+ 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](https://www.rfc-editor.org/rfc/rfc9535.html#name-jsonpath-syntax-and-semanti).
|
||||||
|
|
||||||
## [14.16] - 2026-07-27
|
## [14.16] - 2026-07-27
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
index-state: hackage.haskell.org 2026-07-11T17:34:10Z
|
index-state: hackage.haskell.org 2026-08-10T16:58:32Z
|
||||||
|
|||||||
@@ -31,60 +31,60 @@ This section talks briefly about various important modules.
|
|||||||
Main
|
Main
|
||||||
----
|
----
|
||||||
|
|
||||||
The starting point of the program is `Main.hs <https://github.com/PostgREST/postgrest/blob/main/src/executable/Main.hs>`_.
|
The starting point of the program is `Main.hs <https://github.com/PostgREST/postgrest/blob/v16/src/executable/Main.hs>`_.
|
||||||
|
|
||||||
CLI
|
CLI
|
||||||
---
|
---
|
||||||
|
|
||||||
Main then calls `CLI.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/CLI.hs>`_, which is in charge of :ref:`cli`.
|
Main then calls `CLI.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/CLI.hs>`_, which is in charge of :ref:`cli`.
|
||||||
|
|
||||||
App
|
App
|
||||||
---
|
---
|
||||||
|
|
||||||
`App.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/App.hs>`_ is then in charge of composing the different modules.
|
`App.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/App.hs>`_ is then in charge of composing the different modules.
|
||||||
|
|
||||||
Auth
|
Auth
|
||||||
----
|
----
|
||||||
|
|
||||||
`Auth.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/Auth.hs>`_ is in charge of :ref:`authn`.
|
`Auth.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/Auth.hs>`_ is in charge of :ref:`authn`.
|
||||||
|
|
||||||
Api Request
|
Api Request
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
`ApiRequest.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/ApiRequest.hs>`_ is in charge of parsing the URL query string (following PostgREST syntax), the request headers, and the request body.
|
`ApiRequest.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/ApiRequest.hs>`_ is in charge of parsing the URL query string (following PostgREST syntax), the request headers, and the request body.
|
||||||
|
|
||||||
A request might be rejected at this level if it's invalid. For example when providing an unknown media type to PostgREST or using an unknown HTTP method.
|
A request might be rejected at this level if it's invalid. For example when providing an unknown media type to PostgREST or using an unknown HTTP method.
|
||||||
|
|
||||||
Plan
|
Plan
|
||||||
----
|
----
|
||||||
|
|
||||||
Using the Schema Cache, `Plan.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/Plan.hs>`_ generates an internal AST, filling out-of-band SQL details (like an ``ON CONFLICT (pk)`` clause) required to complete the user request.
|
Using the Schema Cache, `Plan.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/Plan.hs>`_ generates an internal AST, filling out-of-band SQL details (like an ``ON CONFLICT (pk)`` clause) required to complete the user request.
|
||||||
|
|
||||||
A request might be rejected at this level if it's invalid. For example when doing resource embedding on a nonexistent resource.
|
A request might be rejected at this level if it's invalid. For example when doing resource embedding on a nonexistent resource.
|
||||||
|
|
||||||
Query
|
Query
|
||||||
-----
|
-----
|
||||||
|
|
||||||
`Query.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/Query.hs>`_ generates the SQL queries (parametrized and prepared) required to satisfy the user request.
|
`Query.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/Query.hs>`_ generates the SQL queries (parametrized and prepared) required to satisfy the user request.
|
||||||
|
|
||||||
Only at this stage a connection from the pool might be used.
|
Only at this stage a connection from the pool might be used.
|
||||||
|
|
||||||
Schema Cache
|
Schema Cache
|
||||||
------------
|
------------
|
||||||
|
|
||||||
`SchemaCache.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/SchemaCache.hs>`_ is in charge of :ref:`schema_cache`.
|
`SchemaCache.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/SchemaCache.hs>`_ is in charge of :ref:`schema_cache`.
|
||||||
|
|
||||||
Config
|
Config
|
||||||
------
|
------
|
||||||
|
|
||||||
`Config.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/Config.hs>`_ is in charge of :ref:`configuration`.
|
`Config.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/Config.hs>`_ is in charge of :ref:`configuration`.
|
||||||
|
|
||||||
Admin
|
Admin
|
||||||
-----
|
-----
|
||||||
|
|
||||||
`Admin.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/Admin.hs>`_ is in charge of the :ref:`admin_server`.
|
`Admin.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/Admin.hs>`_ is in charge of the :ref:`admin_server`.
|
||||||
|
|
||||||
Listener
|
Listener
|
||||||
--------
|
--------
|
||||||
|
|
||||||
`Reload.hs <https://github.com/PostgREST/postgrest/blob/main/src/library/PostgREST/AppState/Reload.hs>`_ is in charge of the :ref:`listener`.
|
`Reload.hs <https://github.com/PostgREST/postgrest/blob/v16/src/library/PostgREST/AppState/Reload.hs>`_ is in charge of the :ref:`listener`.
|
||||||
|
|||||||
@@ -49,6 +49,16 @@ let
|
|||||||
# Before upgrading fuzzyset to 0.3, check: https://github.com/PostgREST/postgrest/issues/3329
|
# Before upgrading fuzzyset to 0.3, check: https://github.com/PostgREST/postgrest/issues/3329
|
||||||
fuzzyset = prev.fuzzyset_0_2_4;
|
fuzzyset = prev.fuzzyset_0_2_4;
|
||||||
|
|
||||||
|
# TODO: Remove once available in nixpkgs
|
||||||
|
auto-update =
|
||||||
|
prev.callHackageDirect
|
||||||
|
{
|
||||||
|
pkg = "auto-update";
|
||||||
|
ver = "0.2.7";
|
||||||
|
sha256 = "sha256-fHX/OqF/cB9rbpGpLUtA29bcEJS43HUWHcK55yUxKoo=";
|
||||||
|
}
|
||||||
|
{ };
|
||||||
|
|
||||||
# TODO: Remove once available in nixpkgs
|
# TODO: Remove once available in nixpkgs
|
||||||
aeson-jsonpath =
|
aeson-jsonpath =
|
||||||
prev.callHackageDirect
|
prev.callHackageDirect
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
cabal-version: 3.0
|
cabal-version: 3.0
|
||||||
name: postgrest
|
name: postgrest
|
||||||
version: 16.0
|
version: 16.1
|
||||||
synopsis: REST API for any Postgres database
|
synopsis: REST API for any Postgres database
|
||||||
description: Reads the schema of a PostgreSQL database and creates RESTful routes
|
description: Reads the schema of a PostgreSQL database and creates RESTful routes
|
||||||
for tables, views, and functions, supporting all HTTP methods that security
|
for tables, views, and functions, supporting all HTTP methods that security
|
||||||
@@ -106,7 +106,7 @@ library
|
|||||||
, Ranged-sets >= 0.3 && < 0.6
|
, Ranged-sets >= 0.3 && < 0.6
|
||||||
, aeson >= 2.0.3 && < 2.3
|
, aeson >= 2.0.3 && < 2.3
|
||||||
, aeson-jsonpath >= 0.4.2 && < 0.5
|
, aeson-jsonpath >= 0.4.2 && < 0.5
|
||||||
, auto-update >= 0.1.4 && < 0.3
|
, auto-update >= 0.2.7 && < 0.3
|
||||||
, base64-bytestring >= 1 && < 1.3
|
, base64-bytestring >= 1 && < 1.3
|
||||||
, bytestring >= 0.10.8 && < 0.13
|
, bytestring >= 0.10.8 && < 0.13
|
||||||
, case-insensitive >= 1.2 && < 1.3
|
, case-insensitive >= 1.2 && < 1.3
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ nix:
|
|||||||
|
|
||||||
extra-deps:
|
extra-deps:
|
||||||
- aeson-jsonpath-0.4.2.0
|
- aeson-jsonpath-0.4.2.0
|
||||||
|
- auto-update-0.2.7
|
||||||
- configurator-pg-0.2.11
|
- configurator-pg-0.2.11
|
||||||
- fuzzyset-0.2.4
|
- fuzzyset-0.2.4
|
||||||
- hasql-notifications-0.2.4.0
|
- hasql-notifications-0.2.4.0
|
||||||
|
|||||||
@@ -11,6 +11,13 @@ packages:
|
|||||||
size: 2160
|
size: 2160
|
||||||
original:
|
original:
|
||||||
hackage: aeson-jsonpath-0.4.2.0
|
hackage: aeson-jsonpath-0.4.2.0
|
||||||
|
- completed:
|
||||||
|
hackage: auto-update-0.2.7@sha256:32ca6ce351604a17ee79e4086939f798f958f8407478288e9adb7adeb194c6ea,1670
|
||||||
|
pantry-tree:
|
||||||
|
sha256: 641faa7d5ee516195ecd4b538f170722d56f84e3bc5714c6bbe8123849b49983
|
||||||
|
size: 1105
|
||||||
|
original:
|
||||||
|
hackage: auto-update-0.2.7
|
||||||
- completed:
|
- completed:
|
||||||
hackage: configurator-pg-0.2.11@sha256:de0c56386591e85159436b0af04a8f15a4f4e156354e99709676c2c2ee959505,2850
|
hackage: configurator-pg-0.2.11@sha256:de0c56386591e85159436b0af04a8f15a4f4e156354e99709676c2c2ee959505,2850
|
||||||
pantry-tree:
|
pantry-tree:
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ import Test.Hspec.Wai.JSON
|
|||||||
|
|
||||||
import PostgREST.Config (AppConfig (..))
|
import PostgREST.Config (AppConfig (..))
|
||||||
import PostgREST.Config.PgVersion (PgVersion, pgVersion190)
|
import PostgREST.Config.PgVersion (PgVersion, pgVersion190)
|
||||||
|
import PostgREST.Version (prettyVersion)
|
||||||
|
|
||||||
|
import qualified Data.ByteString.Char8 as BS
|
||||||
|
|
||||||
import Protolude hiding (get)
|
import Protolude hiding (get)
|
||||||
import SpecHelper
|
import SpecHelper
|
||||||
@@ -1177,10 +1180,11 @@ spec actualPgVersion withConfig = withConfig baseCfg $ do
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
it "filters, orders and limits aliased embeded entities using the target name" $
|
it "filters, orders and limits aliased embeded entities using the target name" $ do
|
||||||
|
let pgrstVer = "PostgRESTv" <> BS.filter (/= ' ') prettyVersion
|
||||||
get "/projects?id=eq.1&select=id, name, the_tasks:tasks(id, name)&tasks.name=like.Code*&tasks.order=name.asc&tasks.limit=1" `shouldRespondWith`
|
get "/projects?id=eq.1&select=id, name, the_tasks:tasks(id, name)&tasks.name=like.Code*&tasks.order=name.asc&tasks.limit=1" `shouldRespondWith`
|
||||||
[json|[{"id":1,"name":"Windows 7","the_tasks":[{"id":2,"name":"Code w7"}]}]|]
|
[json|[{"id":1,"name":"Windows 7","the_tasks":[{"id":2,"name":"Code w7"}]}]|]
|
||||||
{ matchHeaders = ["Warning" <:> "299 PostgRESTv15(pre-release) \"Embedded resource was referenced by relation name even though it has an alias. This is deprecated and will stop working in a future release. Update `tasks` to `the_tasks` in query string filters, orders or limits.\""] }
|
{ matchHeaders = ["Warning" <:> ("299 " <> pgrstVer <> " \"Embedded resource was referenced by relation name even though it has an alias. This is deprecated and will stop working in a future release. Update `tasks` to `the_tasks` in query string filters, orders or limits.\"")] }
|
||||||
|
|
||||||
|
|
||||||
describe "Accept headers" $ do
|
describe "Accept headers" $ do
|
||||||
|
|||||||
Reference in New Issue
Block a user