PostgreSQL 歷史版本列表 Page4

最新版本 Electron 25.5.0 (64-bit)

PostgreSQL 歷史版本列表

PostgreSQL 是一個跨平台的對象關係型數據庫管理系統,自 1995 年首次發布以來,已經成長為國際知名的解決方案,可幫助管理員輕鬆創建,組織,管理和部署各種形狀和大小的項目數據庫。這當然包括對運行 SQL 查詢,觸發管理,屬性管理以及其他企業級數據庫管理系統當前正在使用的所有功能的全面控制。為使日常管理多個作業和項目組件的管理員更容易訪問,PostgreSQL 符合大多數 SQL 2008... PostgreSQL 軟體介紹

PostgreSQL (32-bit)PostgreSQL (64-bit)


SnapDownloader 1.14.0 (64-bit) 查看版本資訊

更新時間:2022-08-08
更新細節:

What's new in this version:

New:
- Added GIF output format for single video searches
- Added sorting and pagination to the “Completed” downloads list. We’ll add this feature to the “Queued” list in the next update.
- You can change the browser type for the in-app browser. This comes in handy when a website blocks SnapDownloader’s browser. Using this feature, you can change the browser type and check if the website lets you access it.
- Added timestamp for videos in playlists, channels, and bulk searches
- Added pausing/resuming functionality to queued downloads. Using this feature, you can pause one or more queued videos to stop them from being downloaded automatically when their turn arrives.
- New sites: Podchaser, Likee, Iwara, Icareus, Gronkh, GoodGame, FIFA, DailyWire, Google Drive, The Mirror, @Scale, FreeTV, ixigua, kicker.de, Netverse, Play Suisse, Substack, ViMP, Fuyin, Livestream Fails, WeTV, TubeTuGraz, The Hole TV, RTVSLO, rtl.lu, Liputan6, Hytale, Detik, AcFun

Fixed:
- Fixed Instagram post and story downloader
- Added support for beta.crunchyroll.com
- Improved and fixed these sites: YouTube, Instagram, CBS.com, Netverse, Crunchyroll, Bilibili, Watch ESPN, CWTV, France Culture, Fox News, Naver, Radio France, TikTok, Vevo, Yahoo, Vimeo, Zee5

Balabolka 2.15.0.823 查看版本資訊

更新時間:2022-07-31
更新細節:

What's new in this version:

- Fixed the using of PROMT.One
- Updated the translation of subtitles

Balabolka 2.15.0.822 查看版本資訊

更新時間:2022-07-24
更新細節:

What's new in this version:

- Fixed small bugs
- Resources for Slovenian and Spanish languages were updated

Balabolka 2.15.0.821 查看版本資訊

更新時間:2022-07-04
更新細節:

What's new in this version:

- Fixed the using of Naver Text-To-Speech
- Updated the using of Yandex SpeechKit
- Resources for Bulgarian language were updated

Balabolka 2.15.0.820 查看版本資訊

更新時間:2022-06-26
更新細節:

What's new in this version:

- Added the new option for the Clipboard Watch
- Added the global hotkey to place cursor at the beginning of text
- Updated the using of Microsoft Azure Text-To-Speech

PostgreSQL 14.4 查看版本資訊

更新時間:2022-06-17
更新細節:

What's new in this version:

- This release contains a variety of fixes from 14.3. For information about new features in major release 14, see Section E.5.
- E.1.1. Migration to Version 14.4
- A dump/restore is not required for those running 14.X
- However, if you have any indexes that were created using the CONCURRENTLY option under 14.X, you should re-index them after updating. See the first changelog entry below.
- Also, if you are upgrading from a version earlier than 14.3, see Section E.2.

E.1.2. Changes:
- Prevent possible corruption of indexes created or rebuilt with the CONCURRENTLY option
- An optimization added in v14 caused CREATE INDEX ... CONCURRENTLY and REINDEX ... CONCURRENTLY to sometimes miss indexing rows that were updated during the index build. Revert that optimization. It is recommended that any indexes made with the CONCURRENTLY option be rebuilt after installing this update. (Alternatively, rebuild them without CONCURRENTLY.)
- Harden Memoize plan node against non-deterministic equality functions
- Memoize could crash if a data type's equality or hash functions gave inconsistent results across different calls. Throw a runtime error instead.
- Fix incorrect cost estimates for Memoize plans
- This mistake could lead to Memoize being used when it isn't really the best plan, or to very long executor startup times due to initializing an overly-large hash table for a Memoize node.
- Fix queries in which a “whole-row variable” references the result of a function that returns a domain over composite type
- Fix “variable not found in subplan target list” planner error when pulling up a sub-SELECT that's referenced in a GROUPING function
- Prevent pg_stat_get_subscription() from possibly returning an extra row containing garbage values
- Fix COPY FROM's error checking in the case where the database encoding is SQL_ASCII while the client's encoding is a multi-byte encoding
- This mistake could lead to false complaints of invalidly-encoded input data
- Avoid crashing if too many column aliases are attached to an XMLTABLE or JSON_TABLE construct
- When decompiling a view or rule, show a SELECT output column's AS "?column?" alias clause if it could be referenced elsewhere
- Previously, this auto-generated alias was always hidden; but there are corner cases where doing so results in a non-restorable view or rule definition.
- Report implicitly-created operator families to event triggers
- If CREATE OPERATOR CLASS results in the implicit creation of an operator family, that object was not reported to event triggers that should capture such events
- Fix control file updates made when a restartpoint is running during promotion of a standby server
- Previously, when the restartpoint completed it could incorrectly update the last-checkpoint fields of the control file, potentially leading to PANIC and failure to restart if the server crashes before the next normal checkpoint completes.
- Prevent triggering of standby's wal_receiver_timeout during logical replication of large transactions
- If a large transaction on the primary server sends no data to the standby (perhaps because no table it changes is published), it was possible for the standby to timeout. Fix that by ensuring we send keepalive messages periodically in such situations.
- Prevent open-file leak when reading an invalid timezone abbreviation file
- Such cases could result in harmless warning messages
- Allow custom server parameters to have short descriptions that are NULL
- Previously, although extensions could choose to create such settings, some code paths would crash while processing them
- Remove misguided SSL key file ownership check in libpq
- In the previous minor releases, we copied the server's permission checking rules for SSL private key files into libpq. But we should not have also copied the server's file-ownership check. While that works in normal use-cases, it can result in an unexpected failure for clients running as root, and perhaps in other cases.
- Ensure ecpg reports server connection loss sanely
- Misprocessing of a libpq-generated error result, such as a report of lost connection, would lead to printing “(null)” instead of a useful error message; or in older releases it would lead to a crash
- Prevent crash after server connection loss in pg_amcheck
- Misprocessing of a libpq-generated error result, such as a report of lost connection, would lead to a crash
- Adjust PL/Perl test case so it will work under Perl 5.36
- Avoid incorrectly using an out-of-date libldap_r library when multiple OpenLDAP installations are present while building PostgreSQL

