All Versions
37
Latest Version
Avg Release Cycle
105 days
Latest Release
760 days ago

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.
    • #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 to db-schemas=public. - @wolfgangwalther
      • #1689, Add the ability to run without db-anon-role disabling anonymous access. - @wolfgangwalther
    • #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)
    • #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 and hint error fields with a null 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 and Accept: application/vnd.pgrst.plan+json.
    • #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 to Could not query the database for the schema cache. Retrying.
    • #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(*))
    • #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
    • #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
    • #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 a Location 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
  • 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 like NULL, 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 for GET requests when calling RPCs. - @laurenceisla
      • Previously, GET without parameters, but with Content-Type: text/plain or Content-Type: application/octet-stream would fail with 404 Not Found, even if a function without arguments was available.
    • #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
    • #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 for request.cookies and request.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)
    • #1988, Allow specifying unknown for the is 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 appending charset=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 as PGRST_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 with returns 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, use log-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).
    • #1617, Dropped support for PostgreSQL 9.4 - @wolfgangwalther
    • #1679, Renamed config settings with fallback aliases. e.g. max-rows is now db-max-rows, but max-rows is still accepted - @wolfgangwalther
    • #1656, Allow Prefer=headers-only on POST requests and change default to minimal (#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

  • v7.0.0 Changes

    April 03, 2020

    ➕ Added

    • #1417, Accept: application/vnd.pgrst.object+json behavior is now enforced for POST/PATCH/DELETE regardless of Prefer: 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 and Prefer: 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 the request.header.authorization GUC - @steve-chavez
    • #1435, Add request.method and request.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 and Content-Profile for POST/PATCH/PUT/DELETE - @steve-chavez, @mahmoudkassem

    🛠 Fixed

    🔄 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
    • #1413, Change server-proxy-uri config option to openapi-server-proxy-uri - @steve-chavez
  • 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

    • 🗄 #1348, Deprecate . symbol for disambiguating resource embedding(added in #918). The url-safe '!' should be used instead. We refrained from using + as part of our syntax because it conflicts with some http clients and proxies.
  • v6.0.1 Changes

    July 30, 2019

    ➕ Added

    🛠 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
  • v6.0.0 Changes

    June 21, 2019

    ➕ Added

    🛠 Fixed

    🔄 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
  • 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