PostgeSQL is a leading open-source SQL database server.
Other Activity This Week
- Add support for tab-completion of type arguments in \df, \do
Tom Lane: Oversight in commit a3027e1e7.
- Allow TRUNCATE command to truncate foreign tables
Fujii Masao: This commit introduces new foreign data wrapper API for TRUNCATE.
- Speedup ScalarArrayOpExpr evaluation
David Rowley: ScalarArrayOpExprs with "useOr=true" and a set of Consts on the righthand side have traditionally been evaluated by using a linear search over the array.
- Optionally prefetch referenced data in recovery
Thomas Munro: Introduce a new GUC recovery_prefetch, disabled by default.
- Add circular WAL decoding buffer
Thomas Munro: Teach xlogreader.c to decode its output into a circular buffer, to support optimizations based on looking ahead.
- XLogReadRecord() works as before, consuming records one by one, and allowing them to be examined via the traditional XLogRecGetXXX() macros.
- An alternative new interface XLogNextRecord() is added that returns pointers to DecodedXLogRecord structs that can be examined directly.
- XLogReadAhead() provides a second cursor that lets you see further ahead, as long as data is available and there is enough space in the decoding buffer.
- Cleanup partition pruning step generation
David Rowley: There was some code in gen_prune_steps_from_opexps that needlessly checked a list was not empty when it clearly had to contain at least one item.
- Allow psql's \df and \do commands to specify argument types
Tom Lane: When dealing with overloaded function or operator names, having to look through a long list of matches is tedious.
- Teach VACUUM to bypass unnecessary index vacuuming
Peter Geoghegan: VACUUM has never needed to call ambulkdelete() for each index in cases where there are precisely zero TIDs in its dead_tuples array by the end of its first pass over the heap (also its only pass over the heap in this scenario).
- SQL-standard function body
Peter Eisentraut: This adds support for writing CREATE FUNCTION and CREATE PROCEDURE statements for language SQL with a function body that conforms to the SQL standard and is portable to other implementations.
Instead of the PostgreSQL-specific AS $$ string literal $$ syntax, this allows writing out the SQL statements making up the body unquoted, either as a single statement:
CREATE FUNCTION add(a integer, b integer) RETURNS integer LANGUAGE SQL RETURN a + b;
or as a block
CREATE PROCEDURE insert_data(a integer, b integer) LANGUAGE SQL BEGIN ATOMIC INSERT INTO tbl VALUES (a); INSERT INTO tbl VALUES (b); END;
The function body is parsed at function definition time and stored as expression nodes in a new pg_proc column prosqlbody.
- Add wraparound failsafe to VACUUM.
Peter Geoghegan: Add a failsafe mechanism that is triggered by VACUUM when it notices that the table's relfrozenxid and/or relminmxid are dangerously far in the past.
- Remove channel binding requirement from clientcert=verify-full test
Tom Lane: This fails on older OpenSSL versions that lack channel binding support.
- Don't add non-existent pages to bitmap from BRIN
Tomas Vondra: The code in bringetbitmap() simply added the whole matching page range to the TID bitmap, as determined by pages_per_range, even if some of the pages were beyond the end of the heap.
- libpq: Set Server Name Indication (SNI) for SSL connections
Peter Eisentraut: By default, have libpq set the TLS extension "Server Name Indication" (SNI).
This allows an SNI-aware SSL proxy to route connections.
- Add sortsupport for gist_btree opclasses, for faster index builds
Heikki Linnakangas: Commit 16fa9b2b30 introduced a faster way to build GiST indexes, by sorting all the data.
- Add some information about authenticated identity via log_connections
Michael Paquier: The "authenticated identity" is the string used by an authentication method to identify a particular user.
- Postpone some stuff out of ExecInitModifyTable
Tom Lane: Arrange to do some things on-demand, rather than immediately during executor startup, because there's a fair chance of never having to do them at all:
- Don't open result relations' indexes until needed.
- Don't initialize partition tuple routing, nor the child-to-root tuple conversion map, until needed.
This wins in UPDATEs on partitioned tables when only some of the partitions will actually receive updates; with larger partition counts the savings is quite noticeable.
- psql: Show all query results by default
Peter Eisentraut: Previously, psql printed only the last result if a command string returned multiple result sets.
- pgbench: Function to generate random permutations
Dean Rasheed: This adds a new function, permute(), that generates pseudorandom permutations of arbitrary sizes.
- Change return type of EXTRACT to numeric
Peter Eisentraut: The previous implementation of EXTRACT mapped internally to date_part(), which returned type double precision (since it was implemented long before the numeric type existed).
- Add function to log the memory contexts of specified backend process
Fujii Masao: Commit 3e98c0bafb added pg_backend_memory_contexts view to display the memory contexts of the backend process.
- Allow pgoutput to send logical decoding messages
Amit Kapila: The output plugin accepts a new parameter (messages) that controls if logical decoding messages are written into the replication stream.
- Fix confusion in SP-GiST between attribute type and leaf storage type
Tom Lane: According to the documentation, the attType passed to the opclass config function (and also relied on by the core code) is the type of the heap column or expression being indexed.
Most Popular In The Past Month
- Implement pipeline mode in libpq
Alvaro Herrera: Pipeline mode in libpq lets an application avoid the Sync messages in the FE/BE protocol that are implicit in the old libpq API after each query.
- Add DECLARE STATEMENT command to ECPG
Michael Meskes: This command declares a SQL identifier for a SQL statement to be used in other embedded SQL statements.
- BRIN bloom indexes
Tomas Vondra: Adds a BRIN opclass using a Bloom filter to summarize the range.
- Add date_bin function
Peter Eisentraut: Similar to date_trunc, but allows binning by an arbitrary interval rather than just full units.
- BRIN minmax-multi indexes
Tomas Vondra: Adds BRIN opclasses similar to the existing minmax, except that instead of summarizing the page range into a single [min,max] range, the summary consists of multiple ranges and/or points, allowing gaps.
- Implement GROUP BY DISTINCT
Tomas Vondra: With grouping sets, it's possible that some of the grouping sets are duplicate.
- Allow configurable LZ4 TOAST compression
Robert Haas: There is now a per-column COMPRESSION option which can be set to pglz (the default, and the only option in up until now) or lz4.
- Set libcrypto callbacks for all connection threads in libpq
Michael Paquier: Based on an analysis of the OpenSSL code with Jacob, moving to EVP for the cryptohash computations makes necessary the setup of the libcrypto callbacks that were getting set only for SSL connections, but not for connections without SSL.
- Bring configure support for LZ4 up to snuff
Tom Lane: It's not okay to just shove the pkg_config results right into our build flags, for a couple different reasons:
- This fails to maintain the separation between CPPFLAGS and CFLAGS, as well as that between LDFLAGS and LIBS.
- Add support for --extension in pg_dump
Michael Paquier: When specified, only extensions matching the given pattern are included in dumps.