PostgreSQL 14.4 (64-bit) 查看版本資訊

更新時間:2022-06-17
更新細節:

What's new in this version:

- This release contains a variety of fixes from 14.3. For information about new features in major release 14, see Section E.5.
- E.1.1. Migration to Version 14.4
- A dump/restore is not required for those running 14.X
- However, if you have any indexes that were created using the CONCURRENTLY option under 14.X, you should re-index them after updating. See the first changelog entry below.
- Also, if you are upgrading from a version earlier than 14.3, see Section E.2.

E.1.2. Changes:
- Prevent possible corruption of indexes created or rebuilt with the CONCURRENTLY option
- An optimization added in v14 caused CREATE INDEX ... CONCURRENTLY and REINDEX ... CONCURRENTLY to sometimes miss indexing rows that were updated during the index build. Revert that optimization. It is recommended that any indexes made with the CONCURRENTLY option be rebuilt after installing this update. (Alternatively, rebuild them without CONCURRENTLY.)
- Harden Memoize plan node against non-deterministic equality functions
- Memoize could crash if a data type's equality or hash functions gave inconsistent results across different calls. Throw a runtime error instead.
- Fix incorrect cost estimates for Memoize plans
- This mistake could lead to Memoize being used when it isn't really the best plan, or to very long executor startup times due to initializing an overly-large hash table for a Memoize node.
- Fix queries in which a “whole-row variable” references the result of a function that returns a domain over composite type
- Fix “variable not found in subplan target list” planner error when pulling up a sub-SELECT that's referenced in a GROUPING function
- Prevent pg_stat_get_subscription() from possibly returning an extra row containing garbage values
- Fix COPY FROM's error checking in the case where the database encoding is SQL_ASCII while the client's encoding is a multi-byte encoding
- This mistake could lead to false complaints of invalidly-encoded input data
- Avoid crashing if too many column aliases are attached to an XMLTABLE or JSON_TABLE construct
- When decompiling a view or rule, show a SELECT output column's AS "?column?" alias clause if it could be referenced elsewhere
- Previously, this auto-generated alias was always hidden; but there are corner cases where doing so results in a non-restorable view or rule definition.
- Report implicitly-created operator families to event triggers
- If CREATE OPERATOR CLASS results in the implicit creation of an operator family, that object was not reported to event triggers that should capture such events
- Fix control file updates made when a restartpoint is running during promotion of a standby server
- Previously, when the restartpoint completed it could incorrectly update the last-checkpoint fields of the control file, potentially leading to PANIC and failure to restart if the server crashes before the next normal checkpoint completes.
- Prevent triggering of standby's wal_receiver_timeout during logical replication of large transactions
- If a large transaction on the primary server sends no data to the standby (perhaps because no table it changes is published), it was possible for the standby to timeout. Fix that by ensuring we send keepalive messages periodically in such situations.
- Prevent open-file leak when reading an invalid timezone abbreviation file
- Such cases could result in harmless warning messages
- Allow custom server parameters to have short descriptions that are NULL
- Previously, although extensions could choose to create such settings, some code paths would crash while processing them
- Remove misguided SSL key file ownership check in libpq
- In the previous minor releases, we copied the server's permission checking rules for SSL private key files into libpq. But we should not have also copied the server's file-ownership check. While that works in normal use-cases, it can result in an unexpected failure for clients running as root, and perhaps in other cases.
- Ensure ecpg reports server connection loss sanely
- Misprocessing of a libpq-generated error result, such as a report of lost connection, would lead to printing “(null)” instead of a useful error message; or in older releases it would lead to a crash
- Prevent crash after server connection loss in pg_amcheck
- Misprocessing of a libpq-generated error result, such as a report of lost connection, would lead to a crash
- Adjust PL/Perl test case so it will work under Perl 5.36
- Avoid incorrectly using an out-of-date libldap_r library when multiple OpenLDAP installations are present while building PostgreSQL

PostgreSQL 12.11 查看版本資訊

更新時間:2022-05-13
更新細節:

What's new in this version:

