All Versions
37
Latest Version
Avg Release Cycle
105 days
Latest Release
760 days ago
Changelog History
Page 1
Changelog History
Page 1
-
v10.0.0 Changes
August 18, 2022➕ Added
- #1933, #2109, Add a minimal health check endpoint - @steve-chavez
- For enabling this, the
admin-server-port
config must be set explictly - A
<host>:<admin_server_port>/live
endpoint is available for checking if postgrest is running on its port/socket. 200 OK = alive, 503 = dead. - A
<host>:<admin_server_port>/ready
endpoint is available for checking a correct internal state(the database connection plus the schema cache). 200 OK = ready, 503 = not ready.
- For enabling this, the
- #1988, Add the current user to the request log on stdout - @DavidLindbom, @wolfgangwalther
- #1823, Add the ability to run postgrest without any configuration. - @wolfgangwalther
- #1991, Add the ability to run without
db-uri
using libpq's PG environment variables to connect. - @wolfgangwalther - #1769, Add the ability to run without
db-schemas
, defaulting todb-schemas=public
. - @wolfgangwalther - #1689, Add the ability to run without
db-anon-role
disabling anonymous access. - @wolfgangwalther
- #1991, Add the ability to run without
- #1543, Allow access to fields of composite types in select=, order= and filters through JSON operators -> and ->>. - @wolfgangwalther
- #2075, Allow access to array items in ?select=, ?order= and filters through JSON operators -> and ->>. - @wolfgangwalther
- #2156, #2211, Allow applying
limit/offset
to UPDATE/DELETE to only affect a subset of rows - @steve-chavez- It requires an explicit
order
on a unique column(s)
- It requires an explicit
- #1917, Add error codes with the
"PGRST"
prefix to the error response body to differentiate PostgREST errors from PostgreSQL errors - @laurenceisla - #1917, Normalize the error response body by always having the
detail
andhint
error fields with anull
value if they are empty - @laurenceisla - #2176, Errors raised with
SQLSTATE
now include the message and the code in the response body - @laurenceisla - #2236, Support POSIX regular expression operators for row filtering - @enote-kane
- #2202, Allow returning XML from RPCs - @fjf2002
- #2268, Allow returning XML from single-column queries - @fjf2002
- #2300, RPC POST for function w/single unnamed XML param #2300 - @fjf2002
- #1564, Allow geojson output by specifying the
Accept: application/geo+json
media type - @steve-chavez- Requires postgis >= 3.0
- Works for GET, RPC, POST/PATCH/DELETE with
Prefer: return=representation
. - Resource embedding works and the embedded rows will go into the
properties
key - In case of multiple geometries in the same table, you can choose which one will go into the
geometry
key with the usual?select
query parameter.
- #1082, Add security definitions to the OpenAPI output - @laurenceisla
- #2378, Support http OPTIONS method on RPC and root path - @steve-chavez
- #2354, Allow getting the EXPLAIN plan of a request by using the
Accept: application/vnd.pgrst.plan
header - @steve-chavez- Only allowed if the
db-plan-enabled
config is set to true - Can generate the plan for different media types using the
for
parameter:Accept: application/vnd.pgrst.plan; for="application/vnd.pgrst.object"
- Different options for the plan can be used with the
options
parameter:Accept: application/vnd.pgrst.plan; options=analyze|verbose|settings|buffers|wal
- The plan can be obtained in text or json by using different media type suffixes:
Accept: application/vnd.pgrst.plan+text
andAccept: application/vnd.pgrst.plan+json
.
- Only allowed if the
- #2144, Support computed relationships which allow extending and overriding relationships for resource embedding - @steve-chavez, @wolfgangwalther
- #1984, Detect one-to-one relationships for resource embedding - @steve-chavez
- Detected when there's a foreign key with a unique constraint or when a foreign key is also a primary key
🛠 Fixed
- #2058, Return 204 No Content without Content-Type for PUT - @wolfgangwalther
- #2107, Clarify error for failed schema cache load. - @steve-chavez
- From
Database connection lost. Retrying the connection
toCould not query the database for the schema cache. Retrying.
- From
- #1771, Fix silently ignoring filter on a non-existent embedded resource - @steve-chavez
- #2152, Remove functions, which are uncallable because of unnamend arguments from schema cache and OpenAPI output. - @wolfgangwalther
- #2145, Fix accessing json array fields with -> and ->> in ?select= and ?order=. - @wolfgangwalther
- #2155, Ignore
max-rows
on POST, PATCH, PUT and DELETE - @steve-chavez - #2254, Fix inferring a foreign key column as a primary key column on views - @steve-chavez
- #2070, Restrict generated many-to-many relationships - @steve-chavez
- Only adds many-to-many relationships when: a table has FKs to two other tables and these FK columns are part of the table's PK columns.
- #2278, Allow casting to types with underscores and numbers(e.g.
select=oid_array::_int4
) - @steve-chavez - #2277, #2238, #1643, Prevent views from breaking one-to-many/many-to-one embeds when using column or FK as target - @steve-chavez
- When using a column or FK as target for embedding(
/tbl?select=*,col-or-fk(*)
), only tables are now detected and views are not. - You can still use a column or an inferred FK on a view to embed a table(
/view?select=*,col-or-fk(*)
)
- When using a column or FK as target for embedding(
- #2317, Increase the
db-pool-timeout
to 1 hour to prevent frequent high connection latency - @steve-chavez - #2341, The search path now correctly identifies schemas with uppercase and special characters in their names (regression) - @laurenceisla
- #2364, "404 Not Found" on nested routes and "405 Method Not Allowed" errors no longer start an empty database transaction - @steve-chavez
- #2342, Fix inaccurate result count when an inner embed was selected after a normal embed in the query string - @laurenceisla
- #2376, OPTIONS requests no longer start an empty database transaction - @steve-chavez
- #2395, Allow using columns with dollar sign($) without double quoting in filters and
select
- @steve-chavez - #2410, Fix loop crash error on startup in Postgres 15 beta 3. Log: "UNION types \"char\" and text cannot be matched". - @yevon
- #2397, Fix race conditions managing database connection helper - @robx
- #2269, Allow
limit=0
in the request query to return an empty array - @gautam1168, @laurenceisla - #2401, Ensure database connections can't outlive SIGUSR1 - @robx
🔄 Changed
- #2001, Return 204 No Content without Content-Type for RPCs returning VOID - @wolfgangwalther
- Previously, those RPCs would return "null" as a body with Content-Type: application/json.
- #2156,
limit/offset
now limits the affected rows on UPDATE/DELETE - @steve-chavez- Previously,
limit/offset
only limited the returned rows but not the actual updated rows
- Previously,
- #2155,
max-rows
is no longer applied on POST/PATCH/PUT/DELETE returned rows - @steve-chavez- This was misleading because the affected rows were not really affected by
max-rows
, only the returned rows were limited
- This was misleading because the affected rows were not really affected by
- #2070, Restrict generated many-to-many relationships - @steve-chavez
- A primary key that contains the foreign key columns is now needed for generating many-to-many relationships.
- #2277, Views now are not detected when embedding using the column or FK as target (
/view?select=*,column(*)
) - @steve-chavez- This embedding form was easily made ambiguous whenever a new view was added.
- You can use computed relationships to keep this embedding form working
- #2312, Using
Prefer: return=representation
no longer returns aLocation
header - @laurenceisla - #1984, For the cases where one to one relationships are detected, json objects will be returned instead of json arrays of length 1
- If you wish to override this behavior, you can use computed relationships to return arrays again
- #1933, #2109, Add a minimal health check endpoint - @steve-chavez
-
v9.0.1 Changes
June 03, 2022🛠 Fixed
- #2165, Fix json/jsonb columns should not have type in OpenAPI spec - @clrnd
- ⏪ #2020, Execute deferred constraint triggers when using
Prefer: tx=rollback
- @wolfgangwalther - #2077, Fix
is
not working with upper or mixed case values likeNULL, TrUe, FaLsE
- @steve-chavez - 0️⃣ #2024, Fix schema cache loading when views with XMLTABLE and DEFAULT are present - @wolfgangwalther
- #1724, Fix wrong CORS header Authentication -> Authorization - @wolfgangwalther
- 🔧 #2120, Fix reading database configuration properly when
=
is present in value - @wolfgangwalther - 🚚 #2135, Remove trigger functions from schema cache and OpenAPI output, because they can't be called directly anyway. - @wolfgangwalther
- 🚚 #2101, Remove aggregates, procedures and window functions from the schema cache and OpenAPI output. - @wolfgangwalther
- #2153, Fix --dump-schema running with a wrong PG version. - @wolfgangwalther
- #2042, Keep working when EMFILE(Too many open files) is reached. - @steve-chavez
- #2147, Ignore
Content-Type
headers forGET
requests when calling RPCs. - @laurenceisla- Previously,
GET
without parameters, but withContent-Type: text/plain
orContent-Type: application/octet-stream
would fail with404 Not Found
, even if a function without arguments was available.
- Previously,
- #2239, Fix misleading disambiguation error where the content of the
relationship
key looks like valid syntax - @laurenceisla - 🐎 #2294, Disable parallel GC for better performance on higher core CPUs - @steve-chavez
- #1076, Fix using CPU while idle - @steve-chavez
-
v9.0.0 Changes
November 25, 2021➕ Added
- #1783, Include partitioned tables into the schema cache. Allows embedding, UPSERT, INSERT with Location response, OPTIONS request and OpenAPI support for partitioned tables - @laurenceisla
- #1878, Add Retry-After hint header when in recovery mode - @gautam1168
- #1735, Allow calling function with single unnamed param through RPC POST. - @steve-chavez
- Enables calling a function with a single json parameter without using
Prefer: params=single-object
- Enables uploading bytea to a function with
Content-Type: application/octet-stream
- Enables uploading raw text to a function with
Content-Type: text/plain
- Enables calling a function with a single json parameter without using
- #1938, Allow escaping inside double quotes with a backslash, e.g.
?col=in.("Double\"Quote")
,?col=in.("Back\\slash")
- @steve-chavez - #1075, Allow filtering top-level resource based on embedded resources filters. This is enabled by adding
!inner
to the embedded resource, e.g./projects?select=*,clients!inner(*)&clients.id=eq.12
- @steve-chavez, @Iced-Sun - #1857, Make GUC names for headers, cookies and jwt claims compatible with PostgreSQL v14 - @laurenceisla, @robertsosinski
- Getting the value for a header GUC on PostgreSQL 14 is done using
current_setting('request.headers')::json->>'name-of-header'
and in a similar way forrequest.cookies
andrequest.jwt.claims
- PostgreSQL versions below 14 can opt in to the new JSON GUCs by setting the
db-use-legacy-gucs
config option to false (true by default)
- Getting the value for a header GUC on PostgreSQL 14 is done using
- #1988, Allow specifying
unknown
for theis
operator - @steve-chavez - #2031, Improve error message for ambiguous embedding and add a relevant hint that includes unambiguous embedding suggestions - @laurenceisla
🛠 Fixed
- #1871, Fix OpenAPI missing default values for String types and identify Array types as "array" instead of "string" - @laurenceisla
- #1930, Fix RPC return type handling for
RETURNS TABLE
with a single column. Regression of #1615. - @wolfgangwalther - #1938, Fix using single double quotes(
"
) and backslashes(/
) as values on the "in" operator - @steve-chavez - #1992, Fix schema cache query failing with standard_conforming_strings = off - @wolfgangwalther
🔄 Changed
- #1949, Drop support for embedding hints used with '.'(
select=projects.client_id(*)
), '!' should be used instead(select=projects!client_id(*)
) - @steve-chavez - #1783, Partitions (created using
PARTITION OF
) are no longer included in the schema cache. - @laurenceisla - #2038, Dropped support for PostgreSQL 9.5 - @wolfgangwalther
-
v8.0.0 Changes
July 25, 2021➕ Added
- #1525, Allow http status override through response.status guc - @steve-chavez
- #1512, Allow schema cache reloading with NOTIFY - @steve-chavez
- #1119, Allow config file reloading with SIGUSR2 - @steve-chavez
- #1558, Allow 'Bearer' with and without capitalization as authentication schema - @wolfgangwalther
- #1470, Allow calling RPC with variadic argument by passing repeated params - @wolfgangwalther
- #1559, No downtime when reloading the schema cache with SIGUSR1 - @steve-chavez
- #504, Add
log-level
config option. The admitted levels are: crit, error, warn and info - @steve-chavez - #1607, Enable embedding through multiple views recursively - @wolfgangwalther
- #1598, Allow rollback of the transaction with Prefer tx=rollback - @wolfgangwalther
- #1633, Enable prepared statements for GET filters. When behind a connection pooler, you can disable preparing with
db-prepared-statements=false
- This increases throughput by around 30% for simple GET queries(no embedding, with filters applied).
- #1729, #1760, Get configuration parameters from the db and allow reloading config with NOTIFY - @steve-chavez
- #1824, Allow OPTIONS to generate certain HTTP methods for a DB view - @laurenceisla
- #1872, Show timestamps in startup/worker logs - @steve-chavez
- #1881, Add
openapi-mode
config option that allows ignoring roles privileges when showing the OpenAPI output - @steve-chavez - CLI options(for debugging):
- #1678, Add --dump-config CLI option that prints loaded config and exits - @wolfgangwalther
- #1691, Add --example CLI option to show example config file - @wolfgangwalther
- #1697, #1723, Add --dump-schema CLI option for debugging purposes - @monacoremo, @wolfgangwalther
- #1794, (Experimental) Add
request.spec
GUC for db-root-spec - @steve-chavez
🛠 Fixed
- #1592, Removed single column restriction to allow composite foreign keys in join tables - @goteguru
- #1530, Fix how the PostgREST version is shown in the help text when the
.git
directory is not available - @monacoremo - #1094, Fix expired JWTs starting an empty transaction on the db - @steve-chavez
- #1162, Fix location header for POST request with select= without PK - @wolfgangwalther
- #1585, Fix error messages on connection failure for localized postgres on Windows - @wolfgangwalther
- #1636, Fix
application/octet-stream
appendingcharset=utf-8
- @steve-chavez - #1469, #1638 Fix overloading of functions with unnamed arguments - @wolfgangwalther
- #1560, Return 405 Method not Allowed for GET of volatile RPC instead of 500 - @wolfgangwalther
- #1584, Fix RPC return type handling and embedding for domains with composite base type (#1615) - @wolfgangwalther
- #1608, #1635, Fix embedding through views that have COALESCE with subselect - @wolfgangwalther
- #1572, Fix parsing of boolean config values for Docker environment variables, now it accepts double quoted truth values ("true", "false") and numbers("1", "0") - @wolfgangwalther
- #1624, Fix using
app.settings.xxx
config options in Docker, now they can be used asPGRST_APP_SETTINGS_xxx
- @wolfgangwalther - #1814, Fix panic when attempting to run with unix socket on non-unix host and properly close unix domain socket on exit - @monacoremo
- #1825, Disregard internal junction(in non-exposed schema) when embedding - @steve-chavez
- #1846, Fix requests for overloaded functions from html forms to no longer hang (#1848) - @laurenceisla
- #1858, Add a hint and clarification to the no relationship found error - @laurenceisla
- #1841, Show comprehensive error when an RPC is not found in a stale schema cache - @laurenceisla
- #1875, Fix Location headers in headers only representation for null PK inserts on views - @laurenceisla
🔄 Changed
- #1522, #1528, #1535, Docker images are now built from scratch based on a the static PostgREST executable (#1494) and with Nix instead of a
Dockerfile
. This reduces the compressed image size from over 30mb to about 4mb - @monacoremo - #1461, Location header for POST request is only included when PK is available on the table - @wolfgangwalther
- #1560, Volatile RPC called with GET now returns 405 Method not Allowed instead of 500 - @wolfgangwalther
- #1584, #1849 Functions that declare
returns composite_type
no longer return a single object array by default, only functions withreturns setof composite_type
return an array of objects - @wolfgangwalther - #1604, Change the default logging level to
log-level=error
. Only requests with a status greater or equal than 500 will be logged. If you wish to go back to the previous behaviour and log all the requests, uselog-level=info
- @steve-chavez- Because currently there's no buffering for logging, defaulting to the
error
level(minimum logging) increases throughput by around 15% for simple GET queries(no embedding, with filters applied).
- Because currently there's no buffering for logging, defaulting to the
- #1617, Dropped support for PostgreSQL 9.4 - @wolfgangwalther
- #1679, Renamed config settings with fallback aliases. e.g.
max-rows
is nowdb-max-rows
, butmax-rows
is still accepted - @wolfgangwalther - #1656, Allow
Prefer=headers-only
on POST requests and change default tominimal
(#1813) - @laurenceisla - #1854, Dropped undocumented support for gzip compression (which was surprisingly slow and easily enabled by mistake). In some use-cases this makes Postgres up to 3x faster - @aljungberg
- #1872, Send startup/worker logs to stderr to differentiate from access logs on stdout - @steve-chavez
-
v7.0.1 Changes
May 18, 2020🛠 Fixed
- #1473, Fix overloaded computed columns on RPC - @wolfgangwalther
- #1471, Fix POST, PATCH, DELETE with ?select= and return=minimal and PATCH with empty body - @wolfgangwalther
- #1500, Fix missing
openapi-server-proxy-uri
config option - @steve-chavez - #1508, Fix
Content-Profile
not working for POST RPC - @steve-chavez - #1452, Fix PUT restriction for all columns - @steve-chavez
-
v7.0.0 Changes
April 03, 2020➕ Added
- #1417,
Accept: application/vnd.pgrst.object+json
behavior is now enforced for POST/PATCH/DELETE regardless ofPrefer: return=representation/minimal
- @dwagin - 👍 #1415, Add support for user defined socket permission via
server-unix-socket-mode
config option - @Dansvidania - 👍 #1383, Add support for HEAD request - @steve-chavez
- 👍 #1378, Add support for
Prefer: count=planned
andPrefer: count=estimated
on GET /table - @steve-chavez, @LorenzHenk - 👍 #1327, Add support for optional query parameter
on_conflict
to upsert with specified keys for POST - @ykst - #1430, Allow specifying the foreign key constraint name(
/source?select=fk_constraint(*)
) to disambiguate an embedding - @steve-chavez - #1168, Allow access to the
Authorization
header through therequest.header.authorization
GUC - @steve-chavez - #1435, Add
request.method
andrequest.path
GUCs - @steve-chavez - #1088, Allow adding headers to GET/POST/PATCH/PUT/DELETE responses through the
response.headers
GUC - @steve-chavez - #1427, Allow overriding provided headers(Location, Content-Type, etc) through the
response.headers
GUC - @steve-chavez - #1450, Allow multiple schemas to be exposed in one instance. The schema to use can be selected through the headers
Accept-Profile
for GET/HEAD andContent-Profile
for POST/PATCH/PUT/DELETE - @steve-chavez, @mahmoudkassem
🛠 Fixed
- #1301, Fix self join resource embedding on PATCH - @herulume, @steve-chavez
- #1389, Fix many to many resource embedding on RPC/PATCH - @steve-chavez
- #1355, Allow PATCH/DELETE without
return=minimal
on tables with no select privileges - @steve-chavez - #1361, Fix embedding a VIEW when its source foreign key is UNIQUE - @bwbroersma
🔄 Changed
- #1385, bulk RPC call now should be done by specifying a
Prefer: params=multiple-objects
header - @steve-chavez - #1401, resource embedding now outputs an error when multiple relationships between two tables are found - @steve-chavez
- 0️⃣ #1423, default Unix Socket file mode from 755 to 660 - @dwagin
- 🚚 #1430, Remove embedding with duck typed column names
GET /projects?select=client(*)
- @steve-chavez- You can rename the foreign key to
client
to make this request work in the new version:alter table projects rename constraint projects_client_id_fkey to client
- You can rename the foreign key to
- #1413, Change
server-proxy-uri
config option toopenapi-server-proxy-uri
- @steve-chavez
- #1417,
-
v6.0.2 Changes
August 22, 2019🛠 Fixed
- #1369, Change
raw-media-types
to accept a string of comma separated MIME types - @Dansvidania - #1368, Fix long column descriptions being truncated at 63 characters in PostgreSQL 12 - @amedeedaboville
- 0️⃣ #1348, Go back to converting plus "+" to space " " in querystrings by default - @steve-chavez
🗄 Deprecated
- #1369, Change
-
v6.0.1 Changes
July 30, 2019➕ Added
- #1349, Add user defined raw output media types via
raw-media-types
config option - @Dansvidania - #1243, Add websearch_to_tsquery support - @herulume
🛠 Fixed
- ✅ #1336, Error when testing on Chrome/Firefox: text/html requested but a single column was not selected - @Dansvidania
- 🏁 #1334, Unable to compile v6.0.0 on windows - @steve-chavez
- #1349, Add user defined raw output media types via
-
v6.0.0 Changes
June 21, 2019➕ Added
- 👍 #1186, Add support for user defined unix socket via
server-unix-socket
config option - @Dansvidania - 🛰 #690, Add
?columns
query parameter for faster bulk inserts, also ignores unspecified json keys in a payload - @steve-chavez - 👍 #1239, Add support for resource embedding on materialized views - @vitorbaptista
- 👍 #1264, Add support for bulk RPC call - @steve-chavez
- ⏱ #1278, Add db-pool-timeout config option - @Qu4tro
- #1285, Abort on wrong database password - @Qu4tro
- #790, Allow override of OpenAPI spec through
root-spec
config option - @steve-chavez - #1308, Accept
text/plain
andtext/html
for raw output - @steve-chavez
🛠 Fixed
- #1223, Fix incorrect OpenAPI externalDocs url - @steve-chavez
- #1221, Fix embedding other resources when having a self join - @steve-chavez
- #1242, Fix embedding a view having a select in a where - @steve-chavez
- #1238, Fix PostgreSQL to OpenAPI type mappings for numeric and character types - @fpusch
- #1265, Fix query generated on bulk upsert with an empty array - @Qu4tro
- 0️⃣ #1273, Fix RPC ignoring unknown arguments by default - @steve-chavez
- #1257, Fix incorrect status when a PATCH request doesn't find rows to change - @Qu4tro
🔄 Changed
- 0️⃣ #1288, Change server-host default of 127.0.0.1 to !4
🗄 Deprecated
- 🗄 #1288, Deprecate
.
symbol for disambiguating resource embedding(added in #918). '+' should be used instead. Though '+' is url safe, certain clients might need to encode it to '%2B'.
✂ Removed
- 🚚 #1288, Removed support for schema reloading with SIGHUP, SIGUSR1 should be used instead - @steve-chavez
- 👍 #1186, Add support for user defined unix socket via
-
v5.2.0 Changes
December 12, 2018➕ Added
- 📜 #1205, Add support for parsing JSON Web Key Sets - @russelldavies
- 👍 #1203, Add support for reading db-uri from a separate file - @zhoufeng1989
- #1200, Add db-extra-search-path config for adding schemas to the search_path, solves issues related to extensions created on the public schema - @steve-chavez
- #1219, Add ability to quote column names on filters - @steve-chavez
🛠 Fixed
- #1182, Fix embedding on views with composite pks - @steve-chavez
- #1180, Fix embedding on views with subselects in pg10 - @steve-chavez
- #1197, Allow CORS for PUT - @bkylerussell
- #1181, Correctly qualify function argument of custom type in public schema - @steve-chavez
- #1008, Allow columns that contain spaces in filters - @steve-chavez