On 2026-Nov-01, Jonathan S. Katz wrote: > ### Developer experience and performance enhancements > > PostgreSQL 19 adds [`INSERT ... ON CONFLICT DO > SELECT`](https://www.postgresql.org/docs/19/sql-insert.html#SQL-ON-CONFLICT), > which lets the `RETURNING` clause return existing rows that conflict with an > insert, simplifying the common "get or create" pattern. > [`COPY`](https://www.postgresql.org/docs/19/sql-copy.html) can now output data > as JSON, including as a single JSON array, and the > [SQL/JSON path > language](https://www.postgresql.org/docs/19/functions-json.html#FUNCTIONS-SQLJSON-PATH-OPERATORS) > adds string methods such as `lower()`, `upper()`, `replace()`, `split_part()`, > and `btrim()`. Additionally, the `lead()`, `lag()`, `first_value()`, > `last_value()`, and `nth_value()` [window > functions](https://www.postgresql.org/docs/19/functions-window.html) > can now skip `NULL` values using `IGNORE NULLS`. The > [`random()`](https://www.postgresql.org/docs/19/functions-math.html#FUNCTIONS-MATH-RANDOM-TABLE) > function can now also generate random dates > and timestamps within a range.
The link next to random() goes to the random() for numeric types, but the random for dates and timestamps is documented at https://www.postgresql.org/docs/19/functions-datetime.html#FUNCTIONS-DATETIME-TABLE -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