Changed:
- Confine additional operations within “security restricted operation” sandboxes
- Autovacuum, CLUSTER, CREATE INDEX, REINDEX, REFRESH MATERIALIZED VIEW, and pg_amcheck activated the “security restricted operation” protection mechanism too late, or even not at all in some code paths. A user having permission to create non-temporary objects within a database could define an object that would execute arbitrary SQL code with superuser permissions the next time that autovacuum processed the object, or that some superuser ran one of the affected commands against it.
- The PostgreSQL Project thanks Alexander Lakhin for reporting this problem. (CVE-2022-1552)
- Fix default signature length for gist_ltree_ops indexes
- The default signature length (hash size) for GiST indexes on ltree columns was accidentally changed while upgrading that operator class to support operator class parameters. If any operations had been done on such an index without first upgrading the ltree extension to version 1.2, they were done assuming that the signature length was 28 bytes rather than the intended 8. This means it is very likely that such indexes are now corrupt. For safety we recommend re-indexing all GiST indexes on ltree columns after installing this update. (Note that GiST indexes on ltree[] columns, that is arrays of ltree, are not affected.)
- Stop using query-provided column aliases for the columns of whole-row variables that refer to plain tables
- The column names in tuples produced by a whole-row variable (such as tbl.* in contexts other than the top level of a SELECT list) are now always those of the associated named composite type, if there is one. We'd previously attempted to make them track any column aliases that had been applied to the FROM entry the variable refers to. But that's semantically dubious, because really then the output of the variable is not at all of the composite type it claims to be. Previous attempts to deal with that inconsistency had bad results up to and including storing unreadable data on disk, so just give up on the whole idea.
- In cases where it's important to be able to relabel such columns, a workaround is to introduce an extra level of sub-SELECT, so that the whole-row variable is referring to the sub-SELECT's output and not to a plain table. Then the variable is of type record to begin with and there's no issue.
- Fix incorrect roundoff when extracting epoch values from intervals
- The new numeric-based code for EXTRACT() failed to yield results equivalent to the old float-based code, as a result of accidentally truncating the DAYS_PER_YEAR value to an integer.
- Defend against pg_stat_get_replication_slot(NULL)
- This function should be marked strict in the catalog data, but it was not in v14, so add a run-time check instead.
- Fix incorrect output for types timestamptz and timetz in table_to_xmlschema() and allied functions (Renan Soares Lopes)
- The xmlschema output for these types included a malformed regular expression.
- Avoid core dump in parser for a VALUES clause with zero columns
- Fix planner failure when a Result plan node appears immediately underneath an Append node (Etsuro Fujita)
- Recently-added code to support asynchronous remote queries failed to handle this case, leading to crashes or errors about unrecognized node types.
- Fix planner failure if a query using SEARCH or CYCLE features contains a duplicate CTE name (Tom Lane, Kyotaro Horiguchi)
- When the name of the recursive WITH query is re-used within itself, the planner could crash or report odd errors such as “could not find attribute 2 in subquery targetlist”.
- Fix planner errors for GROUPING() constructs that reference outer query levels (Richard Guo, Tom Lane)
- Fix plan generation for index-only scans on indexes with both returnable and non-returnable columns
- The previous coding could try to read non-returnable columns in addition to the returnable ones. This was fairly harmless because it didn't actually do anything with the bogus values, but it fell foul of a recently-added error check that rejected such a plan.
- Avoid accessing a no-longer-pinned shared buffer while attempting to lock an outdated tuple during EvalPlanQual
- The code would touch the buffer a couple more times after releasing its pin. In theory another process could recycle the buffer (or more likely, try to defragment its free space) as soon as the pin is gone, probably leading to failure to find the newer version of the tuple.
- Fix query-lifespan memory leak in an IndexScan node that is performing reordering
- Fix ALTER FUNCTION to support changing a function's parallelism property and its SET-variable list in the same command
- The parallelism property change was lost if the same command also updated the function's SET clause.
- Tighten lookup of the index “owned by” a constraint
- Some code paths mistook the index depended on by a foreign key constraint for one owned by a unique or primary key constraint, resulting in odd errors during certain ALTER TABLE operations on tables having foreign key constraints.
- Fix bogus errors from attempts to alter system columns of tables
- The system should just tell you that you can't do it, but sometimes it would report “no owned sequence found” instead.
- Fix mis-sorting of table rows when CLUSTERing using an index whose leading key is an expression
- The table would be rebuilt with the correct data, but in an order having little to do with the index order.
- Prevent data loss if a system crash occurs shortly after a sorted GiST index build
- The code path for building GiST indexes using sorting neglected to fsync the file upon completion. This could result in a corrupted index if the operating system crashed shortly later.
- Fix risk of deadlock failures while dropping a partitioned index
- Ensure that the required table and index locks are taken in the standard order (parents before children, tables before indexes). The previous coding for DROP INDEX did it differently, and so could deadlock against concurrent queries taking these locks in the standard order.
- Fix race condition between DROP TABLESPACE and checkpointing
- The checkpoint forced by DROP TABLESPACE could sometimes fail to remove all dead files from the tablespace's directory, leading to a bogus “tablespace is not empty” error.
- Fix possible trouble in crash recovery after a TRUNCATE command that overlaps a checkpoint
- TRUNCATE must ensure that the table's disk file is truncated before the checkpoint is allowed to complete. Otherwise, replay starting from that checkpoint might find unexpected data in the supposedly-removed pages, possibly causing replay failure.
- Fix unsafe toast-data accesses during temporary object cleanup
- Temporary-object deletion during server process exit could fail with “FATAL: cannot fetch toast data without an active snapshot”. This was usually harmless since the next use of that temporary schema would clean up successfully.
- Re-allow underscore as the first character in a custom parameter name
- Such names were unintentionally disallowed in v14.
- Add regress option for the compute_query_id parameter
- This is intended to facilitate testing, by allowing query IDs to be computed but not shown in EXPLAIN output.
- Improve wait logic in RegisterSyncRequest
- If we run out of space in the checkpointer sync request queue (which is hopefully rare on real systems, but is common when testing with a very small buffer pool), we wait for it to drain. While waiting, we should report that as a wait event so that users know what is going on, and also watch for postmaster death, since otherwise the loop might never terminate if the checkpointer has already exited.
- Wake up for latch events when the checkpointer is waiting between writes (Thomas Munro)
- This improves responsiveness to backends sending sync requests. The change also creates a proper wait event class for these waits.
- Fix “PANIC: xlog flush request is not satisfied” failure during standby promotion when there is a missing WAL continuation record
- Fix possibility of self-deadlock in hot standby conflict handling
- With unlucky timing, the WAL-applying process could get stuck while waiting for some other process to release a buffer lock.
- Fix possible mis-identification of the correct ancestor relation to publish logical replication changes through
- If publish_via_partition_root is enabled, and there are multiple publications naming different ancestors of the currently-modified relation, the wrong ancestor might be chosen for reporting the change.
- Ensure that logical replication apply workers can be restarted even when we're up against the max_sync_workers_per_subscription limit
- Faulty coding of the limit check caused a restarted worker to exit immediately, leaving fewer workers than there should be.
- Include unchanged replica identity key columns in the WAL log for an update, if they are stored out-of-line
- Otherwise subscribers cannot see the values and will fail to replicate the update.
- Cope correctly with platforms that have no support for altering the server process's display in ps(1)
- Few platforms are like this (the only supported one is Cygwin), so we'd managed not to notice that refactoring introduced a potential memory clobber.
- Make the server more robust against missed timer interrupts
- An optimization added in v14 meant that if a server process somehow missed a timer interrupt, it would never again ask the kernel for another one, thus breaking timeout detection for the remainder of the session. This seems unduly fragile, so add a recovery path.
- Disallow execution of SPI functions during PL/Perl function compilation
- Perl can be convinced to execute user-defined code during compilation of a PL/Perl function. However, it's not okay for such code to try to invoke SQL operations via SPI. That results in a crash, and if it didn't crash it would be a security hazard, because we really don't want code execution during function validation. Put in a check to give a friendlier error message instead.
- Make libpq accept root-owned SSL private key files
- This change synchronizes libpq's rules for safe ownership and permissions of SSL key files with the rules the server has used since release 9.6. Namely, in addition to the current rules, allow the case where the key file is owned by root and has permissions rw-r----- or less. This is helpful for system-wide management of key files.
- Fix behavior of libpq's PQisBusy() function after a connection failure
- If we'd detected a write failure, PQisBusy() would always return true, which is the wrong thing: we want input processing to carry on normally until we've read whatever is available from the server. The practical effect of this error is that applications using libpq's async-query API would typically detect connection loss only when PQconsumeInput() returns a hard failure. With this fix, a connection loss will normally be reported via an error PGresult object, which is a much cleaner behavior for most applications.
- Re-allow database.schema.table patterns in psql, pg_dump, and pg_amcheck
- Versions before v14 silently ignored all but the schema and table fragments of a pattern containing more than one dot. Refactoring in v14 accidentally broke that use-case. Reinstate it, but now complain if the first fragment is not the name of the current database.
- Make pg_ctl recheck postmaster aliveness while waiting for stop/restart/promote actions
- pg_ctl would verify that the postmaster is alive as a side-effect of sending the stop or promote signal, but then it just naively waited to see the on-disk state change. If the postmaster died uncleanly without having removed its PID file or updated the control file, pg_ctl would wait until timeout. Instead make it recheck every so often that the postmaster process is still there.
- Fix error handling in pg_waldump
- While trying to read a WAL file to determine the WAL segment size, pg_waldump would report an incorrect error for the case of a too-short file. In addition, the file name reported in this and related error messages could be garbage.
- Ensure that contrib/pageinspect functions cope with all-zero pages
- This is a legitimate edge case, but the module was mostly unprepared for it. Arrange to return nulls, or no rows, as appropriate; that seems more useful than raising an error.
- In contrib/pageinspect, add defenses against incorrect page “special space” contents, tighten checks for correct page size, and add some missing checks that an index is of the expected type
- These changes make it less likely that the module will crash on bad data
- In contrib/postgres_fdw, disable batch insertion when BEFORE INSERT ... FOR EACH ROW triggers exist on the foreign table
- Such a trigger might query the table it's on and expect to see previously-inserted rows. With batch insertion, those rows might not be visible yet, so disable the feature to avoid unexpected behavior.
- In contrib/postgres_fdw, verify that ORDER BY clauses are safe to ship before requesting a remotely-ordered query, and include a USING clause if necessary
- This fix prevents situations where the remote server might sort in a different order than we intend. While sometimes that would be only cosmetic, it could produce thoroughly wrong results if the remote data is used as input for a locally-performed merge join.
- Fix configure to handle platforms that have sys/epoll.h but not sys/signalfd.h
- Update JIT code to work with LLVM 14
- Clean up assorted failures under clang's -fsanitize=undefined checks
- Most of these changes are just for pro-forma compliance with the letter of the C and POSIX standards, and are unlikely to have any effect on production builds.
- Do not add OpenSSL dependencies to libpq's pkg-config file when building without OpenSSL
- Fix PL/Perl so it builds on C compilers that don't support statements nested within expressions
- Fix possible build failure of pg_dumpall on Windows, when not using MSVC to build
- In Windows builds, use gendef instead of pexports to build DEF files
- This adapts the build process to work on recent MSys tool chains
- Prevent extra expansion of shell wildcard patterns in programs built under MinGW
- For some reason the C library provided by MinGW will expand shell wildcard characters in a program's command-line arguments by default. This is confusing, not least because it doesn't happen under MSVC, so turn it off.
- Update time zone data files to tzdata release 2022a for DST law changes in Palestine, plus historical corrections for Chile and Ukraine

PostgreSQL 13.7 查看版本資訊

更新時間:2022-05-13
更新細節:

What's new in this version:

Changed:
- Confine additional operations within “security restricted operation” sandboxes
- Autovacuum, CLUSTER, CREATE INDEX, REINDEX, REFRESH MATERIALIZED VIEW, and pg_amcheck activated the “security restricted operation” protection mechanism too late, or even not at all in some code paths. A user having permission to create non-temporary objects within a database could define an object that would execute arbitrary SQL code with superuser permissions the next time that autovacuum processed the object, or that some superuser ran one of the affected commands against it.
- The PostgreSQL Project thanks Alexander Lakhin for reporting this problem. (CVE-2022-1552)
- Fix default signature length for gist_ltree_ops indexes
- The default signature length (hash size) for GiST indexes on ltree columns was accidentally changed while upgrading that operator class to support operator class parameters. If any operations had been done on such an index without first upgrading the ltree extension to version 1.2, they were done assuming that the signature length was 28 bytes rather than the intended 8. This means it is very likely that such indexes are now corrupt. For safety we recommend re-indexing all GiST indexes on ltree columns after installing this update. (Note that GiST indexes on ltree[] columns, that is arrays of ltree, are not affected.)
- Stop using query-provided column aliases for the columns of whole-row variables that refer to plain tables
- The column names in tuples produced by a whole-row variable (such as tbl.* in contexts other than the top level of a SELECT list) are now always those of the associated named composite type, if there is one. We'd previously attempted to make them track any column aliases that had been applied to the FROM entry the variable refers to. But that's semantically dubious, because really then the output of the variable is not at all of the composite type it claims to be. Previous attempts to deal with that inconsistency had bad results up to and including storing unreadable data on disk, so just give up on the whole idea.
- In cases where it's important to be able to relabel such columns, a workaround is to introduce an extra level of sub-SELECT, so that the whole-row variable is referring to the sub-SELECT's output and not to a plain table. Then the variable is of type record to begin with and there's no issue.
- Fix incorrect roundoff when extracting epoch values from intervals
- The new numeric-based code for EXTRACT() failed to yield results equivalent to the old float-based code, as a result of accidentally truncating the DAYS_PER_YEAR value to an integer.
- Defend against pg_stat_get_replication_slot(NULL)
- This function should be marked strict in the catalog data, but it was not in v14, so add a run-time check instead.
- Fix incorrect output for types timestamptz and timetz in table_to_xmlschema() and allied functions (Renan Soares Lopes)
- The xmlschema output for these types included a malformed regular expression.
- Avoid core dump in parser for a VALUES clause with zero columns
- Fix planner failure when a Result plan node appears immediately underneath an Append node (Etsuro Fujita)
- Recently-added code to support asynchronous remote queries failed to handle this case, leading to crashes or errors about unrecognized node types.
- Fix planner failure if a query using SEARCH or CYCLE features contains a duplicate CTE name (Tom Lane, Kyotaro Horiguchi)
- When the name of the recursive WITH query is re-used within itself, the planner could crash or report odd errors such as “could not find attribute 2 in subquery targetlist”.
- Fix planner errors for GROUPING() constructs that reference outer query levels (Richard Guo, Tom Lane)
- Fix plan generation for index-only scans on indexes with both returnable and non-returnable columns
- The previous coding could try to read non-returnable columns in addition to the returnable ones. This was fairly harmless because it didn't actually do anything with the bogus values, but it fell foul of a recently-added error check that rejected such a plan.
- Avoid accessing a no-longer-pinned shared buffer while attempting to lock an outdated tuple during EvalPlanQual
- The code would touch the buffer a couple more times after releasing its pin. In theory another process could recycle the buffer (or more likely, try to defragment its free space) as soon as the pin is gone, probably leading to failure to find the newer version of the tuple.
- Fix query-lifespan memory leak in an IndexScan node that is performing reordering
- Fix ALTER FUNCTION to support changing a function's parallelism property and its SET-variable list in the same command
- The parallelism property change was lost if the same command also updated the function's SET clause.
- Tighten lookup of the index “owned by” a constraint
- Some code paths mistook the index depended on by a foreign key constraint for one owned by a unique or primary key constraint, resulting in odd errors during certain ALTER TABLE operations on tables having foreign key constraints.
- Fix bogus errors from attempts to alter system columns of tables
- The system should just tell you that you can't do it, but sometimes it would report “no owned sequence found” instead.
- Fix mis-sorting of table rows when CLUSTERing using an index whose leading key is an expression
- The table would be rebuilt with the correct data, but in an order having little to do with the index order.
- Prevent data loss if a system crash occurs shortly after a sorted GiST index build
- The code path for building GiST indexes using sorting neglected to fsync the file upon completion. This could result in a corrupted index if the operating system crashed shortly later.
- Fix risk of deadlock failures while dropping a partitioned index
- Ensure that the required table and index locks are taken in the standard order (parents before children, tables before indexes). The previous coding for DROP INDEX did it differently, and so could deadlock against concurrent queries taking these locks in the standard order.
- Fix race condition between DROP TABLESPACE and checkpointing
- The checkpoint forced by DROP TABLESPACE could sometimes fail to remove all dead files from the tablespace's directory, leading to a bogus “tablespace is not empty” error.
- Fix possible trouble in crash recovery after a TRUNCATE command that overlaps a checkpoint
- TRUNCATE must ensure that the table's disk file is truncated before the checkpoint is allowed to complete. Otherwise, replay starting from that checkpoint might find unexpected data in the supposedly-removed pages, possibly causing replay failure.
- Fix unsafe toast-data accesses during temporary object cleanup
- Temporary-object deletion during server process exit could fail with “FATAL: cannot fetch toast data without an active snapshot”. This was usually harmless since the next use of that temporary schema would clean up successfully.
- Re-allow underscore as the first character in a custom parameter name
- Such names were unintentionally disallowed in v14.
- Add regress option for the compute_query_id parameter
- This is intended to facilitate testing, by allowing query IDs to be computed but not shown in EXPLAIN output.
- Improve wait logic in RegisterSyncRequest
- If we run out of space in the checkpointer sync request queue (which is hopefully rare on real systems, but is common when testing with a very small buffer pool), we wait for it to drain. While waiting, we should report that as a wait event so that users know what is going on, and also watch for postmaster death, since otherwise the loop might never terminate if the checkpointer has already exited.
- Wake up for latch events when the checkpointer is waiting between writes (Thomas Munro)
- This improves responsiveness to backends sending sync requests. The change also creates a proper wait event class for these waits.
- Fix “PANIC: xlog flush request is not satisfied” failure during standby promotion when there is a missing WAL continuation record
- Fix possibility of self-deadlock in hot standby conflict handling
- With unlucky timing, the WAL-applying process could get stuck while waiting for some other process to release a buffer lock.
- Fix possible mis-identification of the correct ancestor relation to publish logical replication changes through
- If publish_via_partition_root is enabled, and there are multiple publications naming different ancestors of the currently-modified relation, the wrong ancestor might be chosen for reporting the change.
- Ensure that logical replication apply workers can be restarted even when we're up against the max_sync_workers_per_subscription limit
- Faulty coding of the limit check caused a restarted worker to exit immediately, leaving fewer workers than there should be.
- Include unchanged replica identity key columns in the WAL log for an update, if they are stored out-of-line
- Otherwise subscribers cannot see the values and will fail to replicate the update.
- Cope correctly with platforms that have no support for altering the server process's display in ps(1)
- Few platforms are like this (the only supported one is Cygwin), so we'd managed not to notice that refactoring introduced a potential memory clobber.
- Make the server more robust against missed timer interrupts
- An optimization added in v14 meant that if a server process somehow missed a timer interrupt, it would never again ask the kernel for another one, thus breaking timeout detection for the remainder of the session. This seems unduly fragile, so add a recovery path.
- Disallow execution of SPI functions during PL/Perl function compilation
- Perl can be convinced to execute user-defined code during compilation of a PL/Perl function. However, it's not okay for such code to try to invoke SQL operations via SPI. That results in a crash, and if it didn't crash it would be a security hazard, because we really don't want code execution during function validation. Put in a check to give a friendlier error message instead.
- Make libpq accept root-owned SSL private key files
- This change synchronizes libpq's rules for safe ownership and permissions of SSL key files with the rules the server has used since release 9.6. Namely, in addition to the current rules, allow the case where the key file is owned by root and has permissions rw-r----- or less. This is helpful for system-wide management of key files.
- Fix behavior of libpq's PQisBusy() function after a connection failure
- If we'd detected a write failure, PQisBusy() would always return true, which is the wrong thing: we want input processing to carry on normally until we've read whatever is available from the server. The practical effect of this error is that applications using libpq's async-query API would typically detect connection loss only when PQconsumeInput() returns a hard failure. With this fix, a connection loss will normally be reported via an error PGresult object, which is a much cleaner behavior for most applications.
- Re-allow database.schema.table patterns in psql, pg_dump, and pg_amcheck
- Versions before v14 silently ignored all but the schema and table fragments of a pattern containing more than one dot. Refactoring in v14 accidentally broke that use-case. Reinstate it, but now complain if the first fragment is not the name of the current database.
- Make pg_ctl recheck postmaster aliveness while waiting for stop/restart/promote actions
- pg_ctl would verify that the postmaster is alive as a side-effect of sending the stop or promote signal, but then it just naively waited to see the on-disk state change. If the postmaster died uncleanly without having removed its PID file or updated the control file, pg_ctl would wait until timeout. Instead make it recheck every so often that the postmaster process is still there.
- Fix error handling in pg_waldump
- While trying to read a WAL file to determine the WAL segment size, pg_waldump would report an incorrect error for the case of a too-short file. In addition, the file name reported in this and related error messages could be garbage.
- Ensure that contrib/pageinspect functions cope with all-zero pages
- This is a legitimate edge case, but the module was mostly unprepared for it. Arrange to return nulls, or no rows, as appropriate; that seems more useful than raising an error.
- In contrib/pageinspect, add defenses against incorrect page “special space” contents, tighten checks for correct page size, and add some missing checks that an index is of the expected type
- These changes make it less likely that the module will crash on bad data
- In contrib/postgres_fdw, disable batch insertion when BEFORE INSERT ... FOR EACH ROW triggers exist on the foreign table
- Such a trigger might query the table it's on and expect to see previously-inserted rows. With batch insertion, those rows might not be visible yet, so disable the feature to avoid unexpected behavior.
- In contrib/postgres_fdw, verify that ORDER BY clauses are safe to ship before requesting a remotely-ordered query, and include a USING clause if necessary
- This fix prevents situations where the remote server might sort in a different order than we intend. While sometimes that would be only cosmetic, it could produce thoroughly wrong results if the remote data is used as input for a locally-performed merge join.
- Fix configure to handle platforms that have sys/epoll.h but not sys/signalfd.h
- Update JIT code to work with LLVM 14
- Clean up assorted failures under clang's -fsanitize=undefined checks
- Most of these changes are just for pro-forma compliance with the letter of the C and POSIX standards, and are unlikely to have any effect on production builds.
- Do not add OpenSSL dependencies to libpq's pkg-config file when building without OpenSSL
- Fix PL/Perl so it builds on C compilers that don't support statements nested within expressions
- Fix possible build failure of pg_dumpall on Windows, when not using MSVC to build
- In Windows builds, use gendef instead of pexports to build DEF files
- This adapts the build process to work on recent MSys tool chains
- Prevent extra expansion of shell wildcard patterns in programs built under MinGW
- For some reason the C library provided by MinGW will expand shell wildcard characters in a program's command-line arguments by default. This is confusing, not least because it doesn't happen under MSVC, so turn it off.
- Update time zone data files to tzdata release 2022a for DST law changes in Palestine, plus historical corrections for Chile and Ukraine

PostgreSQL 14.3 查看版本資訊

更新時間:2022-05-13
更新細節:

What's new in this version:

Changed:
- Confine additional operations within “security restricted operation” sandboxes
- Autovacuum, CLUSTER, CREATE INDEX, REINDEX, REFRESH MATERIALIZED VIEW, and pg_amcheck activated the “security restricted operation” protection mechanism too late, or even not at all in some code paths. A user having permission to create non-temporary objects within a database could define an object that would execute arbitrary SQL code with superuser permissions the next time that autovacuum processed the object, or that some superuser ran one of the affected commands against it.
- The PostgreSQL Project thanks Alexander Lakhin for reporting this problem. (CVE-2022-1552)
- Fix default signature length for gist_ltree_ops indexes
- The default signature length (hash size) for GiST indexes on ltree columns was accidentally changed while upgrading that operator class to support operator class parameters. If any operations had been done on such an index without first upgrading the ltree extension to version 1.2, they were done assuming that the signature length was 28 bytes rather than the intended 8. This means it is very likely that such indexes are now corrupt. For safety we recommend re-indexing all GiST indexes on ltree columns after installing this update. (Note that GiST indexes on ltree[] columns, that is arrays of ltree, are not affected.)
- Stop using query-provided column aliases for the columns of whole-row variables that refer to plain tables
- The column names in tuples produced by a whole-row variable (such as tbl.* in contexts other than the top level of a SELECT list) are now always those of the associated named composite type, if there is one. We'd previously attempted to make them track any column aliases that had been applied to the FROM entry the variable refers to. But that's semantically dubious, because really then the output of the variable is not at all of the composite type it claims to be. Previous attempts to deal with that inconsistency had bad results up to and including storing unreadable data on disk, so just give up on the whole idea.
- In cases where it's important to be able to relabel such columns, a workaround is to introduce an extra level of sub-SELECT, so that the whole-row variable is referring to the sub-SELECT's output and not to a plain table. Then the variable is of type record to begin with and there's no issue.
- Fix incorrect roundoff when extracting epoch values from intervals
- The new numeric-based code for EXTRACT() failed to yield results equivalent to the old float-based code, as a result of accidentally truncating the DAYS_PER_YEAR value to an integer.
- Defend against pg_stat_get_replication_slot(NULL)
- This function should be marked strict in the catalog data, but it was not in v14, so add a run-time check instead.
- Fix incorrect output for types timestamptz and timetz in table_to_xmlschema() and allied functions (Renan Soares Lopes)
- The xmlschema output for these types included a malformed regular expression.
- Avoid core dump in parser for a VALUES clause with zero columns
- Fix planner failure when a Result plan node appears immediately underneath an Append node (Etsuro Fujita)
- Recently-added code to support asynchronous remote queries failed to handle this case, leading to crashes or errors about unrecognized node types.
- Fix planner failure if a query using SEARCH or CYCLE features contains a duplicate CTE name (Tom Lane, Kyotaro Horiguchi)
- When the name of the recursive WITH query is re-used within itself, the planner could crash or report odd errors such as “could not find attribute 2 in subquery targetlist”.
- Fix planner errors for GROUPING() constructs that reference outer query levels (Richard Guo, Tom Lane)
- Fix plan generation for index-only scans on indexes with both returnable and non-returnable columns
- The previous coding could try to read non-returnable columns in addition to the returnable ones. This was fairly harmless because it didn't actually do anything with the bogus values, but it fell foul of a recently-added error check that rejected such a plan.
- Avoid accessing a no-longer-pinned shared buffer while attempting to lock an outdated tuple during EvalPlanQual
- The code would touch the buffer a couple more times after releasing its pin. In theory another process could recycle the buffer (or more likely, try to defragment its free space) as soon as the pin is gone, probably leading to failure to find the newer version of the tuple.
- Fix query-lifespan memory leak in an IndexScan node that is performing reordering
- Fix ALTER FUNCTION to support changing a function's parallelism property and its SET-variable list in the same command
- The parallelism property change was lost if the same command also updated the function's SET clause.
- Tighten lookup of the index “owned by” a constraint
- Some code paths mistook the index depended on by a foreign key constraint for one owned by a unique or primary key constraint, resulting in odd errors during certain ALTER TABLE operations on tables having foreign key constraints.
- Fix bogus errors from attempts to alter system columns of tables
- The system should just tell you that you can't do it, but sometimes it would report “no owned sequence found” instead.
- Fix mis-sorting of table rows when CLUSTERing using an index whose leading key is an expression
- The table would be rebuilt with the correct data, but in an order having little to do with the index order.
- Prevent data loss if a system crash occurs shortly after a sorted GiST index build
- The code path for building GiST indexes using sorting neglected to fsync the file upon completion. This could result in a corrupted index if the operating system crashed shortly later.
- Fix risk of deadlock failures while dropping a partitioned index
- Ensure that the required table and index locks are taken in the standard order (parents before children, tables before indexes). The previous coding for DROP INDEX did it differently, and so could deadlock against concurrent queries taking these locks in the standard order.
- Fix race condition between DROP TABLESPACE and checkpointing
- The checkpoint forced by DROP TABLESPACE could sometimes fail to remove all dead files from the tablespace's directory, leading to a bogus “tablespace is not empty” error.
- Fix possible trouble in crash recovery after a TRUNCATE command that overlaps a checkpoint
- TRUNCATE must ensure that the table's disk file is truncated before the checkpoint is allowed to complete. Otherwise, replay starting from that checkpoint might find unexpected data in the supposedly-removed pages, possibly causing replay failure.
- Fix unsafe toast-data accesses during temporary object cleanup
- Temporary-object deletion during server process exit could fail with “FATAL: cannot fetch toast data without an active snapshot”. This was usually harmless since the next use of that temporary schema would clean up successfully.
- Re-allow underscore as the first character in a custom parameter name
- Such names were unintentionally disallowed in v14.
- Add regress option for the compute_query_id parameter
- This is intended to facilitate testing, by allowing query IDs to be computed but not shown in EXPLAIN output.
- Improve wait logic in RegisterSyncRequest
- If we run out of space in the checkpointer sync request queue (which is hopefully rare on real systems, but is common when testing with a very small buffer pool), we wait for it to drain. While waiting, we should report that as a wait event so that users know what is going on, and also watch for postmaster death, since otherwise the loop might never terminate if the checkpointer has already exited.
- Wake up for latch events when the checkpointer is waiting between writes (Thomas Munro)
- This improves responsiveness to backends sending sync requests. The change also creates a proper wait event class for these waits.
- Fix “PANIC: xlog flush request is not satisfied” failure during standby promotion when there is a missing WAL continuation record
- Fix possibility of self-deadlock in hot standby conflict handling
- With unlucky timing, the WAL-applying process could get stuck while waiting for some other process to release a buffer lock.
- Fix possible mis-identification of the correct ancestor relation to publish logical replication changes through
- If publish_via_partition_root is enabled, and there are multiple publications naming different ancestors of the currently-modified relation, the wrong ancestor might be chosen for reporting the change.
- Ensure that logical replication apply workers can be restarted even when we're up against the max_sync_workers_per_subscription limit
- Faulty coding of the limit check caused a restarted worker to exit immediately, leaving fewer workers than there should be.
- Include unchanged replica identity key columns in the WAL log for an update, if they are stored out-of-line
- Otherwise subscribers cannot see the values and will fail to replicate the update.
- Cope correctly with platforms that have no support for altering the server process's display in ps(1)
- Few platforms are like this (the only supported one is Cygwin), so we'd managed not to notice that refactoring introduced a potential memory clobber.
- Make the server more robust against missed timer interrupts
- An optimization added in v14 meant that if a server process somehow missed a timer interrupt, it would never again ask the kernel for another one, thus breaking timeout detection for the remainder of the session. This seems unduly fragile, so add a recovery path.
- Disallow execution of SPI functions during PL/Perl function compilation
- Perl can be convinced to execute user-defined code during compilation of a PL/Perl function. However, it's not okay for such code to try to invoke SQL operations via SPI. That results in a crash, and if it didn't crash it would be a security hazard, because we really don't want code execution during function validation. Put in a check to give a friendlier error message instead.
- Make libpq accept root-owned SSL private key files
- This change synchronizes libpq's rules for safe ownership and permissions of SSL key files with the rules the server has used since release 9.6. Namely, in addition to the current rules, allow the case where the key file is owned by root and has permissions rw-r----- or less. This is helpful for system-wide management of key files.
- Fix behavior of libpq's PQisBusy() function after a connection failure
- If we'd detected a write failure, PQisBusy() would always return true, which is the wrong thing: we want input processing to carry on normally until we've read whatever is available from the server. The practical effect of this error is that applications using libpq's async-query API would typically detect connection loss only when PQconsumeInput() returns a hard failure. With this fix, a connection loss will normally be reported via an error PGresult object, which is a much cleaner behavior for most applications.
- Re-allow database.schema.table patterns in psql, pg_dump, and pg_amcheck
- Versions before v14 silently ignored all but the schema and table fragments of a pattern containing more than one dot. Refactoring in v14 accidentally broke that use-case. Reinstate it, but now complain if the first fragment is not the name of the current database.
- Make pg_ctl recheck postmaster aliveness while waiting for stop/restart/promote actions
- pg_ctl would verify that the postmaster is alive as a side-effect of sending the stop or promote signal, but then it just naively waited to see the on-disk state change. If the postmaster died uncleanly without having removed its PID file or updated the control file, pg_ctl would wait until timeout. Instead make it recheck every so often that the postmaster process is still there.
- Fix error handling in pg_waldump
- While trying to read a WAL file to determine the WAL segment size, pg_waldump would report an incorrect error for the case of a too-short file. In addition, the file name reported in this and related error messages could be garbage.
- Ensure that contrib/pageinspect functions cope with all-zero pages
- This is a legitimate edge case, but the module was mostly unprepared for it. Arrange to return nulls, or no rows, as appropriate; that seems more useful than raising an error.
- In contrib/pageinspect, add defenses against incorrect page “special space” contents, tighten checks for correct page size, and add some missing checks that an index is of the expected type
- These changes make it less likely that the module will crash on bad data
- In contrib/postgres_fdw, disable batch insertion when BEFORE INSERT ... FOR EACH ROW triggers exist on the foreign table
- Such a trigger might query the table it's on and expect to see previously-inserted rows. With batch insertion, those rows might not be visible yet, so disable the feature to avoid unexpected behavior.
- In contrib/postgres_fdw, verify that ORDER BY clauses are safe to ship before requesting a remotely-ordered query, and include a USING clause if necessary
- This fix prevents situations where the remote server might sort in a different order than we intend. While sometimes that would be only cosmetic, it could produce thoroughly wrong results if the remote data is used as input for a locally-performed merge join.
- Fix configure to handle platforms that have sys/epoll.h but not sys/signalfd.h
- Update JIT code to work with LLVM 14
- Clean up assorted failures under clang's -fsanitize=undefined checks
- Most of these changes are just for pro-forma compliance with the letter of the C and POSIX standards, and are unlikely to have any effect on production builds.
- Do not add OpenSSL dependencies to libpq's pkg-config file when building without OpenSSL
- Fix PL/Perl so it builds on C compilers that don't support statements nested within expressions
- Fix possible build failure of pg_dumpall on Windows, when not using MSVC to build
- In Windows builds, use gendef instead of pexports to build DEF files
- This adapts the build process to work on recent MSys tool chains
- Prevent extra expansion of shell wildcard patterns in programs built under MinGW
- For some reason the C library provided by MinGW will expand shell wildcard characters in a program's command-line arguments by default. This is confusing, not least because it doesn't happen under MSVC, so turn it off.
- Update time zone data files to tzdata release 2022a for DST law changes in Palestine, plus historical corrections for Chile and Ukraine