{"format": 1, "mode": "release", "from_release": null, "to_release": {"date": "2016-09-29", "build": "9.6.0", "major": "9.6", "minor": 0, "manual": "9.6", "status": "stable", "doc_git": "", "version": "9.6.0", "eol_date": "2021-11-11", "date_text": "2016-09-29", "supported": false, "manual_url": "/docs/9.6/release-9-6.html", "source_url": "/docs/release/9.6.0/", "entry_count": 214, "placeholder": false, "content_hash": "2ae8233d18e9e3698eb179b8d82deb378772dc38040ea3d44910f33068301700", "manual_build": "9.6.24", "source_as_of": "", "changes_count": 201, "doc_loaded_at": "2026-09-26T02:56:43.973460", "migration_html": "<p>希望从任何之前的版本迁移数据的用户，需要使用<a href=\"/docs/9.6/app-pg-dumpall.html\" title=\"pg_dumpall\"><span><span>pg_dumpall</span></span></a>进行转储/恢复，或使用<a href=\"/docs/9.6/pgupgrade.html\" title=\"pg_upgrade\"><span><span>pg_upgrade</span></span></a>。</p>\n<p>版本 9.6 包含许多可能影响与以前版本兼容性的更改。注意以下不兼容之处：</p>\n<div>\n</div>", "compatibility_count": 13, "label": "9.6", "status_label": "历史版本", "eol": "2021-11-11", "age_days": 3653, "support_days": -1784}, "groups": [{"date": "2016-09-29", "build": "9.6.0", "major": "9.6", "minor": 0, "manual": "9.6", "status": "stable", "doc_git": "", "version": "9.6.0", "eol_date": "2021-11-11", "date_text": "2016-09-29", "supported": false, "manual_url": "/docs/9.6/release-9-6.html", "source_url": "/docs/release/9.6.0/", "entry_count": 214, "placeholder": false, "content_hash": "2ae8233d18e9e3698eb179b8d82deb378772dc38040ea3d44910f33068301700", "manual_build": "9.6.24", "source_as_of": "", "changes_count": 201, "doc_loaded_at": "2026-09-26T02:56:43.973460", "migration_html": "<p>希望从任何之前的版本迁移数据的用户，需要使用<a href=\"/docs/9.6/app-pg-dumpall.html\" title=\"pg_dumpall\"><span><span>pg_dumpall</span></span></a>进行转储/恢复，或使用<a href=\"/docs/9.6/pgupgrade.html\" title=\"pg_upgrade\"><span><span>pg_upgrade</span></span></a>。</p>\n<p>版本 9.6 包含许多可能影响与以前版本兼容性的更改。注意以下不兼容之处：</p>\n<div>\n</div>", "compatibility_count": 13, "label": "9.6", "status_label": "历史版本", "eol": "2021-11-11", "age_days": 3653, "support_days": -1784, "entries": [{"id": "9.6.0-c45fb2c14f7d907e", "cves": [], "html": "<p>改进 <a href=\"/docs/9.6/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW\" title=\"表 28.3. pg_stat_activity 视图\"><code>pg_stat_activity</code></a> 视图关于进程在等待什么的信息（Amit Kapila、Ildus Kurbangaliev）</p>\n<p>历史上只有进程在等待重量级锁时才显示为等待中。现在等待轻量级锁和缓冲区 pin 也会显示在 <code>pg_stat_activity</code> 中。此外，所等待的锁类型现在也可见。这些更改用 <code>wait_event_type</code> 和 <code>wait_event</code> 列替换了 <code>waiting</code> 列。</p>", "text": "改进 pg_stat_activity 视图关于进程在等待什么的信息（Amit Kapila、Ildus Kurbangaliev） 历史上只有进程在等待重量级锁时才显示为等待中。现在等待轻量级锁和缓冲区 pin 也会显示在 pg_stat_activity 中。此外，所等待的锁类型现在也可见。这些更改用 wait_event_type 和 wait_event 列替换了 waiting 列。", "title": "改进 pg_stat_activity 视图关于进程在等待什么的信息", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "f5e61fe875e9074370160d408fc19c9e67bf698ef900cff8c5ddf83b2e5f6703", "section_path": ["兼容性"], "commit_groups": [["53be0b1ad"]], "identity_text": "Improve the pg_stat_activity view's information about what a process is waiting for (Amit Kapila, Ildus Kurbangaliev) Historically a process has only been shown as waiting if it was waiting for a heavyweight lock. Now waits for lightweight locks and buffer pins are also shown in pg_stat_activity. Also, the type of lock being waited for is now visible. These changes replace the waiting column with wait_event_type and wait_event.", "commit_aliases": ["53be0b1ad"], "source_commits": ["53be0b1ad"], "source_entry_id": "9.6.0/migration/001", "db_id": "e2dc309ebd136c70bf10ef9a0793f2fd", "patch_ids": ["bcf596a0d9a8ad18303a147c3f5cd180"], "statement_hash": "d49f2ffc26eeb4e3aa797082977f5e1e904a30139416f10109ef5efebc07b40d", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3a9fc0a62d7fe121", "cves": [], "html": "<p>在 <a href=\"/docs/9.6/functions-formatting.html#FUNCTIONS-FORMATTING-TABLE\" title=\"表 9.23. 格式化函数\"><code>to_char()</code></a> 中，（需要时的）减号不再计为时间相关字段宽度的一部分（Bruce Momjian）</p>\n<p>例如 <code>to_char('-4 years'::interval, 'YY')</code> 现在返回 <code>-04</code> 而不是 <code>-4</code>。</p>", "text": "在 to_char() 中，（需要时的）减号不再计为时间相关字段宽度的一部分（Bruce Momjian） 例如 to_char('-4 years'::interval, 'YY') 现在返回 -04 而不是 -4。", "title": "在 to_char() 中，（需要时的）减号不再计为时间相关字段宽度的一部分", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "1e856cfeb0ba091f62247552e0029cacd767c8a5d8bedf29ba4cf4a474ba4bda", "section_path": ["兼容性"], "commit_groups": [["2d87eedc1"]], "identity_text": "In to_char(), do not count a minus sign (when needed) as part of the field width for time-related fields (Bruce Momjian) For example, to_char('-4 years'::interval, 'YY') now returns -04, rather than -4.", "commit_aliases": ["2d87eedc1"], "source_commits": ["2d87eedc1"], "source_entry_id": "9.6.0/migration/002", "db_id": "17a007dec372d6c06c09edaca640d34b", "patch_ids": ["077b532032e089c823a15258e24673af"], "statement_hash": "8f20f5a9dea16dd09bdb40ee5ed74cb4a34b5b49036447939c011784a941c02f", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-640f30844bdb4fbc", "cves": [], "html": "<p>使 <a href=\"/docs/9.6/functions-datetime.html#FUNCTIONS-DATETIME-TABLE\" title=\"表 9.30. 日期/时间函数\"><code>extract()</code></a> 对无穷大输入的表现更合理（Vitaly Burovoy）</p>\n<p>历史上 <code>extract()</code> 函数给定无穷时间戳时只是返回零，无论给定的字段名是什么。现在当请求的字段是单调递增的（如 <code>year</code>、<code>epoch</code>）时返回 <code>infinity</code> 或 <code>-infinity</code>，不是时（如 <code>day</code>、<code>hour</code>）返回 <code>NULL</code>。此外，对坏字段名抛出预期的错误。</p>", "text": "使 extract() 对无穷大输入的表现更合理（Vitaly Burovoy） 历史上 extract() 函数给定无穷时间戳时只是返回零，无论给定的字段名是什么。现在当请求的字段是单调递增的（如 year、epoch）时返回 infinity 或 -infinity，不是时（如 day、hour）返回 NULL。此外，对坏字段名抛出预期的错误。", "title": "使 extract() 对无穷大输入的表现更合理", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "7f2955b503b118a7021d565ac667dc562f5697508fd24d7bfc2051203f0607a0", "section_path": ["兼容性"], "commit_groups": [["647d87c56"]], "identity_text": "Make extract() behave more reasonably with infinite inputs (Vitaly Burovoy) Historically the extract() function just returned zero given an infinite timestamp, regardless of the given field name. Make it return infinity or -infinity as appropriate when the requested field is one that is monotonically increasing (e.g, year, epoch), or NULL when it is not (e.g., day, hour). Also, throw the expected error for bad field names.", "commit_aliases": ["647d87c56"], "source_commits": ["647d87c56"], "source_entry_id": "9.6.0/migration/003", "db_id": "2dc696bd8395e09451423f654f236bc6", "patch_ids": ["fb36be22ac6f96ac5af46d50b7e30df7"], "statement_hash": "fa2b8f03a0e1e973929e03dfae3f774df2d1de667ae6e404d338bf495ed28b1b", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-709f75cc02efb359", "cves": [], "html": "<p>移除 PL/pgSQL 中抑制 <code>RAISE</code> 命令发出消息的 <code>CONTEXT</code> 最内层的<span>“<span>特性</span>”</span>（Pavel Stehule）</p>\n<p>这一古老的向后兼容 hack 被认为已失去用处。</p>", "text": "移除 PL/pgSQL 中抑制 RAISE 命令发出消息的 CONTEXT 最内层的“特性”（Pavel Stehule） 这一古老的向后兼容 hack 被认为已失去用处。", "title": "移除 PL/pgSQL 中抑制 RAISE 命令发出消息的 CONTEXT 最内层的“特性”", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "a2283b236e5f352ad8084822e91b263bddd493469dcc9a6070ff92859258b65b", "section_path": ["兼容性"], "commit_groups": [["0426f349e"]], "identity_text": "Remove PL/pgSQL's feature that suppressed the innermost line of CONTEXT for messages emitted by RAISE commands (Pavel Stehule) This ancient backwards-compatibility hack was agreed to have outlived its usefulness.", "commit_aliases": ["0426f349e"], "source_commits": ["0426f349e"], "source_entry_id": "9.6.0/migration/004", "db_id": "170b1fefcffcedda9461e5d56803fec1", "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "statement_hash": "971c59d90a9ad7c27a237bc3429b0c57588ca4beaa6dd3c0b354475ddb06835d", "relations": [{"rule": 2, "type": "related", "target": "38f5670a2a48e398fc5f56296717be27", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}}, {"rule": 2, "type": "related", "target": "3ce123ea6c2d6bd34288d178655446b8", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}}], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": [{"db_id": "3ce123ea6c2d6bd34288d178655446b8", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-5dfbe1edb70fc5fe", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3"}, {"db_id": "38f5670a2a48e398fc5f56296717be27", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "在 libpq 中引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-e2a86ce963549df5", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11"}]}, {"id": "9.6.0-4a84950e7af725c6", "cves": [], "html": "<p>修复默认文本搜索解析器允许 <code>email</code> 和 <code>host</code> 记号中的前导数字（Artur Zakirov）</p>\n<p>大多数情况下这只会导致文本解析的少量变化。但如果你有这种地址频繁出现的数据，可能值得重建相关的 <code>tsvector</code> 列和索引，使这种形式的地址能被文本搜索正确找到。</p>", "text": "修复默认文本搜索解析器允许 email 和 host 记号中的前导数字（Artur Zakirov） 大多数情况下这只会导致文本解析的少量变化。但如果你有这种地址频繁出现的数据，可能值得重建相关的 tsvector 列和索引，使这种形式的地址能被文本搜索正确找到。", "title": "修复默认文本搜索解析器允许 email 和 host 记号中的前导数字", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "3cb73f5fa064b8b8e5c77e45ef27a63cd4f1542336cc736c754f5d27a8862e5c", "section_path": ["兼容性"], "commit_groups": [["61d66c44f"]], "identity_text": "Fix the default text search parser to allow leading digits in email and host tokens (Artur Zakirov) In most cases this will result in few changes in the parsing of text. But if you have data where such addresses occur frequently, it may be worth rebuilding dependent tsvector columns and indexes so that addresses of this form will be found properly by text searches.", "commit_aliases": ["61d66c44f"], "source_commits": ["61d66c44f"], "source_entry_id": "9.6.0/migration/005", "db_id": "b749eb94f36cc6c5201663896819c6a0", "patch_ids": ["4faf17b1f7f15f13d164bdccecda332f"], "statement_hash": "e82e3c3133216ec60cd00012503ac03de9f31995077fa163ef1ef3067136fba2", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a9637e0b4c51a70b", "cves": [], "html": "<p>扩展 <a href=\"/docs/9.6/unaccent.html\" title=\"F.44. unaccent\"><code>contrib/unaccent</code></a> 的标准 <code>unaccent.rules</code> 文件以处理 Unicode 已知的所有变音符号，并正确展开连字（Thomas Munro、Léonard Benedetti）</p>\n<p>以前的版本漏掉了转换一些较不常见的带变音符号字母。此外连字现在被展开为单独的字母。使用此规则文件的安装可能希望重建依赖其结果的 <code>tsvector</code> 列和索引。</p>", "text": "扩展 contrib/unaccent 的标准 unaccent.rules 文件以处理 Unicode 已知的所有变音符号，并正确展开连字（Thomas Munro、Léonard Benedetti） 以前的版本漏掉了转换一些较不常见的带变音符号字母。此外连字现在被展开为单独的字母。使用此规则文件的安装可能希望重建依赖其结果的 tsvector 列和索引。", "title": "扩展 contrib/unaccent 的标准 unaccent.rules 文件以处理 Unicode 已知的所有变音符号，并正确展开连字", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "467429103d85d523539599e2eb19d0d0f7411a961c2780ef72a9ca76121af389", "section_path": ["兼容性"], "commit_groups": [["1bbd52cb9"], ["9a206d063"]], "identity_text": "Extend contrib/unaccent's standard unaccent.rules file to handle all diacritics known to Unicode, and to expand ligatures correctly (Thomas Munro, Léonard Benedetti) The previous version neglected to convert some less-common letters with diacritic marks. Also, ligatures are now expanded into separate letters. Installations that use this rules file may wish to rebuild tsvector columns and indexes that depend on the result.", "commit_aliases": ["1bbd52cb9", "9a206d063"], "source_commits": ["1bbd52cb9", "9a206d063"], "source_entry_id": "9.6.0/migration/006", "db_id": "f803482fb74818b6a3b27a4473d26aa3", "patch_ids": ["277f9ba913b84107a8966cc07afc9737", "b7cecf35ca32cc49b8aecd6f8c4b46eb"], "statement_hash": "bcdfc447eeb1a5ad62bcadc4d3f053b2a2af7b6f16036a2426a1a2c8028f179d", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-52e9b49e6d5c7c7c", "cves": [], "html": "<p>从 <code>CREATE ROLE</code> 及相关命令中移除早已弃用的 <code>CREATEUSER</code>/<code>NOCREATEUSER</code> 选项（Tom Lane）</p>\n<p>由于古老的向后兼容原因，<code>CREATEUSER</code> 实际上意味着 <code>SUPERUSER</code>。这一直是（合理地）期望它表示 <code>CREATEROLE</code> 的人们的持续困惑源。它已被弃用十年，因此通过移除来修复问题。</p>", "text": "从 CREATE ROLE 及相关命令中移除早已弃用的 CREATEUSER/NOCREATEUSER 选项（Tom Lane） 由于古老的向后兼容原因，CREATEUSER 实际上意味着 SUPERUSER。这一直是（合理地）期望它表示 CREATEROLE 的人们的持续困惑源。它已被弃用十年，因此通过移除来修复问题。", "title": "从 CREATE ROLE 及相关命令中移除早已弃用的 CREATEUSER/NOCREATEUSER 选项", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "e0e4570969d76e990ac664d6b39afc297baea71691d3ae6e1a880695ca1644b0", "section_path": ["兼容性"], "commit_groups": [["d371bebd3"]], "identity_text": "Remove the long-deprecated CREATEUSER/NOCREATEUSER options from CREATE ROLE and allied commands (Tom Lane) CREATEUSER actually meant SUPERUSER, for ancient backwards-compatibility reasons. This has been a constant source of confusion for people who (reasonably) expect it to mean CREATEROLE. It has been deprecated for ten years now, so fix the problem by removing it.", "commit_aliases": ["d371bebd3"], "source_commits": ["d371bebd3"], "source_entry_id": "9.6.0/migration/007", "db_id": "3932e353833368c6b2a182c4d1edd0bf", "patch_ids": ["00a6717bf5453e71c25406c6ff93027e"], "statement_hash": "bc0dce25cbcef327da240e192cd838e7c6f3ba9fd1319f891f4cc1c423b96634", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-b1eb64ea66631927", "cves": [], "html": "<p>把以 <code>pg_</code> 开头的角色名视为保留（Stephen Frost）</p>\n<p>现在不允许用户创建这种角色名。这防止与 <span>initdb</span> 创建的内建角色冲突。</p>", "text": "把以 pg_ 开头的角色名视为保留（Stephen Frost） 现在不允许用户创建这种角色名。这防止与 initdb 创建的内建角色冲突。", "title": "把以 pg_ 开头的角色名视为保留", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "9ff12fa1b2f139e5eb71f86ffbdb93f9e7350e7da92e6e36b402d99e32472451", "section_path": ["兼容性"], "commit_groups": [["293007898"], ["7df974ee0"], ["a89505fd2"]], "identity_text": "Treat role names beginning with pg_ as reserved (Stephen Frost) User creation of such role names is now disallowed. This prevents conflicts with built-in roles created by initdb.", "commit_aliases": ["293007898", "7df974ee0", "a89505fd2"], "source_commits": ["293007898", "7df974ee0", "a89505fd2"], "source_entry_id": "9.6.0/migration/008", "db_id": "3972d610a1c387388e962e552b480a89", "patch_ids": ["03ebea0db083d73366dbe6a7174ba0b8", "08bb0085366a845af153d5fafe9b31b9", "d2cc9157527b29931277bb8c40fb17e1"], "statement_hash": "1a8f2c65da2eea6508c12b224c8353e7d09f9020fb2d4dd74d9ceef87d819dee", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-0fad871df3b84335", "cves": [], "html": "<p>把 <code>information_schema</code>.<code>routines</code> 视图中的列名 <code>result_cast_character_set_name</code> 改为 <code>result_cast_char_set_name</code>（Clément Prévost）</p>\n<p>SQL:2011 标准指定了较长的名字，但这看起来是个错误，因为相邻列名和其他 <code>information_schema</code> 视图都使用较短的风格。</p>", "text": "把 information_schema.routines 视图中的列名 result_cast_character_set_name 改为 result_cast_char_set_name（Clément Prévost） SQL:2011 标准指定了较长的名字，但这看起来是个错误，因为相邻列名和其他 information_schema 视图都使用较短的风格。", "title": "把 information_schema.routines 视图中的列名 result_cast_character_set_name 改为 result_cast_char_set_name", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "2fc01c279df661840ddd2c4c96aad83d8bf225fe9e5eebd2b98256007ec479f7", "section_path": ["兼容性"], "commit_groups": [["d8710f18f"]], "identity_text": "Change a column name in the information_schema.routines view from result_cast_character_set_name to result_cast_char_set_name (Clément Prévost) The SQL:2011 standard specifies the longer name, but that appears to be a mistake, because adjacent column names use the shorter style, as do other information_schema views.", "commit_aliases": ["d8710f18f"], "source_commits": ["d8710f18f"], "source_entry_id": "9.6.0/migration/009", "db_id": "0a291ea22cac47a949457b287472320a", "patch_ids": ["328841cead83e561d0fd754e2aa711b9"], "statement_hash": "a1a68be950a734186cf7a52059642c4ab027bbea9741714968ae30db84ef38ec", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-da86a4f603d24861", "cves": [], "html": "<p><span>psql</span> 的 <code>-c</code> 选项不再隐含 <code>--no-psqlrc</code>（Pavel Stehule、Catalin Iacob）</p>\n<p>显式写 <code>--no-psqlrc</code>（或其缩写 <code>-X</code>）来获得旧行为。这样修改后的脚本在旧版本 <span>psql</span> 中仍能工作。</p>", "text": "psql 的 -c 选项不再隐含 --no-psqlrc（Pavel Stehule、Catalin Iacob） 显式写 --no-psqlrc（或其缩写 -X）来获得旧行为。这样修改后的脚本在旧版本 psql 中仍能工作。", "title": "psql 的 -c 选项不再隐含 --no-psqlrc", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "f2b462f51d5ec42aace90d38071f96349407dbeac7b6358311eb13829c7e5f8b", "section_path": ["兼容性"], "commit_groups": [["d5563d7df"]], "identity_text": "psql's -c option no longer implies --no-psqlrc (Pavel Stehule, Catalin Iacob) Write --no-psqlrc (or its abbreviation -X) explicitly to obtain the old behavior. Scripts so modified will still work with old versions of psql.", "commit_aliases": ["d5563d7df"], "source_commits": ["d5563d7df"], "source_entry_id": "9.6.0/migration/010", "db_id": "fc511d32b5b42f2b7b4101c635c29f52", "patch_ids": ["d44cc20a573665822f6c5b3fb2de7086"], "statement_hash": "6ac863943fdc1e52ce098aa0f8ba426780904a6a82d2dcf21f72855c56892218", "relations": [{"rule": 2, "type": "related", "target": "a00cd5070d8809c80e20264fef692640", "evidence": {"same_day": true, "patch_ids": ["d44cc20a573665822f6c5b3fb2de7086"]}}], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": [{"db_id": "a00cd5070d8809c80e20264fef692640", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "支持多个 -c 和 -f 命令行选项", "evidence": {"same_day": true, "patch_ids": ["d44cc20a573665822f6c5b3fb2de7086"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-0f237b1a49997674", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3"}]}, {"id": "9.6.0-154291ec4700473f", "cves": [], "html": "<p>改进 <span>pg_restore</span> 的 <code>-t</code> 选项匹配所有类型的关系，而不只是普通表（Craig Ringer）</p>", "text": "改进 pg_restore 的 -t 选项匹配所有类型的关系，而不只是普通表（Craig Ringer）", "title": "改进 pg_restore 的 -t 选项匹配所有类型的关系，而不只是普通表", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "1ef2e0598dd129446b52863714e5c8daac514b4645ffebfb55aeaee3ca90b1bd", "section_path": ["兼容性"], "commit_groups": [["5671aaca8"]], "identity_text": "Improve pg_restore's -t option to match all types of relations, not only plain tables (Craig Ringer)", "commit_aliases": ["5671aaca8"], "source_commits": ["5671aaca8"], "source_entry_id": "9.6.0/migration/011", "db_id": "eef97d98f9e3592d163f35c79e1e5528", "patch_ids": ["69a4910ed89353b3f8b06d2e962c2963"], "statement_hash": "eda40665e7df662fe5860a3e10b364252e60b538909207ae68b95d0fd43e71ed", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-74135f32500ac56e", "cves": [], "html": "<p>更改 <span>pg_controldata</span> 及相关地方用于 <code>NextXID</code> 的显示格式（Joe Conway、Bruce Momjian）</p>\n<p>以 <em><code>number</code></em><code>:</code><em><code>number</code></em> 格式显示纪元加事务 ID 值。以前的格式 <em><code>number</code></em><code>/</code><em><code>number</code></em> 与 <acronym>LSN</acronym> 使用的格式惊人地相似。</p>", "text": "更改 pg_controldata 及相关地方用于 NextXID 的显示格式（Joe Conway、Bruce Momjian） 以 number:number 格式显示纪元加事务 ID 值。以前的格式 number/number 与 LSN 使用的格式惊人地相似。", "title": "更改 pg_controldata 及相关地方用于 NextXID 的显示格式", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "74b6bd1a318b16b707b1a1c7f36c7b5e22a066e2618ad3fb0e31a8adbf64873b", "section_path": ["兼容性"], "commit_groups": [["59a884e98"]], "identity_text": "Change the display format used for NextXID in pg_controldata and related places (Joe Conway, Bruce Momjian) Display epoch-and-transaction-ID values in the format number:number. The previous format number/number was confusingly similar to that used for LSNs.", "commit_aliases": ["59a884e98"], "source_commits": ["59a884e98"], "source_entry_id": "9.6.0/migration/012", "db_id": "5afe4b041eedace38feff2840e7529c9", "patch_ids": ["e6017d08f712f6a8b11473e76c2a5a2f"], "statement_hash": "1698fc2dc577bf8c808c47c68f428419c746a02bf0957b430600504cfa338029", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-47dc5f9a3fb701d0", "cves": [], "html": "<p>更新扩展函数在适当之处标记为并行安全（Andreas Karlsson）</p>\n<p>许多标准扩展已被更新以允许其函数在并行查询工作者进程中执行。这些更改在从以前版本 <span>pg_upgrade</span> 过来的数据库中不会生效，除非对每个这种扩展（在集簇的每个数据库中）应用 <code>ALTER EXTENSION UPDATE</code>。</p>", "text": "更新扩展函数在适当之处标记为并行安全（Andreas Karlsson） 许多标准扩展已被更新以允许其函数在并行查询工作者进程中执行。这些更改在从以前版本 pg_upgrade 过来的数据库中不会生效，除非对每个这种扩展（在集簇的每个数据库中）应用 ALTER EXTENSION UPDATE。", "title": "更新扩展函数在适当之处标记为并行安全", "commits": [], "section": "兼容性", "category": "compatibility", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4", "source_hash": "0f1735b2d333d989ab19ad7aa8164b054d0498bce855a80eb86c4e061fd887e6", "section_path": ["兼容性"], "commit_groups": [["a89b4b1be"]], "identity_text": "Update extension functions to be marked parallel-safe where appropriate (Andreas Karlsson) Many of the standard extensions have been updated to allow their functions to be executed within parallel query worker processes. These changes will not take effect in databases pg_upgrade'd from prior versions unless you apply ALTER EXTENSION UPDATE to each such extension (in each database of a cluster).", "commit_aliases": ["a89b4b1be"], "source_commits": ["a89b4b1be"], "source_entry_id": "9.6.0/migration/013", "db_id": "ab1d1ca160fae426ee12ffbb7759055d", "patch_ids": ["aaeac8e4bb0600da8eedf031229263af"], "statement_hash": "c9150d5604f50e26b9ebcd2f828290ff3645d3a31f8f88ad3c0b59d0dae9a5d0", "relations": [], "version": "9.6.0", "category_label": "兼容性变化", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-da78efed596cadbb", "cves": [], "html": "<p>并行查询（Robert Haas、Amit Kapila、David Rowley 等许多人）</p>\n<p>在 9.6 中，<span>PostgreSQL</span> 引入了对大查询并行执行的初步支持。只有驱动表通过顺序扫描访问的严格只读查询可以并行化。哈希连接和嵌套循环可以并行执行，聚合（对受支持的聚合）也是。还有很多工作要做，但这已经是一组有用的特性。</p>\n<p>并行查询执行（还）没有默认启用。要允许它，把新配置参数<a href=\"/docs/9.6/runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS-PER-GATHER\">max_parallel_workers_per_gather</a>设为大于零的值。对并行性使用的额外控制可通过其他新配置参数<a href=\"/docs/9.6/runtime-config-query.html#GUC-FORCE-PARALLEL-MODE\">force_parallel_mode</a>、<a href=\"/docs/9.6/runtime-config-query.html#GUC-PARALLEL-SETUP-COST\">parallel_setup_cost</a>、<a href=\"/docs/9.6/runtime-config-query.html#GUC-PARALLEL-TUPLE-COST\">parallel_tuple_cost</a>和<a href=\"/docs/9.6/runtime-config-query.html#GUC-MIN-PARALLEL-RELATION-SIZE\">min_parallel_relation_size</a>获得。</p>", "text": "并行查询（Robert Haas、Amit Kapila、David Rowley 等许多人） 在 9.6 中，PostgreSQL 引入了对大查询并行执行的初步支持。只有驱动表通过顺序扫描访问的严格只读查询可以并行化。哈希连接和嵌套循环可以并行执行，聚合（对受支持的聚合）也是。还有很多工作要做，但这已经是一组有用的特性。 并行查询执行（还）没有默认启用。要允许它，把新配置参数max_parallel_workers_per_gather设为大于零的值。对并行性使用的额外控制可通过其他新配置参数force_parallel_mode、parallel_setup_cost、parallel_tuple_cost和min_parallel_relation_size获得。", "title": "并行查询（Robert Haas、Amit Kapila、David Rowley 等许多人）", "commits": [], "section": "服务器 / 并行查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.2", "source_hash": "55e634fa02154adadcbdb0702b8faeb98e5c11eecfcbec9621048480e77db24f", "section_path": ["服务器", "并行查询"], "commit_groups": [["11c8669c0"], ["1efc7e538"], ["25fe8b5f1"], ["3bd909b22"], ["45be99f8c"], ["4a4e6893a"], ["57a6a72b6"], ["59eb55127"], ["69d34408e"], ["6e71dd7ce"], ["72ce78162"], ["75be66464"], ["7bea19d0a"], ["7c944bd90"], ["80558c1f5"], ["a0d9f6e43"], ["a1c1af2a1"], ["a53c06a13"], ["b287df70e"], ["bfc78d719"], ["c9ce4a1c6"], ["d1b7c1ffe"], ["e06a38965"], ["ee7ca559f"], ["f0661c4e8"], ["f85b1a841"]], "identity_text": "Parallel queries (Robert Haas, Amit Kapila, David Rowley, many others) With 9.6, PostgreSQL introduces initial support for parallel execution of large queries. Only strictly read-only queries where the driving table is accessed via a sequential scan can be parallelized. Hash joins and nested loops can be performed in parallel, as can aggregation (for supported aggregates). Much remains to be done, but this is already a useful set of features. Parallel query execution is not (yet) enabled by default. To allow it, set the new configuration parameter guc-max-parallel-workers-per-gather to a value larger than zero. Additional control over use of parallelism is available through other new configuration parameters guc-force-parallel-mode , guc-parallel-setup-cost , guc-parallel-tuple-cost , and guc-min-parallel-relation-size .", "commit_aliases": ["11c8669c0", "1efc7e538", "25fe8b5f1", "3bd909b22", "45be99f8c", "4a4e6893a", "57a6a72b6", "59eb55127", "69d34408e", "6e71dd7ce", "72ce78162", "75be66464", "7bea19d0a", "7c944bd90", "80558c1f5", "a0d9f6e43", "a1c1af2a1", "a53c06a13", "b287df70e", "bfc78d719", "c9ce4a1c6", "d1b7c1ffe", "e06a38965", "ee7ca559f", "f0661c4e8", "f85b1a841"], "source_commits": ["11c8669c0", "1efc7e538", "25fe8b5f1", "3bd909b22", "45be99f8c", "4a4e6893a", "57a6a72b6", "59eb55127", "69d34408e", "6e71dd7ce", "72ce78162", "75be66464", "7bea19d0a", "7c944bd90", "80558c1f5", "a0d9f6e43", "a1c1af2a1", "a53c06a13", "b287df70e", "bfc78d719", "c9ce4a1c6", "d1b7c1ffe", "e06a38965", "ee7ca559f", "f0661c4e8", "f85b1a841"], "source_entry_id": "9.6.0/changes/001", "db_id": "22b2014145e35233da7ced351b18ef4d", "patch_ids": ["001cca10c70acf6177ab1217eeca697a", "0d3f74792898dc39bde7efe7eca975a2", "17d991abd00a3c648ea5650546e09ca0", "18e9f56e9c810deb596144284fb10f33", "2283e740857d7dff852570a151eaec7b", "2fff3db6bdec060c535b5e91c3fa594a", "41f884cae78b316da0312bfebf8073c1", "520b16c8e18008b2595a89f26a594e56", "621719f002265d61193ca9754db04a74", "6972d6aaef39874f38835bac272d10a3", "6a70216c928118ab558fc741be67b05d", "6f8bb21409ca075899b6aa07d3416004", "781f23a81096db288d37a44a78a36796", "7d027bc09def3e52c68dfa2f16e32092", "879e529f084ad2b511a84123c4670753", "95ca31bd9678aaf5d3b0a93842deb93f", "98be47afd1deeb332ed6a79210df0545", "a1fdce3220d2f3c58b2b478f379e6892", "aca605db471104f5402a59ff6f9cce8c", "c4db81f2216ccae956e896478d8eaf15", "d2dd7d8f46472d97a8a3001e97cb69bf", "d360915fafda6c11de193f0ab65fad37", "de3489345f819ee847abce5473ab618e", "f7d7b531f6d3a1c066f9562d0945c70a", "f8ced9215273a75d487cbb38587ce4fe", "fb081e5eb27a83f10b7388dae9ec235d"], "statement_hash": "652a42eb767e5391fe6d5a6f3506466e5314c4094638a9e496ecc70e0496f4f5", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-83a1b0c297bdcf06", "cves": [], "html": "<p>提供标记函数并行安全状态的基础设施（Robert Haas、Amit Kapila）</p>", "text": "提供标记函数并行安全状态的基础设施（Robert Haas、Amit Kapila）", "title": "提供标记函数并行安全状态的基础设施", "commits": [], "section": "服务器 / 并行查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.2", "source_hash": "a5a4c45369f775a9a3fbde34c4a4a75bd21f5ec0050c0331df8ba3b6d5015aeb", "section_path": ["服务器", "并行查询"], "commit_groups": [["7aea8e4f2"]], "identity_text": "Provide infrastructure for marking the parallel-safety status of functions (Robert Haas, Amit Kapila)", "commit_aliases": ["7aea8e4f2"], "source_commits": ["7aea8e4f2"], "source_entry_id": "9.6.0/changes/002", "db_id": "6a6b0a8c71f2467504be5f5d4179523a", "patch_ids": ["01343dd54039ebf13b9cceb510efa9b1"], "statement_hash": "8c421de313c1db27697e30d6c94477f6b8967c8aaaf46046414b948ef69951cf", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-27fc6aec9e047d0b", "cves": [], "html": "<p>允许 <a href=\"/docs/9.6/gin.html\" title=\"第 63 章 GIN 索引\"><acronym>GIN</acronym></a> 索引构建有效利用大于 1 GB 的<a href=\"/docs/9.6/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM\">maintenance_work_mem</a>设置（Robert Abraham、Teodor Sigaev）</p>", "text": "允许 GIN 索引构建有效利用大于 1 GB 的maintenance_work_mem设置（Robert Abraham、Teodor Sigaev）", "title": "允许 GIN 索引构建有效利用大于 1 GB 的maintenance_work_mem设置", "commits": [], "section": "服务器 / 索引", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.3", "source_hash": "f60364880a957fc6988f88dd1e4515b8ab59368a2a8e4dcea04792f2996aba2c", "section_path": ["服务器", "索引"], "commit_groups": [["30bb26b5e"]], "identity_text": "Allow GIN index builds to make effective use of guc-maintenance-work-mem settings larger than 1 GB (Robert Abraham, Teodor Sigaev)", "commit_aliases": ["30bb26b5e"], "source_commits": ["30bb26b5e"], "source_entry_id": "9.6.0/changes/003", "db_id": "4ce29972d221a2fc17eb6004eeba007e", "patch_ids": ["4ca858f33a0bdf40f3ccda9e8e69d6ba"], "statement_hash": "35971771b13fb98f802d2691bca58f62b89bf19715a50a5cf7fbf311493071ef", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e3add0e917284ce8", "cves": [], "html": "<p>把从 GIN 索引未决列表删除的页立即加入空闲空间映射（Jeff Janes、Teodor Sigaev）</p>\n<p>这减少了表不常清理时的膨胀。</p>", "text": "把从 GIN 索引未决列表删除的页立即加入空闲空间映射（Jeff Janes、Teodor Sigaev） 这减少了表不常清理时的膨胀。", "title": "把从 GIN 索引未决列表删除的页立即加入空闲空间映射", "commits": [], "section": "服务器 / 索引", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.3", "source_hash": "eafb290fe540de1f4663261e927934cd67bcd207a6a56a7ca81b3310c380a22f", "section_path": ["服务器", "索引"], "commit_groups": [["dc943ad95"], ["e95680832"]], "identity_text": "Add pages deleted from a GIN index's pending list to the free space map immediately (Jeff Janes, Teodor Sigaev) This reduces bloat if the table is not vacuumed often.", "commit_aliases": ["dc943ad95", "e95680832"], "source_commits": ["dc943ad95", "e95680832"], "source_entry_id": "9.6.0/changes/004", "db_id": "7cc6c7bcaad396c7c5e880c1963c59c7", "patch_ids": ["10261b92ee30c9cf9e5f157477029a4e", "f38cdd78b4755b72996cce4e8f1bb761"], "statement_hash": "410daf0bb70805397c5304921174e09d8d1dd6dd6396e5e62e23f54190b4893c", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-098873bc98a60d62", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-ADMIN-INDEX\" title=\"9.26.8. 索引维护函数\"><code>gin_clean_pending_list()</code></a> 函数以允许手动调用 GIN 索引的未决列表清理（Jeff Janes）</p>\n<p>以前这种清理只作为清理或分析父表的副产品发生。</p>", "text": "添加 gin_clean_pending_list() 函数以允许手动调用 GIN 索引的未决列表清理（Jeff Janes） 以前这种清理只作为清理或分析父表的副产品发生。", "title": "添加 gin_clean_pending_list() 函数以允许手动调用 GIN 索引的未决列表清理", "commits": [], "section": "服务器 / 索引", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.3", "source_hash": "7d106a0569ed48a62f23267658939a246b82472f44c8af31f983a6b551e4eaac", "section_path": ["服务器", "索引"], "commit_groups": [["7f46eaf03"]], "identity_text": "Add gin_clean_pending_list() function to allow manual invocation of pending-list cleanup for a GIN index (Jeff Janes) Formerly, such cleanup happened only as a byproduct of vacuuming or analyzing the parent table.", "commit_aliases": ["7f46eaf03"], "source_commits": ["7f46eaf03"], "source_entry_id": "9.6.0/changes/005", "db_id": "cc9b4f36b81b8f1228fe91ad2d4ada4c", "patch_ids": ["8e11c602027357db7c16f738cd62ec76"], "statement_hash": "c475a1156b69272cc6b02727cae9495ea09bc2dd5f745df1c6f70f6f5dfcf482", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a82a719a6bb31f2e", "cves": [], "html": "<p>改进 <a href=\"/docs/9.6/gist.html\" title=\"第 61 章 GiST 索引\">GiST</a> 索引中死索引元组的处理（Anastasia Lubennikova）</p>\n<p>现在当索引扫描注意到相应的堆元组已死时，死索引元组会被如此标记。插入元组时，标记为死的元组将在需要为页面腾出空间时被移除。</p>", "text": "改进 GiST 索引中死索引元组的处理（Anastasia Lubennikova） 现在当索引扫描注意到相应的堆元组已死时，死索引元组会被如此标记。插入元组时，标记为死的元组将在需要为页面腾出空间时被移除。", "title": "改进 GiST 索引中死索引元组的处理", "commits": [], "section": "服务器 / 索引", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.3", "source_hash": "0ce368e5a50fc34a166d6896a7bccc61e0bcd655ec7daf93bcc54d3f81d01ead", "section_path": ["服务器", "索引"], "commit_groups": [["013ebc0a7"], ["22f519c92"]], "identity_text": "Improve handling of dead index tuples in GiST indexes (Anastasia Lubennikova) Dead index tuples are now marked as such when an index scan notices that the corresponding heap tuple is dead. When inserting tuples, marked-dead tuples will be removed if needed to make space on the page.", "commit_aliases": ["013ebc0a7", "22f519c92"], "source_commits": ["013ebc0a7", "22f519c92"], "source_entry_id": "9.6.0/changes/006", "db_id": "66e2a9b5ebfdbb5ce043724ccd8e3568", "patch_ids": ["66da618d9659de6fd39a70cc2bfe2a26", "6ba8061fa9230605f7a6154173258801"], "statement_hash": "df31c6cfa41bab1ebe5108924eb9c5b710b31c60d5b24d42021a9247dec6b953", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-90162d136ed6492a", "cves": [], "html": "<p>为 <code>box</code> 类型添加 <a href=\"/docs/9.6/spgist.html\" title=\"第 62 章 SP-GiST 索引\">SP-GiST</a> 操作符类（Alexander Lebedev）</p>", "text": "为 box 类型添加 SP-GiST 操作符类（Alexander Lebedev）", "title": "为 box 类型添加 SP-GiST 操作符类", "commits": [], "section": "服务器 / 索引", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.3", "source_hash": "ddec185ba133b413543f06f77ab74df397c068ba8307689d1aefac9082917cf1", "section_path": ["服务器", "索引"], "commit_groups": [["acdf2a8b3"]], "identity_text": "Add an SP-GiST operator class for type box (Alexander Lebedev)", "commit_aliases": ["acdf2a8b3"], "source_commits": ["acdf2a8b3"], "source_entry_id": "9.6.0/changes/007", "db_id": "3c2849a46fd2303223d7ce30ccab4cf0", "patch_ids": ["b28ef3cb630b33433ee457a8e40e09af"], "statement_hash": "0cb6eb84545f6f2d371db0d960fa176f034c89817b394201d97a8c27e25b7c07", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-85c912a2d26d75e5", "cves": [], "html": "<p>通过在执行外部排序步骤时使用快速排序而非替换选择排序来改进排序性能（Peter Geoghegan）</p>\n<p>新方法对典型缓存大小和数据量更好地利用了 <acronym>CPU</acronym> 缓存。必要时可以通过新配置参数<a href=\"/docs/9.6/runtime-config-resource.html#GUC-REPLACEMENT-SORT-TUPLES\">replacement_sort_tuples</a>调整行为。</p>", "text": "通过在执行外部排序步骤时使用快速排序而非替换选择排序来改进排序性能（Peter Geoghegan） 新方法对典型缓存大小和数据量更好地利用了 CPU 缓存。必要时可以通过新配置参数replacement_sort_tuples调整行为。", "title": "通过在执行外部排序步骤时使用快速排序而非替换选择排序来改进排序性能", "commits": [], "section": "服务器 / 排序", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.4", "source_hash": "e2edf68efa7ac0dfccec3849e773c8f72f65190e12de2a7a4f07198571f9cf4d", "section_path": ["服务器", "排序"], "commit_groups": [["0011c0091"], ["071180377"], ["96ba40c0f"]], "identity_text": "Improve sorting performance by using quicksort, not replacement selection sort, when performing external sort steps (Peter Geoghegan) The new approach makes better use of the CPU cache for typical cache sizes and data volumes. Where necessary, the behavior can be adjusted via the new configuration parameter guc-replacement-sort-tuples .", "commit_aliases": ["0011c0091", "071180377", "96ba40c0f"], "source_commits": ["0011c0091", "071180377", "96ba40c0f"], "source_entry_id": "9.6.0/changes/008", "db_id": "89f607a2f70352ab1f4ec4b3d1c6c8ed", "patch_ids": ["1d67c30b3ab9e0e4e76c20b8ce75e8a8", "3b4005a2784f490d6718be156a4ce7e9", "61ea6a9b76ec618b35a63dc3405a3441"], "statement_hash": "22d88b29a61f697efbf7316fe5336f0db6bb4b3a43fb0687ea7e99d154675206", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6e0198d2559a745f", "cves": [], "html": "<p>加速同一字符串出现多次的文本排序（Peter Geoghegan）</p>", "text": "加速同一字符串出现多次的文本排序（Peter Geoghegan）", "title": "加速同一字符串出现多次的文本排序", "commits": [], "section": "服务器 / 排序", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.4", "source_hash": "c8af6c34fffad748e6d99e9914d2fd5011de2341b95e06d6238965f30c99ed7f", "section_path": ["服务器", "排序"], "commit_groups": [["0e57b4d8b"], ["5be94a9eb"]], "identity_text": "Speed up text sorts where the same string occurs multiple times (Peter Geoghegan)", "commit_aliases": ["0e57b4d8b", "5be94a9eb"], "source_commits": ["0e57b4d8b", "5be94a9eb"], "source_entry_id": "9.6.0/changes/009", "db_id": "43ab90e69700b0c832859e3fe79bb1b9", "patch_ids": ["30f408ab95f1d3581cb193feb274852f", "584065102f06d557ea356dc113358601"], "statement_hash": "58ebb9ad07b68ee30a4c0d26c5c5d95050958bc133823c19b8eee51285ecadf3", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-2555a54f89a7862e", "cves": [], "html": "<p>通过使用<span>“<span>缩写</span>”</span>键加速 <code>uuid</code>、<code>bytea</code> 和 <code>char(n)</code> 字段的排序（Peter Geoghegan）</p>\n<p>对非默认操作符类 <a href=\"/docs/9.6/indexes-opclass.html\" title=\"11.9. 操作符类和操作符族\"><code>text_pattern_ops</code></a>、<code>varchar_pattern_ops</code> 和 <code>bpchar_pattern_ops</code> 也添加了缩写键支持。有序集聚合的处理现在也可以利用缩写键。</p>", "text": "通过使用“缩写”键加速 uuid、bytea 和 char(n) 字段的排序（Peter Geoghegan） 对非默认操作符类 text_pattern_ops、varchar_pattern_ops 和 bpchar_pattern_ops 也添加了缩写键支持。有序集聚合的处理现在也可以利用缩写键。", "title": "通过使用“缩写”键加速 uuid、bytea 和 char(n) 字段的排序", "commits": [], "section": "服务器 / 排序", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.4", "source_hash": "54d3d5453b0b6269e7e909d7ce56e71750b5c2227d4fe12c5dabdfdf5955c49d", "section_path": ["服务器", "排序"], "commit_groups": [["a76ef15d9"], ["b47b4dbf6"], ["f1f5ec1ef"]], "identity_text": "Speed up sorting of uuid, bytea, and char(n) fields by using abbreviated keys (Peter Geoghegan) Support for abbreviated keys has also been added to the non-default operator classes text_pattern_ops, varchar_pattern_ops, and bpchar_pattern_ops. Processing of ordered-set aggregates can also now exploit abbreviated keys.", "commit_aliases": ["a76ef15d9", "b47b4dbf6", "f1f5ec1ef"], "source_commits": ["a76ef15d9", "b47b4dbf6", "f1f5ec1ef"], "source_entry_id": "9.6.0/changes/010", "db_id": "5496090e79dc2420a800bbf1a219ae33", "patch_ids": ["09adea115dbeca4d15216d8d10cb3923", "73f5c221e4c28ae5bfca36995402f01f", "a6010cb4597af4647a1f2e193709e20d"], "statement_hash": "a832061263c6c1925ad3ee1394ad63d1bf65a4dfe868222ed7aa65cac4b5c43f", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e392f7ddbc2cec2a", "cves": [], "html": "<p>通过在排序期间把 <acronym>TID</acronym> 当作 64 位整数加速 <code>CREATE INDEX CONCURRENTLY</code>（Peter Geoghegan）</p>", "text": "通过在排序期间把 TID 当作 64 位整数加速 CREATE INDEX CONCURRENTLY（Peter Geoghegan）", "title": "通过在排序期间把 TID 当作 64 位整数加速 CREATE INDEX CONCURRENTLY", "commits": [], "section": "服务器 / 排序", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.4", "source_hash": "7d86d7188f5b2885cb9f44468d66d8caad378f4f672e9bc5768ff5ff4d2f9b44", "section_path": ["服务器", "排序"], "commit_groups": [["b648b7034"]], "identity_text": "Speed up CREATE INDEX CONCURRENTLY by treating TIDs as 64-bit integers during sorting (Peter Geoghegan)", "commit_aliases": ["b648b7034"], "source_commits": ["b648b7034"], "source_entry_id": "9.6.0/changes/011", "db_id": "87625ef8a2c4ed0a64be355a66b888fe", "patch_ids": ["724e01b95c2b479fab8d073239e992e4"], "statement_hash": "2639e4347a0cd082c50802403801d85037498d84d5dfd15fd3d54d1426584b54", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d11b7c057b7f458f", "cves": [], "html": "<p>减少对 <code>ProcArrayLock</code> 的争用（Amit Kapila、Robert Haas）</p>", "text": "减少对 ProcArrayLock 的争用（Amit Kapila、Robert Haas）", "title": "减少对 ProcArrayLock 的争用", "commits": [], "section": "服务器 / 锁定", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.5", "source_hash": "23f6c0bd2b76e2540b6f8d1fd54ff19344727e4ac0ed9ceac4c2f93fc3e95ee9", "section_path": ["服务器", "锁定"], "commit_groups": [["0e141c0fb"], ["4aec49899"]], "identity_text": "Reduce contention for the ProcArrayLock (Amit Kapila, Robert Haas)", "commit_aliases": ["0e141c0fb", "4aec49899"], "source_commits": ["0e141c0fb", "4aec49899"], "source_entry_id": "9.6.0/changes/012", "db_id": "5beef537d00340ddc362c29a43c6b141", "patch_ids": ["703c7b427759194c0907b6bd3fa3a011", "9c6497cefe2f8be4f23aeb88c413fa0a"], "statement_hash": "1e0a9b23a779a64a676b22cc0e0aeab1433580b7628c5030ccc05b3e6ebd8202", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-9a5e0e03fb19987d", "cves": [], "html": "<p>通过把缓冲区内容锁移入缓冲区描述符来改进性能（Andres Freund、Simon Riggs）</p>", "text": "通过把缓冲区内容锁移入缓冲区描述符来改进性能（Andres Freund、Simon Riggs）", "title": "通过把缓冲区内容锁移入缓冲区描述符来改进性能", "commits": [], "section": "服务器 / 锁定", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.5", "source_hash": "b9f7d081c338ebd8254d0c787ffbdc0068bbb4b9cd5de6677271fb9ff9f29e72", "section_path": ["服务器", "锁定"], "commit_groups": [["6150a1b08"]], "identity_text": "Improve performance by moving buffer content locks into the buffer descriptors (Andres Freund, Simon Riggs)", "commit_aliases": ["6150a1b08"], "source_commits": ["6150a1b08"], "source_entry_id": "9.6.0/changes/013", "db_id": "2a8c0bf4123012399ff3825a19c9f23f", "patch_ids": ["0715445a72e691951db91c8b8320c978"], "statement_hash": "fd3cf081c54f9ddfff91b7f5c0198d10138e451c05943b0311fc9e764bb5123b", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-7f0b390ecdb956f6", "cves": [], "html": "<p>用原子操作替换共享缓冲区头自旋锁以改进可伸缩性（Alexander Korotkov、Andres Freund）</p>", "text": "用原子操作替换共享缓冲区头自旋锁以改进可伸缩性（Alexander Korotkov、Andres Freund）", "title": "用原子操作替换共享缓冲区头自旋锁以改进可伸缩性", "commits": [], "section": "服务器 / 锁定", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.5", "source_hash": "b0db1115ecd211ba95f46383a21aed25f952667424b9c8e64cb9dcba884a55e4", "section_path": ["服务器", "锁定"], "commit_groups": [["48354581a"]], "identity_text": "Replace shared-buffer header spinlocks with atomic operations to improve scalability (Alexander Korotkov, Andres Freund)", "commit_aliases": ["48354581a"], "source_commits": ["48354581a"], "source_entry_id": "9.6.0/changes/014", "db_id": "853a98e108d16d9ebce23900c2258fdf", "patch_ids": ["ad76e7d55d2739f6979af664af3b0ec5"], "statement_hash": "a26bb0411114c7bf718653d668127378670bc2faba1487b4fbed99eaadf8c1a0", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3e16296b7439677a", "cves": [], "html": "<p>使用原子操作而非自旋锁保护 <code>LWLock</code> 的等待队列（Andres Freund）</p>", "text": "使用原子操作而非自旋锁保护 LWLock 的等待队列（Andres Freund）", "title": "使用原子操作而非自旋锁保护 LWLock 的等待队列", "commits": [], "section": "服务器 / 锁定", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.5", "source_hash": "c7236ca5692b2010e572fd20c5006d7339112276a2de57e3d82d2a0f933372e2", "section_path": ["服务器", "锁定"], "commit_groups": [["008608b9d"]], "identity_text": "Use atomic operations, rather than a spinlock, to protect an LWLock's wait queue (Andres Freund)", "commit_aliases": ["008608b9d"], "source_commits": ["008608b9d"], "source_entry_id": "9.6.0/changes/015", "db_id": "e478df8e82eecb62f0cbcf8293a7c129", "patch_ids": ["f905a273abc22e03c4f227bcade14753"], "statement_hash": "f2072757e70786233965b31c28bae6482ed0d704ffbed399efcf25877d2ea364", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-f1e663f667cf7bba", "cves": [], "html": "<p>对共享哈希表空闲列表分区以减少多 <acronym>CPU</acronym> 插槽服务器上的争用（Aleksander Alekseev）</p>", "text": "对共享哈希表空闲列表分区以减少多 CPU 插槽服务器上的争用（Aleksander Alekseev）", "title": "对共享哈希表空闲列表分区以减少多 CPU 插槽服务器上的争用", "commits": [], "section": "服务器 / 锁定", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.5", "source_hash": "6e61dea0ac580ae9828d0f63b6ce3118a61dd8713f92beb8eaafa5b322b3282e", "section_path": ["服务器", "锁定"], "commit_groups": [["44ca4022f"]], "identity_text": "Partition the shared hash table freelist to reduce contention on multi-CPU-socket servers (Aleksander Alekseev)", "commit_aliases": ["44ca4022f"], "source_commits": ["44ca4022f"], "source_entry_id": "9.6.0/changes/016", "db_id": "628e3ed0a19b8fb2651c9c9768180621", "patch_ids": ["533b89668d0219b15c67700234c75829"], "statement_hash": "be12dffe344123e81c19a9f1ec3d8a2d25a3d9b49b50b3cd98601618160d43b6", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-8aecdd91c6c4f804", "cves": [], "html": "<p>减少备库服务器重放 btree 索引清理操作期间的互锁（Simon Riggs）</p>\n<p>此更改避免了重放这种操作期间有时发生的显著复制延迟。</p>", "text": "减少备库服务器重放 btree 索引清理操作期间的互锁（Simon Riggs） 此更改避免了重放这种操作期间有时发生的显著复制延迟。", "title": "减少备库服务器重放 btree 索引清理操作期间的互锁", "commits": [], "section": "服务器 / 锁定", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.5", "source_hash": "be7da5bd2f80dfb039a1c694aeb3f62aa80ef5de76b67e73b6d6b5023255cb50", "section_path": ["服务器", "锁定"], "commit_groups": [["3e4b7d879"], ["687f2cd7a"]], "identity_text": "Reduce interlocking on standby servers during the replay of btree index vacuuming operations (Simon Riggs) This change avoids substantial replication delays that sometimes occurred while replaying such operations.", "commit_aliases": ["3e4b7d879", "687f2cd7a"], "source_commits": ["3e4b7d879", "687f2cd7a"], "source_entry_id": "9.6.0/changes/017", "db_id": "1e687def3ff3806f736271ab00c2a6b2", "patch_ids": ["15a49227310ab6acfdd0b797d16ea019", "821d6dbbd4f4106b03b3aa706575182a"], "statement_hash": "dc84418d32241fe11b81bb0644e895a5be4e0249e5a2cca2410ac63939e2303e", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-407134ac028ca640", "cves": [], "html": "<p>改进 <code>ANALYZE</code> 对有许多空值的列的估计（Tomas Vondra、Alex Shulgin）</p>\n<p>此前 <code>ANALYZE</code> 倾向于低估有许多 <code>NULL</code> 的列中非 <code>NULL</code> 不同值的数量，计算最常见值也不准确。</p>", "text": "改进 ANALYZE 对有许多空值的列的估计（Tomas Vondra、Alex Shulgin） 此前 ANALYZE 倾向于低估有许多 NULL 的列中非 NULL 不同值的数量，计算最常见值也不准确。", "title": "改进 ANALYZE 对有许多空值的列的估计", "commits": [], "section": "服务器 / 优化器统计信息", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.6", "source_hash": "a95db36cb318cfb85cd1fb669ee505b0f260a1107ab18a397b8a85cdd7adfb69", "section_path": ["服务器", "优化器统计信息"], "commit_groups": [["391159e03"], ["3d3bf62f3"], ["be4b4dc75"]], "identity_text": "Improve ANALYZE's estimates for columns with many nulls (Tomas Vondra, Alex Shulgin) Previously ANALYZE tended to underestimate the number of non-NULL distinct values in a column with many NULLs, and was also inaccurate in computing the most-common values.", "commit_aliases": ["391159e03", "3d3bf62f3", "be4b4dc75"], "source_commits": ["391159e03", "3d3bf62f3", "be4b4dc75"], "source_entry_id": "9.6.0/changes/018", "db_id": "8c87736e436b84b5bcae3207c37c1533", "patch_ids": ["2d2dada1086542a313c8cd802a97ab52", "b9bc9c2c8df01d6b518c8e7180412f7e", "cd4b48faed68340af5cc5eee08bf036f"], "statement_hash": "0979a61cf9ca1d91957e6853645a5763285192c815bd5e875ad8b20cfad6d3cd", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c35df921b5a5993e", "cves": [], "html": "<p>改进规划器对查询结果中不同值数量的估计（Tomas Vondra）</p>", "text": "改进规划器对查询结果中不同值数量的估计（Tomas Vondra）", "title": "改进规划器对查询结果中不同值数量的估计", "commits": [], "section": "服务器 / 优化器统计信息", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.6", "source_hash": "46360575f2fc8461d43823245a6217e0d6b5542d807bd83651b1e2bf9280c13f", "section_path": ["服务器", "优化器统计信息"], "commit_groups": [["84f9a35e3"]], "identity_text": "Improve planner's estimate of the number of distinct values in a query result (Tomas Vondra)", "commit_aliases": ["84f9a35e3"], "source_commits": ["84f9a35e3"], "source_entry_id": "9.6.0/changes/019", "db_id": "a943b77d28ef57c29c4bd80738438103", "patch_ids": ["cabc0d5ff1e55cf86558d8994183318d"], "statement_hash": "ae2ee0645ff342d7fb07801c939610cdf731e858d2a3f90909a62b41e0a479e6", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-0fd7b32a080bf374", "cves": [], "html": "<p>使用外键关系推断连接谓词的选择率（Tomas Vondra、David Rowley）</p>\n<p>如果表 <code>t</code> 有外键限制，比如 <code>(a,b) REFERENCES r (x,y)</code>，那么诸如 <code>t.a = r.x AND t.b = r.y</code> 的 <code>WHERE</code> 条件对每个 <code>t</code> 行最多只能选择一个 <code>r</code> 行。规划器以前把这些 <code>AND</code> 条件视为独立的，因此常常严重误估选择率。现在它把 <code>WHERE</code> 条件与适用的外键约束比较并产生更好的估计。</p>", "text": "使用外键关系推断连接谓词的选择率（Tomas Vondra、David Rowley） 如果表 t 有外键限制，比如 (a,b) REFERENCES r (x,y)，那么诸如 t.a = r.x AND t.b = r.y 的 WHERE 条件对每个 t 行最多只能选择一个 r 行。规划器以前把这些 AND 条件视为独立的，因此常常严重误估选择率。现在它把 WHERE 条件与适用的外键约束比较并产生更好的估计。", "title": "使用外键关系推断连接谓词的选择率", "commits": [], "section": "服务器 / 优化器统计信息", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.6", "source_hash": "43de8bbac3d5862e6b6af3399da80b001a981c131d7f65b0386df5f85e52ffbe", "section_path": ["服务器", "优化器统计信息"], "commit_groups": [["100340e2d"], ["137805f89"], ["77ba61080"]], "identity_text": "Use foreign key relationships to infer selectivity for join predicates (Tomas Vondra, David Rowley) If a table t has a foreign key restriction, say (a,b) REFERENCES r (x,y), then a WHERE condition such as t.a = r.x AND t.b = r.y cannot select more than one r row per t row. The planner formerly considered these AND conditions to be independent and would often drastically misestimate selectivity as a result. Now it compares the WHERE conditions to applicable foreign key constraints and produces better estimates.", "commit_aliases": ["100340e2d", "137805f89", "77ba61080"], "source_commits": ["100340e2d", "137805f89", "77ba61080"], "source_entry_id": "9.6.0/changes/020", "db_id": "9559012b1bfc32eb348ea56b2797ba40", "patch_ids": ["2701ddbf4dc868e7f4bc2a2c595a3fbe", "54b53341a3d02c52e549ea2434a9e474", "a47e842ff02cc9940a333d7fb474a3ef"], "statement_hash": "4f1fe7a02041e7597130a9fe9e93334a866e9d686c7f2dff75278e1fc43470bf", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e719521db276560f", "cves": [], "html": "<p>避免重新清理只包含冻结元组的页（Masahiko Sawada、Robert Haas、Andres Freund）</p>\n<p>以前防回卷清理必须访问表的每一页，即使无事可做的页。现在只包含已冻结元组的页会在表的可见性映射中被标识，即使在防止事务回卷时也可以被清理跳过。这应能大大降低维护大部分数据不变的大表的代价。</p>\n<p>必要时可以用新的 <code>DISABLE_PAGE_SKIPPING</code> 选项强制清理处理全冻结页。通常永远不需要这样做，但它可能有助于从可见性映射损坏中恢复。</p>", "text": "避免重新清理只包含冻结元组的页（Masahiko Sawada、Robert Haas、Andres Freund） 以前防回卷清理必须访问表的每一页，即使无事可做的页。现在只包含已冻结元组的页会在表的可见性映射中被标识，即使在防止事务回卷时也可以被清理跳过。这应能大大降低维护大部分数据不变的大表的代价。 必要时可以用新的 DISABLE_PAGE_SKIPPING 选项强制清理处理全冻结页。通常永远不需要这样做，但它可能有助于从可见性映射损坏中恢复。", "title": "避免重新清理只包含冻结元组的页", "commits": [], "section": "服务器 / VACUUM", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.7", "source_hash": "791dd74a9e701ebc3a1c7096d9a0545ae3758e09140d9831343e36f98dc40eed", "section_path": ["服务器", "VACUUM"], "commit_groups": [["7087166a8"], ["77a1d1e79"], ["a892234f8"], ["e7caacf73"], ["eca0f1db1"], ["ede62e56f"], ["fd31cd265"]], "identity_text": "Avoid re-vacuuming pages containing only frozen tuples (Masahiko Sawada, Robert Haas, Andres Freund) Formerly, anti-wraparound vacuum had to visit every page of a table, even pages where there was nothing to do. Now, pages containing only already-frozen tuples are identified in the table's visibility map, and can be skipped by vacuum even when doing transaction wraparound prevention. This should greatly reduce the cost of maintaining large tables containing mostly-unchanging data. If necessary, vacuum can be forced to process all-frozen pages using the new DISABLE_PAGE_SKIPPING option. Normally this should never be needed, but it might help in recovering from visibility-map corruption.", "commit_aliases": ["7087166a8", "77a1d1e79", "a892234f8", "e7caacf73", "eca0f1db1", "ede62e56f", "fd31cd265"], "source_commits": ["7087166a8", "77a1d1e79", "a892234f8", "e7caacf73", "eca0f1db1", "ede62e56f", "fd31cd265"], "source_entry_id": "9.6.0/changes/021", "db_id": "4fff634fe4c65021820b4bd34fc8f211", "patch_ids": ["21ffba8dbb99be578423d9caeeb4b596", "46b5239444d2206e8d737f14aecb7c5f", "7004db6bcc17020cac1d71f274921098", "92806e19fade111e9115f486514fe609", "97ef2bb9ec2cc404576b05e68bce1bee", "cf90194faf3e57137865c657653cf710", "fe487206466a53c35b498a9cd3ccf8ed"], "statement_hash": "9e874c3f9e475f9067323387496e6109b1db3bbe8aa383f2fdd55a6ec6f81d97", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c3391392a88424a1", "cves": [], "html": "<p>避免 <code>VACUUM</code> 期间无用的堆截断尝试（Jeff Janes、Tom Lane）</p>\n<p>此更改在某些不可能截断的情况下避免取得排他表锁。主要好处是避免备库服务器上不必要的查询取消。</p>", "text": "避免 VACUUM 期间无用的堆截断尝试（Jeff Janes、Tom Lane） 此更改在某些不可能截断的情况下避免取得排他表锁。主要好处是避免备库服务器上不必要的查询取消。", "title": "避免 VACUUM 期间无用的堆截断尝试", "commits": [], "section": "服务器 / VACUUM", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.7", "source_hash": "cb19d95cd0932a5405ec68ff26d164fb6e92782d5cb0fbe5ff2a63cb7076e5f1", "section_path": ["服务器", "VACUUM"], "commit_groups": [["e84290823"]], "identity_text": "Avoid useless heap-truncation attempts during VACUUM (Jeff Janes, Tom Lane) This change avoids taking an exclusive table lock in some cases where no truncation is possible. The main benefit comes from avoiding unnecessary query cancellations on standby servers.", "commit_aliases": ["e84290823"], "source_commits": ["e84290823"], "source_entry_id": "9.6.0/changes/022", "db_id": "45b7f2bf818d4a1361495de54844eebc", "patch_ids": ["e4778db577972045fdd29448b88eef25"], "statement_hash": "5550b274ddf97f0e0b8c4dc1dd7839cb509e95ab375281877bd6fd39a98dbaa1", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-f86c2b95fa4f1299", "cves": [], "html": "<p>允许旧的 <acronym>MVCC</acronym> 快照在可配置的超时后失效（Kevin Grittner）</p>\n<p>通常，被删除的元组在最后一个可能<span>“<span>看到</span>”</span>它们的事务消失之前不能被清理物理移除。因此保持打开很长时间的事务可能因为空间无法回收而导致相当大的表膨胀。此特性允许通过新配置参数<a href=\"/docs/9.6/runtime-config-resource.html#GUC-OLD-SNAPSHOT-THRESHOLD\">old_snapshot_threshold</a>对 <acronym>MVCC</acronym> 快照保证有效的时间设置基于时间的限制。之后死元组就成为移除候选。使用过期快照的事务如果试图读取可能包含过这种数据的页，就会得到错误。</p>", "text": "允许旧的 MVCC 快照在可配置的超时后失效（Kevin Grittner） 通常，被删除的元组在最后一个可能“看到”它们的事务消失之前不能被清理物理移除。因此保持打开很长时间的事务可能因为空间无法回收而导致相当大的表膨胀。此特性允许通过新配置参数old_snapshot_threshold对 MVCC 快照保证有效的时间设置基于时间的限制。之后死元组就成为移除候选。使用过期快照的事务如果试图读取可能包含过这种数据的页，就会得到错误。", "title": "允许旧的 MVCC 快照在可配置的超时后失效", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "69332bc0fb59e4a23800d8dc0369de9eb65da2054b2a69818a91ea00e5cbd904", "section_path": ["服务器", "一般性能"], "commit_groups": [["2cc41acd8"], ["3e2f3c2e4"], ["7e3da1c47"], ["848ef42bb"], ["9ee1cf04a"]], "identity_text": "Allow old MVCC snapshots to be invalidated after a configurable timeout (Kevin Grittner) Normally, deleted tuples cannot be physically removed by vacuuming until the last transaction that could see them is gone. A transaction that stays open for a long time can thus cause considerable table bloat because space cannot be recycled. This feature allows setting a time-based limit, via the new configuration parameter guc-old-snapshot-threshold , on how long an MVCC snapshot is guaranteed to be valid. After that, dead tuples are candidates for removal. A transaction using an outdated snapshot will get an error if it attempts to read a page that potentially could have contained such data.", "commit_aliases": ["2cc41acd8", "3e2f3c2e4", "7e3da1c47", "848ef42bb", "9ee1cf04a"], "source_commits": ["2cc41acd8", "3e2f3c2e4", "7e3da1c47", "848ef42bb", "9ee1cf04a"], "source_entry_id": "9.6.0/changes/023", "db_id": "8dc7583034097fdde5e06c9247ba9975", "patch_ids": ["0eb023861354c58f42d3c89d729234cb", "6857d4022c275e5ec2aa6863a72f8514", "6d11f00e76adc261071a3e2a0b072968", "bdace6f6a2935faa2f443646e422fee0", "eb9881a24b93006ad76cd2d7e7446047"], "statement_hash": "c6af328a6049869cb8e62207f827d6f73a69edc93c44d60af306ef4a53ee84dc", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5a62f47432e90e4d", "cves": [], "html": "<p>忽略功能上依赖于其他列的 <code>GROUP BY</code> 列（David Rowley）</p>\n<p>如果 <code>GROUP BY</code> 子句包含非延迟主键的所有列以及同一表的其他列，那些其他列是冗余的、可以从分组中丢弃。这在许多常见场景中节省计算。</p>", "text": "忽略功能上依赖于其他列的 GROUP BY 列（David Rowley） 如果 GROUP BY 子句包含非延迟主键的所有列以及同一表的其他列，那些其他列是冗余的、可以从分组中丢弃。这在许多常见场景中节省计算。", "title": "忽略功能上依赖于其他列的 GROUP BY 列", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "3b8bacb30f4c9c8047e6485457738431189ac2e50b06bd82ce47d40acf325a67", "section_path": ["服务器", "一般性能"], "commit_groups": [["d4c3a156c"]], "identity_text": "Ignore GROUP BY columns that are functionally dependent on other columns (David Rowley) If a GROUP BY clause includes all columns of a non-deferred primary key, as well as other columns of the same table, those other columns are redundant and can be dropped from the grouping. This saves computation in many common cases.", "commit_aliases": ["d4c3a156c"], "source_commits": ["d4c3a156c"], "source_entry_id": "9.6.0/changes/024", "db_id": "5e7cbc86606cafafffa15497c84be1ef", "patch_ids": ["b6ee2fa10df0c6e8a0f39054ed05315c"], "statement_hash": "3d6b1fab112b9205540911c252eaa8b0aa6b90fbe7ae5057cc01e0860674ee5d", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-26541533724d92c3", "cves": [], "html": "<p>当部分索引的 <code>WHERE</code> 子句引用未被索引的列时，允许对它使用<a href=\"/docs/9.6/indexes-index-only-scans.html\" title=\"11.11. 仅索引扫描\">仅索引扫描</a>（Tomas Vondra、Kyotaro Horiguchi）</p>\n<p>例如由 <code>CREATE INDEX tidx_partial ON t(b) WHERE a &gt; 0</code> 定义的索引现在可以被指定了 <code>WHERE a &gt; 0</code> 且不以其他方式使用 <code>a</code> 的查询用于仅索引扫描。以前这是不允许的，因为 <code>a</code> 未被列为索引列。</p>", "text": "当部分索引的 WHERE 子句引用未被索引的列时，允许对它使用仅索引扫描（Tomas Vondra、Kyotaro Horiguchi） 例如由 CREATE INDEX tidx_partial ON t(b) WHERE a > 0 定义的索引现在可以被指定了 WHERE a > 0 且不以其他方式使用 a 的查询用于仅索引扫描。以前这是不允许的，因为 a 未被列为索引列。", "title": "当部分索引的 WHERE 子句引用未被索引的列时，允许对它使用仅索引扫描", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "d382a828fa7d8d1ffedebc36fbe3d12279ed32640acc13c76b407e6319c29a90", "section_path": ["服务器", "一般性能"], "commit_groups": [["f9aefcb91"]], "identity_text": "Allow use of an index-only scan on a partial index when the index's WHERE clause references columns that are not indexed (Tomas Vondra, Kyotaro Horiguchi) For example, an index defined by CREATE INDEX tidx_partial ON t(b) WHERE a > 0 can now be used for an index-only scan by a query that specifies WHERE a > 0 and does not otherwise use a. Previously this was disallowed because a is not listed as an index column.", "commit_aliases": ["f9aefcb91"], "source_commits": ["f9aefcb91"], "source_entry_id": "9.6.0/changes/025", "db_id": "461cd50f77ba5110ad5fc304495c8d28", "patch_ids": ["279a399cf2efa25a5b5b4fce280a7d11"], "statement_hash": "0c05826880065e01d4c7527663ae519210c964bc18b399bb25c0afee416538f9", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c9e4e94dffe3996f", "cves": [], "html": "<p>按排序顺序执行检查点写（Fabien Coelho、Andres Freund）</p>\n<p>以前检查点以脏页碰巧出现在共享缓冲区中的顺序（通常近乎随机）写出它们。这性能很差，特别是在旋转介质上。此更改使检查点驱动的写按文件和块号顺序执行，并在表空间之间平衡。</p>", "text": "按排序顺序执行检查点写（Fabien Coelho、Andres Freund） 以前检查点以脏页碰巧出现在共享缓冲区中的顺序（通常近乎随机）写出它们。这性能很差，特别是在旋转介质上。此更改使检查点驱动的写按文件和块号顺序执行，并在表空间之间平衡。", "title": "按排序顺序执行检查点写", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "1bb6a5f0702dac7b8b44663c858f147778cfa5ae6c29e5ba6c26e9d5611501d8", "section_path": ["服务器", "一般性能"], "commit_groups": [["9cd00c457"]], "identity_text": "Perform checkpoint writes in sorted order (Fabien Coelho, Andres Freund) Previously, checkpoints wrote out dirty pages in whatever order they happen to appear in shared buffers, which usually is nearly random. That performs poorly, especially on rotating media. This change causes checkpoint-driven writes to be done in order by file and block number, and to be balanced across tablespaces.", "commit_aliases": ["9cd00c457"], "source_commits": ["9cd00c457"], "source_entry_id": "9.6.0/changes/026", "db_id": "68bd27b010217fe2e83e36e70ca9471b", "patch_ids": ["24e3f6d78c048c0c7d020762218a318f"], "statement_hash": "97f3fb4a95b032423deee21b15ed8bc40c8c82f8df69a466d5fe7b90b8d417a4", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c8c62edc91c0634d", "cves": [], "html": "<p>在可行之处，在可配置次数的写之后触发内核回写，以防止内核磁盘缓冲区中脏数据的积累（Fabien Coelho、Andres Freund）</p>\n<p><span>PostgreSQL</span> 把数据写入内核的磁盘缓存，之后在适当时候被刷到物理存储。许多操作系统对此管理不善，允许大量脏数据积累后才决定一次全部刷出，导致新 I/O 请求长时间延迟直到刷写完成。此更改尝试通过在可配置间隔后显式请求数据刷写来缓解此问题。</p>\n<p>在 Linux 上为此使用 <code>sync_file_range()</code>，并且该特性在 Linux 上默认打开，因为该函数几乎没有缺点。如果其他平台有 <code>msync()</code> 或 <code>posix_fadvise()</code>，这种刷写能力也可用，但这些接口有一些不良副作用，因此该特性在非 Linux 平台上默认禁用。</p>\n<p>新配置参数<a href=\"/docs/9.6/runtime-config-resource.html#GUC-BACKEND-FLUSH-AFTER\">backend_flush_after</a>、<a href=\"/docs/9.6/runtime-config-resource.html#GUC-BGWRITER-FLUSH-AFTER\">bgwriter_flush_after</a>、<a href=\"/docs/9.6/runtime-config-wal.html#GUC-CHECKPOINT-FLUSH-AFTER\">checkpoint_flush_after</a>和<a href=\"/docs/9.6/runtime-config-wal.html#GUC-WAL-WRITER-FLUSH-AFTER\">wal_writer_flush_after</a>控制这一行为。</p>", "text": "在可行之处，在可配置次数的写之后触发内核回写，以防止内核磁盘缓冲区中脏数据的积累（Fabien Coelho、Andres Freund） PostgreSQL 把数据写入内核的磁盘缓存，之后在适当时候被刷到物理存储。许多操作系统对此管理不善，允许大量脏数据积累后才决定一次全部刷出，导致新 I/O 请求长时间延迟直到刷写完成。此更改尝试通过在可配置间隔后显式请求数据刷写来缓解此问题。 在 Linux 上为此使用 sync_file_range()，并且该特性在 Linux 上默认打开，因为该函数几乎没有缺点。如果其他平台有 msync() 或 posix_fadvise()，这种刷写能力也可用，但这些接口有一些不良副作用，因此该特性在非 Linux 平台上默认禁用。 新配置参数backend_flush_after、bgwriter_flush_after、checkpoint_flush_after和wal_writer_flush_after控制这一行为。", "title": "在可行之处，在可配置次数的写之后触发内核回写，以防止内核磁盘缓冲区中脏数据的积累", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "deb4ed9039a7c14ccc489a468957a514079e2d3264a816f1af7026e409f1fc02", "section_path": ["服务器", "一般性能"], "commit_groups": [["428b1d6b2"], ["4bc0f165c"], ["72a98a639"], ["7975c5e0a"], ["8f91d87d4"], ["a71248708"], ["fa11a09fe"]], "identity_text": "Where feasible, trigger kernel writeback after a configurable number of writes, to prevent accumulation of dirty data in kernel disk buffers (Fabien Coelho, Andres Freund) PostgreSQL writes data to the kernel's disk cache, from where it will be flushed to physical storage in due time. Many operating systems are not smart about managing this and allow large amounts of dirty data to accumulate before deciding to flush it all at once, causing long delays for new I/O requests until the flushing finishes. This change attempts to alleviate this problem by explicitly requesting data flushes after a configurable interval. On Linux, sync_file_range() is used for this purpose, and the feature is on by default on Linux because that function has few downsides. This flushing capability is also available on other platforms if they have msync() or posix_fadvise(), but those interfaces have some undesirable side-effects so the feature is disabled by default on non-Linux platforms. The new configuration parameters guc-backend-flush-after , guc-bgwriter-flush-after , guc-checkpoint-flush-after , and guc-wal-writer-flush-after control this behavior.", "commit_aliases": ["428b1d6b2", "4bc0f165c", "72a98a639", "7975c5e0a", "8f91d87d4", "a71248708", "fa11a09fe"], "source_commits": ["428b1d6b2", "4bc0f165c", "72a98a639", "7975c5e0a", "8f91d87d4", "a71248708", "fa11a09fe"], "source_entry_id": "9.6.0/changes/027", "db_id": "7694688677b4bae3f35eca40cfdd36b8", "patch_ids": ["1f8b632f4794dd40089f690da7a39da9", "3e1fd2d585d4850c696d17cabe1dc1e5", "512ba841e5f89272c96aa467b614803f", "597e8ad77c91d7823cbb00fdb0bf9864", "7e45f40be5b000c96b39c21c7fe1cab1", "8d7cf2345f83d4d16ac7e515899f5a1d", "bd891e9e15b76822e9477d04ab0913ef"], "statement_hash": "9e8848333a27b7337b27a78c2def53c7d73667a3355a7e5126ee19817ae98256", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-14391c4723ffded5", "cves": [], "html": "<p>通过在多个聚合有相同参数和转换函数时共享计算来改进聚合函数性能（David Rowley）</p>\n<p>例如 <code>SELECT AVG(x), VARIANCE(x) FROM tab</code> 可以对两个聚合使用单次逐行计算。</p>", "text": "通过在多个聚合有相同参数和转换函数时共享计算来改进聚合函数性能（David Rowley） 例如 SELECT AVG(x), VARIANCE(x) FROM tab 可以对两个聚合使用单次逐行计算。", "title": "通过在多个聚合有相同参数和转换函数时共享计算来改进聚合函数性能", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "982fef438f3f3469aa7c765d870ea5ea811d5b8f63cae1b78e1a1bbadacf101d", "section_path": ["服务器", "一般性能"], "commit_groups": [["804163bc2"]], "identity_text": "Improve aggregate-function performance by sharing calculations across multiple aggregates if they have the same arguments and transition functions (David Rowley) For example, SELECT AVG(x), VARIANCE(x) FROM tab can use a single per-row computation for both aggregates.", "commit_aliases": ["804163bc2"], "source_commits": ["804163bc2"], "source_entry_id": "9.6.0/changes/028", "db_id": "622905e5480bb2cc8845c2cb036c0302", "patch_ids": ["61e6fee5fc97bc1fd8d21d86c39e33b0"], "statement_hash": "23c7475581a010fdd283125b372a2ec12b40bd5ef5df132181cb559de5c1f671", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-69954b466cb5ca88", "cves": [], "html": "<p>通过检查当前事务的快照而非 <code>pg_clog</code> 来决定源事务是否应被视为已提交，加速最近创建元组的可见性测试（Jeff Janes、Tom Lane）</p>", "text": "通过检查当前事务的快照而非 pg_clog 来决定源事务是否应被视为已提交，加速最近创建元组的可见性测试（Jeff Janes、Tom Lane）", "title": "通过检查当前事务的快照而非 pg_clog 来决定源事务是否应被视为已提交，加速最近创建元组的可见性测试", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "b840d4b79ea3bfc85a26e71b2fdae65d009e3ac6125293347204e6fd581e8982", "section_path": ["服务器", "一般性能"], "commit_groups": [["8a7d07018"]], "identity_text": "Speed up visibility tests for recently-created tuples by checking the current transaction's snapshot, not pg_clog, to decide if the source transaction should be considered committed (Jeff Janes, Tom Lane)", "commit_aliases": ["8a7d07018"], "source_commits": ["8a7d07018"], "source_entry_id": "9.6.0/changes/029", "db_id": "785765515a6bdbe21dc5344791a562d1", "patch_ids": ["8daf975da7eb03cae0c3a7dcafd3d34e"], "statement_hash": "8f74e749a57e119bb569628aba444580a14f837eb61bd502d881a17ffb51c5db", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-451e9f831dd4936b", "cves": [], "html": "<p>允许比以前更早设置元组提示位（Andres Freund）</p>", "text": "允许比以前更早设置元组提示位（Andres Freund）", "title": "允许比以前更早设置元组提示位", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "c0529d3d02905f405d60b9ccb061712998f1dbb642a424c9cedfa39134f392cb", "section_path": ["服务器", "一般性能"], "commit_groups": [["db76b1efb"]], "identity_text": "Allow tuple hint bits to be set sooner than before (Andres Freund)", "commit_aliases": ["db76b1efb"], "source_commits": ["db76b1efb"], "source_entry_id": "9.6.0/changes/030", "db_id": "657478a5ceed6871c18e22ba4515719b", "patch_ids": ["0e457f7e922afbd510f5506fefc1b16d"], "statement_hash": "eaf35b1af181ea963be837c7397692a73e8d999617bd3a70fc257e3abbf633db", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5c7b81519deee11e", "cves": [], "html": "<p>改进短命预备事务的性能（Stas Kelvich、Simon Riggs、Pavan Deolasee）</p>\n<p>两阶段提交信息现在只在 <code>PREPARE TRANSACTION</code> 期间写入 <acronym>WAL</acronym>，如果紧接着提交，将在 <code>COMMIT PREPARED</code> 期间从 <acronym>WAL</acronym> 读回。只有当未决事务在下一次检查点之前没有被提交或中止时才创建单独的状态文件。</p>", "text": "改进短命预备事务的性能（Stas Kelvich、Simon Riggs、Pavan Deolasee） 两阶段提交信息现在只在 PREPARE TRANSACTION 期间写入 WAL，如果紧接着提交，将在 COMMIT PREPARED 期间从 WAL 读回。只有当未决事务在下一次检查点之前没有被提交或中止时才创建单独的状态文件。", "title": "改进短命预备事务的性能", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "615b10c06648c8a9695ec5a72370f471f77fec76c10276c8fc758a84e8fdbb7f", "section_path": ["服务器", "一般性能"], "commit_groups": [["978b2f65a"], ["e0694cf9c"]], "identity_text": "Improve performance of short-lived prepared transactions (Stas Kelvich, Simon Riggs, Pavan Deolasee) Two-phase commit information is now written only to WAL during PREPARE TRANSACTION, and will be read back from WAL during COMMIT PREPARED if that happens soon thereafter. A separate state file is created only if the pending transaction does not get committed or aborted by the time of the next checkpoint.", "commit_aliases": ["978b2f65a", "e0694cf9c"], "source_commits": ["978b2f65a", "e0694cf9c"], "source_entry_id": "9.6.0/changes/031", "db_id": "9eb2bafbcd1d1bc873580c679e8d62f5", "patch_ids": ["5e98e7dcbc70c3363c5dfd1b4668a939", "97a72e27e26d8d63552c89c4fa22c717"], "statement_hash": "cea87338338d211589795868a3dbd7eaafdeef0a39d06e0adc001019d970c5c3", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3146a287fa6e495f", "cves": [], "html": "<p>改进内存上下文销毁的性能（Jan Wieck）</p>", "text": "改进内存上下文销毁的性能（Jan Wieck）", "title": "改进内存上下文销毁的性能", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "ab8794635246954e847744c57df122c91f069accc0e27b93bb8ebcd2bb4c9fdb", "section_path": ["服务器", "一般性能"], "commit_groups": [["25c539233"]], "identity_text": "Improve performance of memory context destruction (Jan Wieck)", "commit_aliases": ["25c539233"], "source_commits": ["25c539233"], "source_entry_id": "9.6.0/changes/032", "db_id": "f1941d7b48b85d5c2cb69ed8c1bfb601", "patch_ids": ["95c4bbde3cf3709dc7d986fb4c197589"], "statement_hash": "4028b9dbd5ac64cbdce57d4cba6e125aefb5361aa744f2d36f0df2d407ace4a7", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6030b30087940240", "cves": [], "html": "<p>改进有多个被跟踪对象的资源所有者的性能（Aleksander Alekseev）</p>", "text": "改进有多个被跟踪对象的资源所有者的性能（Aleksander Alekseev）", "title": "改进有多个被跟踪对象的资源所有者的性能", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "1f85e559b3139d231e72c20b6be5809448cdee8832ff902b4ac9040fa2794bef", "section_path": ["服务器", "一般性能"], "commit_groups": [["cc988fbb0"]], "identity_text": "Improve performance of resource owners with many tracked objects (Aleksander Alekseev)", "commit_aliases": ["cc988fbb0"], "source_commits": ["cc988fbb0"], "source_entry_id": "9.6.0/changes/033", "db_id": "40df862c5d936ece169537aac10eca8b", "patch_ids": ["f93a6e9e28f1679f0d3ebeec46057398"], "statement_hash": "a16c9823c6f02032dfcc7ea7f72ef25bf296814756945371fb308fbebdd939e4", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-98c0c6ce0679d440", "cves": [], "html": "<p>加速 <code>timestamp</code>、<code>time</code> 和 <code>date</code> 数据类型的输出函数（David Rowley、Andres Freund）</p>", "text": "加速 timestamp、time 和 date 数据类型的输出函数（David Rowley、Andres Freund）", "title": "加速 timestamp、time 和 date 数据类型的输出函数", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "74ad86bbc8bf773c44adfc195c8d040e7cfcd78bdb124ce86919acf38a8534d2", "section_path": ["服务器", "一般性能"], "commit_groups": [["aa2387e2f"]], "identity_text": "Improve speed of the output functions for timestamp, time, and date data types (David Rowley, Andres Freund)", "commit_aliases": ["aa2387e2f"], "source_commits": ["aa2387e2f"], "source_entry_id": "9.6.0/changes/034", "db_id": "a3885ca2234bb50aca660e138de70b08", "patch_ids": ["9eae9d159a22bb8a12595324698e8005"], "statement_hash": "52dfd160358c7b9071ac754323f3ae5d788083ae51781f0363f2d74ab7b61cf1", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e2636cc7d5b7a8a2", "cves": [], "html": "<p>避免重放取得 <code>AccessExclusive</code> 锁的操作期间热备查询的一些不必要取消（Jeff Janes）</p>", "text": "避免重放取得 AccessExclusive 锁的操作期间热备查询的一些不必要取消（Jeff Janes）", "title": "避免重放取得 AccessExclusive 锁的操作期间热备查询的一些不必要取消", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "b9378c14889d8b38cf28013bb6d2d44297188d814e5562242878d02bf5f915be", "section_path": ["服务器", "一般性能"], "commit_groups": [["37c54863c"]], "identity_text": "Avoid some unnecessary cancellations of hot-standby queries during replay of actions that take AccessExclusive locks (Jeff Janes)", "commit_aliases": ["37c54863c"], "source_commits": ["37c54863c"], "source_entry_id": "9.6.0/changes/035", "db_id": "2dd04f800ffcd41915e68d30d2de6002", "patch_ids": ["fb8c5bcb660d162450279061a72a30d7"], "statement_hash": "a6bfa3966753e2c66bf03c5c3457a0fb029d864138ada773e5682f5cae899cfb", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-bd1f8d4d8de06de0", "cves": [], "html": "<p>当关系的扩展锁有争用时一次扩展关系多个块（Dilip Kumar）</p>\n<p>这通过减少争用改进可伸缩性。</p>", "text": "当关系的扩展锁有争用时一次扩展关系多个块（Dilip Kumar） 这通过减少争用改进可伸缩性。", "title": "当关系的扩展锁有争用时一次扩展关系多个块", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "47b93b8d5830a5a5d38ba774e21afadb53912b471aa009a961f52eceafdfa3d6", "section_path": ["服务器", "一般性能"], "commit_groups": [["719c84c1b"]], "identity_text": "Extend relations multiple blocks at a time when there is contention for the relation's extension lock (Dilip Kumar) This improves scalability by decreasing contention.", "commit_aliases": ["719c84c1b"], "source_commits": ["719c84c1b"], "source_entry_id": "9.6.0/changes/036", "db_id": "70c53fef60c5bcd5f1866b2f8fd238f6", "patch_ids": ["7d4205961cab78e208ab81442d748aba"], "statement_hash": "91e6798371f96768e136cfd1bace64324361b087d715504ae0e46010032e2eb6", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c8a3d3d659041d2d", "cves": [], "html": "<p>增加 clog 缓冲区数量以获得更好的可伸缩性（Amit Kapila、Andres Freund）</p>", "text": "增加 clog 缓冲区数量以获得更好的可伸缩性（Amit Kapila、Andres Freund）", "title": "增加 clog 缓冲区数量以获得更好的可伸缩性", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "8d025d5d255eb90f5bd5fbcce121874d6f87abfd095619b73e37e8976de28141", "section_path": ["服务器", "一般性能"], "commit_groups": [["5364b357f"]], "identity_text": "Increase the number of clog buffers for better scalability (Amit Kapila, Andres Freund)", "commit_aliases": ["5364b357f"], "source_commits": ["5364b357f"], "source_entry_id": "9.6.0/changes/037", "db_id": "622ab56eb0f4562094613bdeac58db6d", "patch_ids": ["3cbfc100fe6e2b2a202c5e9221076058"], "statement_hash": "9e17db276a57a171646718681680b3eb843caea96d4f43eb5dc25cb5c1cb2436", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a77127b915825b5c", "cves": [], "html": "<p>通过始终保持简单变量的 <code>ParamListInfo</code> 条目有效，加速 <span>PL/pgSQL</span> 中的表达式求值（Tom Lane）</p>", "text": "通过始终保持简单变量的 ParamListInfo 条目有效，加速 PL/pgSQL 中的表达式求值（Tom Lane）", "title": "通过始终保持简单变量的 ParamListInfo 条目有效，加速 PL/pgSQL 中的表达式求值", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "ed678b6460e5d012b1b610ba5e527b3e50186e0dd40d2addc8e795f449ee95bd", "section_path": ["服务器", "一般性能"], "commit_groups": [["6c82d8d1f"]], "identity_text": "Speed up expression evaluation in PL/pgSQL by keeping ParamListInfo entries for simple variables valid at all times (Tom Lane)", "commit_aliases": ["6c82d8d1f"], "source_commits": ["6c82d8d1f"], "source_entry_id": "9.6.0/changes/038", "db_id": "a6fb1d44e712fa4b96c9242f20ac9d05", "patch_ids": ["d2cc52fcbf9d15192a92d19fd796cbee"], "statement_hash": "b14cdd4ef0fae8085a169ec56531dfe74725375965258ec63f5201889dfdadf0", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-970380fb9f7b7b33", "cves": [], "html": "<p>避免在最近的 Windows 版本上把 <code>SO_SNDBUF</code> 设置降低到默认值以下（Chen Huajun）</p>", "text": "避免在最近的 Windows 版本上把 SO_SNDBUF 设置降低到默认值以下（Chen Huajun）", "title": "避免在最近的 Windows 版本上把 SO_SNDBUF 设置降低到默认值以下", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "d456adf8021ab09794db1edfb364501de8174de833fd01e3af3e22fdcbedd0be", "section_path": ["服务器", "一般性能"], "commit_groups": [["4f33621f3"]], "identity_text": "Avoid reducing the SO_SNDBUF setting below its default on recent Windows versions (Chen Huajun)", "commit_aliases": ["4f33621f3"], "source_commits": ["4f33621f3"], "source_entry_id": "9.6.0/changes/039", "db_id": "293c895bd304caa9c8edc77886455a87", "patch_ids": ["fc1c2e638fc4d8cc6528278549f47d79"], "statement_hash": "ec27ae76b72a0f6a93e56178d0e5d81a2bb0d799ff4e9dc423023706e7e00f10", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-7f80c7719712686c", "cves": [], "html": "<p>在 Windows 上默认禁用<a href=\"/docs/9.6/runtime-config-logging.html#GUC-UPDATE-PROCESS-TITLE\">update_process_title</a>（Takayuki Tsunakawa）</p>\n<p>更新进程标题的开销在 Windows 上比大多数其他平台大得多，而且由于大多数 Windows 用户没有能显示进程标题的工具，这样做也没那么有用。</p>", "text": "在 Windows 上默认禁用update_process_title（Takayuki Tsunakawa） 更新进程标题的开销在 Windows 上比大多数其他平台大得多，而且由于大多数 Windows 用户没有能显示进程标题的工具，这样做也没那么有用。", "title": "在 Windows 上默认禁用update_process_title", "commits": [], "section": "服务器 / 一般性能", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.8", "source_hash": "fe0e6f83da4034470bcda699e30b432c77f1bb2e65139243c68e597b82d35133", "section_path": ["服务器", "一般性能"], "commit_groups": [["9b33c7e80"]], "identity_text": "Disable guc-update-process-title by default on Windows (Takayuki Tsunakawa) The overhead of updating the process title is much larger on Windows than most other platforms, and it is also less useful to do it since most Windows users do not have tools that can display process titles.", "commit_aliases": ["9b33c7e80"], "source_commits": ["9b33c7e80"], "source_entry_id": "9.6.0/changes/040", "db_id": "df4f31b0f31dfa068e087ab943313b0f", "patch_ids": ["5e78daa5cdf6850599fe610a0cf7e752"], "statement_hash": "8756b4d1e7c3981d1a07f6b74ba6483c27af2dbf1d257302a41980950fa74623", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a2cc768ca9c61a78", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/progress-reporting.html#PG-STAT-PROGRESS-VACUUM-VIEW\" title=\"表 28.20. pg_stat_progress_vacuum 视图\"><code>pg_stat_progress_vacuum</code></a> 系统视图以为 <code>VACUUM</code> 操作提供进度报告（Amit Langote、Robert Haas、Vinayak Pokale、Rahila Syed）</p>", "text": "添加 pg_stat_progress_vacuum 系统视图以为 VACUUM 操作提供进度报告（Amit Langote、Robert Haas、Vinayak Pokale、Rahila Syed）", "title": "添加 pg_stat_progress_vacuum 系统视图以为 VACUUM 操作提供进度报告", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "3a49d5d2a529ca71a3b52f4c189d77079be705ca368b2fc3a4ed28112218f48b", "section_path": ["服务器", "监控"], "commit_groups": [["c16dc1aca"]], "identity_text": "Add pg_stat_progress_vacuum system view to provide progress reporting for VACUUM operations (Amit Langote, Robert Haas, Vinayak Pokale, Rahila Syed)", "commit_aliases": ["c16dc1aca"], "source_commits": ["c16dc1aca"], "source_entry_id": "9.6.0/changes/041", "db_id": "67271ee2575cdb9e666289644c2551a9", "patch_ids": ["3b4e6ccd1b40dfb36d2244e1887a4ed3"], "statement_hash": "5a1dcc5de3f0f50e7f41375132acb2ed10456478530ad3d38b5cd1917e7dd071", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-613e3b20a4a8a0df", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/functions-info.html#FUNCTIONS-CONTROLDATA\" title=\"表 9.71. 控制数据函数\"><code>pg_control_system()</code></a>、<code>pg_control_checkpoint()</code>、<code>pg_control_recovery()</code> 和 <code>pg_control_init()</code> 函数以把 <code>pg_control</code> 的字段暴露给 <acronym>SQL</acronym>（Joe Conway、Michael Paquier）</p>", "text": "添加 pg_control_system()、pg_control_checkpoint()、pg_control_recovery() 和 pg_control_init() 函数以把 pg_control 的字段暴露给 SQL（Joe Conway、Michael Paquier）", "title": "添加 pg_control_system()、pg_control_checkpoint()、pg_control_recovery() 和 pg_control_init() 函数以把 pg_control 的字段暴露给 SQL", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "1b2fbe4ae7c272c78ced3b4c49e0eb7c99612ce80bdacb150c5b509d0193bbfd", "section_path": ["服务器", "监控"], "commit_groups": [["dc7d70ea0"]], "identity_text": "Add pg_control_system(), pg_control_checkpoint(), pg_control_recovery(), and pg_control_init() functions to expose fields of pg_control to SQL (Joe Conway, Michael Paquier)", "commit_aliases": ["dc7d70ea0"], "source_commits": ["dc7d70ea0"], "source_entry_id": "9.6.0/changes/042", "db_id": "02c1cbb66ea43d942090c1757ac13fcb", "patch_ids": ["94aa84a3f1b31d251919a28a0d5d89e9"], "statement_hash": "911b4d1698921e57202ac3e23b93f0067536d96d765a0d3d11704aac1cf8cd1b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-1b7ed7a3317d5fc0", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/view-pg-config.html\" title=\"50.60. pg_config\"><code>pg_config</code></a> 系统视图（Joe Conway）</p>\n<p>此视图暴露与 <span>pg_config</span> 命令行实用程序相同的信息，即 <span>PostgreSQL</span> 的各种编译时配置信息。</p>", "text": "添加 pg_config 系统视图（Joe Conway） 此视图暴露与 pg_config 命令行实用程序相同的信息，即 PostgreSQL 的各种编译时配置信息。", "title": "添加 pg_config 系统视图", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "be937cdc335ed2a4177cf7a5b2a4edb9f4a28ce0de4092f8f0b6034b3655a3a1", "section_path": ["服务器", "监控"], "commit_groups": [["a5c43b886"]], "identity_text": "Add pg_config system view (Joe Conway) This view exposes the same information available from the pg_config command-line utility, namely assorted compile-time configuration information for PostgreSQL.", "commit_aliases": ["a5c43b886"], "source_commits": ["a5c43b886"], "source_entry_id": "9.6.0/changes/043", "db_id": "ae9ab2be5919c79a1bb402c9a3fb26c4", "patch_ids": ["e91dae91629c4b58f8edb3f4755e7315"], "statement_hash": "a8581cae3f63f54d063192bd50d2c426a9966986bc113daed330d71b802b6491", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-712980dee0651b45", "cves": [], "html": "<p>在 <a href=\"/docs/9.6/view-pg-replication-slots.html\" title=\"50.71. pg_replication_slots\"><code>pg_replication_slots</code></a> 系统视图中添加 <code>confirmed_flush_lsn</code> 列（Marko Tiikkaja）</p>", "text": "在 pg_replication_slots 系统视图中添加 confirmed_flush_lsn 列（Marko Tiikkaja）", "title": "在 pg_replication_slots 系统视图中添加 confirmed_flush_lsn 列", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "849bfa41fd667f17dcb368747540d88feeff48550813eafbb731cb6bff0e7d5a", "section_path": ["服务器", "监控"], "commit_groups": [["3f811c2d6"]], "identity_text": "Add a confirmed_flush_lsn column to the pg_replication_slots system view (Marko Tiikkaja)", "commit_aliases": ["3f811c2d6"], "source_commits": ["3f811c2d6"], "source_entry_id": "9.6.0/changes/044", "db_id": "aa53e3330a56bf231bac78df2b963010", "patch_ids": ["96f99dffb1613eb3959d5f596c29b14e"], "statement_hash": "51e90204fe72f40e132026e56611061b4ea4b4a89adcbb8f5593a7491dd7d580", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-0605acee9c84b188", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/monitoring-stats.html#PG-STAT-WAL-RECEIVER-VIEW\" title=\"表 28.6. pg_stat_wal_receiver 视图\"><code>pg_stat_wal_receiver</code></a> 系统视图以提供热备服务器 <acronym>WAL</acronym> 接收器进程的状态信息（Michael Paquier）</p>", "text": "添加 pg_stat_wal_receiver 系统视图以提供热备服务器 WAL 接收器进程的状态信息（Michael Paquier）", "title": "添加 pg_stat_wal_receiver 系统视图以提供热备服务器 WAL 接收器进程的状态信息", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "8c2fe822ceb7298a0ee78f14b1c063a011f2273d28ef9ee2d52c4f60a9485568", "section_path": ["服务器", "监控"], "commit_groups": [["60d50769b"], ["9ed551e0a"], ["b1a9bad9e"]], "identity_text": "Add pg_stat_wal_receiver system view to provide information about the state of a hot-standby server's WAL receiver process (Michael Paquier)", "commit_aliases": ["60d50769b", "9ed551e0a", "b1a9bad9e"], "source_commits": ["60d50769b", "9ed551e0a", "b1a9bad9e"], "source_entry_id": "9.6.0/changes/045", "db_id": "45f1a2187481437d3b26a21ad3a1ffb8", "patch_ids": ["00baacbd249d3bb13ffc622143fb75a4", "41072e0c33c8156ec5ff38280fb88fc8", "f4b0ab0497d5a7fb3b8ca3c7241908e0"], "statement_hash": "54d8b1ee813c988c766f2223ae5c2247bfe7b06dfa6d78985c0c927a1b87cb5c", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-025d7caec831412f", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/functions-info.html#FUNCTIONS-INFO-SESSION-TABLE\" title=\"表 9.59. 会话信息函数\"><code>pg_blocking_pids()</code></a> 函数以可靠地识别哪些会话阻塞哪些会话（Tom Lane）</p>\n<p>此函数返回阻塞具有给定进程 ID 的会话的任何会话的进程 ID 数组。历史上用户通过对 <code>pg_locks</code> 视图自连接获得这种信息。但以任何正确性这样做都异常繁琐，而且并行查询的加入使旧方法完全不实用，因为锁可能被子工作者进程而非会话的主进程持有或等待。</p>", "text": "添加 pg_blocking_pids() 函数以可靠地识别哪些会话阻塞哪些会话（Tom Lane） 此函数返回阻塞具有给定进程 ID 的会话的任何会话的进程 ID 数组。历史上用户通过对 pg_locks 视图自连接获得这种信息。但以任何正确性这样做都异常繁琐，而且并行查询的加入使旧方法完全不实用，因为锁可能被子工作者进程而非会话的主进程持有或等待。", "title": "添加 pg_blocking_pids() 函数以可靠地识别哪些会话阻塞哪些会话", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "f345fe783133294c4c4059bc9a648e60c09ac6c19ce6f52fca649168bd8cc757", "section_path": ["服务器", "监控"], "commit_groups": [["52f5d578d"]], "identity_text": "Add pg_blocking_pids() function to reliably identify which sessions block which others (Tom Lane) This function returns an array of the process IDs of any sessions that are blocking the session with the given process ID. Historically users have obtained such information using a self-join on the pg_locks view. However, it is unreasonably tedious to do it that way with any modicum of correctness, and the addition of parallel queries has made the old approach entirely impractical, since locks might be held or awaited by child worker processes rather than the session's main process.", "commit_aliases": ["52f5d578d"], "source_commits": ["52f5d578d"], "source_entry_id": "9.6.0/changes/046", "db_id": "11822242737768560b7e67adf8391ddb", "patch_ids": ["c27a18c7d30e32a5a27629c932e07d1a"], "statement_hash": "087747da95cddecebfb2bea80b90a2e7d54d73e3bc9aba645e45427b7b0c0943", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-8c9ca76be1a00984", "cves": [], "html": "<p>添加函数 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-ADMIN-BACKUP-TABLE\" title=\"表 9.78. 备份控制函数\"><code>pg_current_xlog_flush_location()</code></a> 以暴露当前事务日志刷写位置（Tomas Vondra）</p>", "text": "添加函数 pg_current_xlog_flush_location() 以暴露当前事务日志刷写位置（Tomas Vondra）", "title": "添加函数 pg_current_xlog_flush_location() 以暴露当前事务日志刷写位置", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "743f9274043be5205b1f36c518ab287c0286a87b7b19b49213bbfc1181c60006", "section_path": ["服务器", "监控"], "commit_groups": [["e63bb4549"]], "identity_text": "Add function pg_current_xlog_flush_location() to expose the current transaction log flush location (Tomas Vondra)", "commit_aliases": ["e63bb4549"], "source_commits": ["e63bb4549"], "source_entry_id": "9.6.0/changes/047", "db_id": "2fb3146e29caa0ad757cbdd086534346", "patch_ids": ["0167d80b5f81fc4d76c1ab9098f66b24"], "statement_hash": "aff288767a25f126f0245cceeb9d3975605877431430c576faab221e91a160ac", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d96c0d09bce47ddd", "cves": [], "html": "<p>添加函数 <a href=\"/docs/9.6/functions-info.html#FUNCTIONS-INFO-SESSION-TABLE\" title=\"表 9.59. 会话信息函数\"><code>pg_notification_queue_usage()</code></a> 以报告 <code>NOTIFY</code> 队列的占用程度（Brendan Jurd）</p>", "text": "添加函数 pg_notification_queue_usage() 以报告 NOTIFY 队列的占用程度（Brendan Jurd）", "title": "添加函数 pg_notification_queue_usage() 以报告 NOTIFY 队列的占用程度", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "37c0df11749459b9e33806d85327871f540e45ef0b9c5634fb621ecfab87d1b2", "section_path": ["服务器", "监控"], "commit_groups": [["a04bb65f7"]], "identity_text": "Add function pg_notification_queue_usage() to report how full the NOTIFY queue is (Brendan Jurd)", "commit_aliases": ["a04bb65f7"], "source_commits": ["a04bb65f7"], "source_entry_id": "9.6.0/changes/048", "db_id": "a2f81c4d5a7ae0b7c1bfbe17f8145017", "patch_ids": ["283c40dc0cc7a4644b461d35292064a2"], "statement_hash": "64c8a5b703fa6ac3a195ca06870544c16b3019fd9331cdc02919cbab3739f24e", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-cb83394214c51765", "cves": [], "html": "<p>限制内存上下文统计转储的冗长程度（Tom Lane）</p>\n<p>内存不足失败期间输出到 postmaster 日志的内存使用转储现在在有大量内存上下文时汇总统计，而不是可能生成非常大的报告。现在还有<span>“<span>总计</span>”</span>汇总行。</p>", "text": "限制内存上下文统计转储的冗长程度（Tom Lane） 内存不足失败期间输出到 postmaster 日志的内存使用转储现在在有大量内存上下文时汇总统计，而不是可能生成非常大的报告。现在还有“总计”汇总行。", "title": "限制内存上下文统计转储的冗长程度", "commits": [], "section": "服务器 / 监控", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.9", "source_hash": "a34a2a5df9243bb646d569a54a221ec626ba3dd6e8f11c14f33e6ce8612d3a77", "section_path": ["服务器", "监控"], "commit_groups": [["7b5ef8f2d"]], "identity_text": "Limit the verbosity of memory context statistics dumps (Tom Lane) The memory usage dump that is output to the postmaster log during an out-of-memory failure now summarizes statistics when there are a large number of memory contexts, rather than possibly generating a very large report. There is also a grand total summary line now.", "commit_aliases": ["7b5ef8f2d"], "source_commits": ["7b5ef8f2d"], "source_entry_id": "9.6.0/changes/049", "db_id": "7617eb2e2119b274e272c3f2ad78de6b", "patch_ids": ["6dd0bb90886b50988771ccc207c60295"], "statement_hash": "792267748a147d83a372e22063051cd9ce72766120ce1dcd7b5333a2bff17afa", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-b0310bb72db0b186", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/auth-methods.html#AUTH-BSD\" title=\"20.3.11. BSD 认证\"><acronym>BSD</acronym> 认证方法</a>以允许 <span>PostgreSQL</span> 客户端认证使用 <span>BSD</span> 认证服务（Marisa Emerson）</p>\n<p>BSD 认证当前只在 <span>OpenBSD</span> 上可用。</p>", "text": "添加 BSD 认证方法以允许 PostgreSQL 客户端认证使用 BSD 认证服务（Marisa Emerson） BSD 认证当前只在 OpenBSD 上可用。", "title": "添加 BSD 认证方法以允许 PostgreSQL 客户端认证使用 BSD 认证服务", "commits": [], "section": "服务器 / Authentication", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.10", "source_hash": "a55737d23f802ccd55f0b93c9879a93f877af3a9235af70ae29e6e1fc40fc8b2", "section_path": ["服务器", "Authentication"], "commit_groups": [["34c33a1f0"]], "identity_text": "Add a BSD authentication method to allow use of the BSD Authentication service for PostgreSQL client authentication (Marisa Emerson) BSD Authentication is currently only available on OpenBSD.", "commit_aliases": ["34c33a1f0"], "source_commits": ["34c33a1f0"], "source_entry_id": "9.6.0/changes/050", "db_id": "0b63007f97b286461dcc426e12f03a67", "patch_ids": ["26fb8d192042169f98784be7d5301d83"], "statement_hash": "23a7feba4ecfaefb9791cfab1ffdedb9e2b40869e9780d5e91b036c0207e963c", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-edc5026a44a7fce5", "cves": [], "html": "<p>使用 <a href=\"/docs/9.6/auth-methods.html#AUTH-PAM\" title=\"20.3.10. PAM 认证\"><acronym>PAM</acronym> 认证</a>时，通过 <code>PAM_RHOST</code> 项向 <acronym>PAM</acronym> 模块提供客户端 IP 地址或主机名（Grzegorz Sampolski）</p>", "text": "使用 PAM 认证时，通过 PAM_RHOST 项向 PAM 模块提供客户端 IP 地址或主机名（Grzegorz Sampolski）", "title": "使用 PAM 认证时，通过 PAM_RHOST 项向 PAM 模块提供客户端 IP 地址或主机名", "commits": [], "section": "服务器 / Authentication", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.10", "source_hash": "3d7349b329f60ec5cd465a8a353fb43a14136d50f67bd82226de752402d03fd3", "section_path": ["服务器", "Authentication"], "commit_groups": [["2f1d2b7a7"]], "identity_text": "When using PAM authentication, provide the client IP address or host name to PAM modules via the PAM_RHOST item (Grzegorz Sampolski)", "commit_aliases": ["2f1d2b7a7"], "source_commits": ["2f1d2b7a7"], "source_entry_id": "9.6.0/changes/051", "db_id": "4c31b48873626d64b8278ad9dff418f6", "patch_ids": ["f74b2332dbb33ebe7bf105c9e5608dea"], "statement_hash": "f5cf87102ec1efecc4cc618216bb88d0a5a96af73349a36ae73369ae39aa7059", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-7130b269cf83a53f", "cves": [], "html": "<p>在 postmaster 日志中为更多类型的密码认证失败提供细节（Tom Lane）</p>\n<p>所有通常可达的密码认证失败情况现在都应在日志中提供具体的 <code>DETAIL</code> 字段。</p>", "text": "在 postmaster 日志中为更多类型的密码认证失败提供细节（Tom Lane） 所有通常可达的密码认证失败情况现在都应在日志中提供具体的 DETAIL 字段。", "title": "在 postmaster 日志中为更多类型的密码认证失败提供细节", "commits": [], "section": "服务器 / Authentication", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.10", "source_hash": "15cad581ede8c7ceb893c7cbb1cf58c1fc1ae3746583e649209c5ef776ee6f70", "section_path": ["服务器", "Authentication"], "commit_groups": [["5e0b5dcab"]], "identity_text": "Provide detail in the postmaster log for more types of password authentication failure (Tom Lane) All ordinarily-reachable password authentication failure cases should now provide specific DETAIL fields in the log.", "commit_aliases": ["5e0b5dcab"], "source_commits": ["5e0b5dcab"], "source_entry_id": "9.6.0/changes/052", "db_id": "a94c8434754b00c8735fd6df2a6c073b", "patch_ids": ["59fcf024a1964fc5074baf7d8893ddd7"], "statement_hash": "2b42066f72d8e17bcc0a4b43fd99753d9f2216d1527214b1da924b7d9c8fb11f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-79a8c019e9a47ebf", "cves": [], "html": "<p>支持长达 128 个字符的 <a href=\"/docs/9.6/auth-methods.html#AUTH-RADIUS\" title=\"20.3.8. RADIUS 认证\"><acronym>RADIUS</acronym> 密码</a>（Marko Tiikkaja）</p>", "text": "支持长达 128 个字符的 RADIUS 密码（Marko Tiikkaja）", "title": "支持长达 128 个字符的 RADIUS 密码", "commits": [], "section": "服务器 / Authentication", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.10", "source_hash": "4be0aef0b5ac3ac9f7e41a9cec89514b4d0d6775bdc359dc85061cca2ce4b325", "section_path": ["服务器", "Authentication"], "commit_groups": [["643beffe8"]], "identity_text": "Support RADIUS passwords up to 128 characters long (Marko Tiikkaja)", "commit_aliases": ["643beffe8"], "source_commits": ["643beffe8"], "source_entry_id": "9.6.0/changes/053", "db_id": "3ef06562fedfc6508c88a604b8304071", "patch_ids": ["88e6c866389b86e81484a4af9d6576e6"], "statement_hash": "9569e14bf538a603af49df26d7f72185c85189dd440efc9ad404a245dc7dafbe", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-f6bec8c43921d25e", "cves": [], "html": "<p>添加新的 <a href=\"/docs/9.6/auth-methods.html#SSPI-AUTH\" title=\"20.3.4. SSPI 认证\"><acronym>SSPI</acronym> 认证</a>参数 <code>compat_realm</code> 和 <code>upn_username</code>，控制 <acronym>SSPI</acronym> 认证期间使用 <span>NetBIOS</span> 还是 <span>Kerberos</span> 领域名和用户名（Christian Ullrich）</p>", "text": "添加新的 SSPI 认证参数 compat_realm 和 upn_username，控制 SSPI 认证期间使用 NetBIOS 还是 Kerberos 领域名和用户名（Christian Ullrich）", "title": "添加新的 SSPI 认证参数 compat_realm 和 upn_username，控制 SSPI 认证期间使用 NetBIOS 还是 Kerberos 领域名和用户名", "commits": [], "section": "服务器 / Authentication", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.10", "source_hash": "9714d901eb7326b6004f58c87c0a5cf0fed08e4a5881ca3653d13d4188763863", "section_path": ["服务器", "Authentication"], "commit_groups": [["35e2e357c"]], "identity_text": "Add new SSPI authentication parameters compat_realm and upn_username to control whether NetBIOS or Kerberos realm names and user names are used during SSPI authentication (Christian Ullrich)", "commit_aliases": ["35e2e357c"], "source_commits": ["35e2e357c"], "source_entry_id": "9.6.0/changes/054", "db_id": "4a80bb85137ec1de82254013adf0d7b8", "patch_ids": ["c90e05046954cd62911d3ee69374fad7"], "statement_hash": "60ec223d8836f4fc354b8873defe9eca16bd4068d511eec7375b5cd04ecac234", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-bd2e2ccb2423a720", "cves": [], "html": "<p>允许处于空闲于事务状态过久的会话被自动终止（Vik Fearing）</p>\n<p>这一行为由新配置参数<a href=\"/docs/9.6/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT\">idle_in_transaction_session_timeout</a>控制。它有助于防止被遗忘的事务过久持有锁或妨碍清理。</p>", "text": "允许处于空闲于事务状态过久的会话被自动终止（Vik Fearing） 这一行为由新配置参数idle_in_transaction_session_timeout控制。它有助于防止被遗忘的事务过久持有锁或妨碍清理。", "title": "允许处于空闲于事务状态过久的会话被自动终止", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "3a154257c8b4294f70351da1999543a83b635537f5ff33bdb3591bc9a0aaa08f", "section_path": ["服务器", "服务器配置"], "commit_groups": [["c6dda1f48"]], "identity_text": "Allow sessions to be terminated automatically if they are in idle-in-transaction state for too long (Vik Fearing) This behavior is controlled by the new configuration parameter guc-idle-in-transaction-session-timeout . It can be useful to prevent forgotten transactions from holding locks or preventing vacuum cleanup for too long.", "commit_aliases": ["c6dda1f48"], "source_commits": ["c6dda1f48"], "source_entry_id": "9.6.0/changes/055", "db_id": "44c7933813084b12f61449a19ee3d56a", "patch_ids": ["b9b20290f4c152cdc503b59c243cda27"], "statement_hash": "e6ac16b2519338f49250b6e3e9daac17a3a0a52a88132e16204a859dfeecb793", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e9afdcfdb9a67fdd", "cves": [], "html": "<p>把<a href=\"/docs/9.6/runtime-config-wal.html#GUC-CHECKPOINT-TIMEOUT\">checkpoint_timeout</a>允许的最大值提高到 24 小时（Simon Riggs）</p>", "text": "把checkpoint_timeout允许的最大值提高到 24 小时（Simon Riggs）", "title": "把checkpoint_timeout允许的最大值提高到 24 小时", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "a33622b17d7238824457b91d528933dda7aa61ef7ca51387bf02735579907dbc", "section_path": ["服务器", "服务器配置"], "commit_groups": [["f2dba881a"]], "identity_text": "Raise the maximum allowed value of guc-checkpoint-timeout to 24 hours (Simon Riggs)", "commit_aliases": ["f2dba881a"], "source_commits": ["f2dba881a"], "source_entry_id": "9.6.0/changes/056", "db_id": "799c2f01e14ddbce17aa12a695c9525b", "patch_ids": ["d783fc32a66aa04b4e63797add01e871"], "statement_hash": "da45674d703eee67fcf721cee6a7c261487b16dbfcbf3c87b49d2da491d0154d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-2c0b019c9772b588", "cves": [], "html": "<p>允许 <code>effective_io_concurrency</code> 按表空间设置，以支持不同表空间有不同 I/O 特性的情况（Julien Rouhaud）</p>", "text": "允许 effective_io_concurrency 按表空间设置，以支持不同表空间有不同 I/O 特性的情况（Julien Rouhaud）", "title": "允许 effective_io_concurrency 按表空间设置，以支持不同表空间有不同 I/O 特性的情况", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "3d89dfa470725065064c8335a2976bfe9308b0b0a7fffa16182ecfcc22e07769", "section_path": ["服务器", "服务器配置"], "commit_groups": [["1aba62ec6"]], "identity_text": "Allow effective_io_concurrency to be set per-tablespace to support cases where different tablespaces have different I/O characteristics (Julien Rouhaud)", "commit_aliases": ["1aba62ec6"], "source_commits": ["1aba62ec6"], "source_entry_id": "9.6.0/changes/057", "db_id": "2a3002dfe793853c104a7073ec5a892f", "patch_ids": ["030f7844d46b8b83527f827061a95477"], "statement_hash": "176ac7b6be58ce7c60629af1b6c41ba33f30f8db8c2dc90d35a9129806ef5ba1", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a858b008f2e24ab1", "cves": [], "html": "<p>添加<a href=\"/docs/9.6/runtime-config-logging.html#GUC-LOG-LINE-PREFIX\">log_line_prefix</a>选项 <code>%n</code> 以 Unix 纪元形式（带毫秒）打印当前时间（Tomas Vondra、Jeff Davis）</p>", "text": "添加log_line_prefix选项 %n 以 Unix 纪元形式（带毫秒）打印当前时间（Tomas Vondra、Jeff Davis）", "title": "添加log_line_prefix选项 %n 以 Unix 纪元形式（带毫秒）打印当前时间", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "ee942d464d4747920098e0abd2fe0d03590e26bac37d5cab9a9658fa1b2f1b9b", "section_path": ["服务器", "服务器配置"], "commit_groups": [["b1e1862a1"], ["f828654e1"]], "identity_text": "Add guc-log-line-prefix option %n to print the current time in Unix epoch form, with milliseconds (Tomas Vondra, Jeff Davis)", "commit_aliases": ["b1e1862a1", "f828654e1"], "source_commits": ["b1e1862a1", "f828654e1"], "source_entry_id": "9.6.0/changes/058", "db_id": "7a744cc72d85b7c8fa720bb2d9fda2ce", "patch_ids": ["1ddea7dd8d6cf63e27eeaeda9f668044", "57863f69591424fdb9f5dd6d77fd064b"], "statement_hash": "85d81366ac3a601bc7f7505fac632766029b5c79b4c65e443ec62f01aeedf0bf", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4a763d2ab9e9b1fb", "cves": [], "html": "<p>添加<a href=\"/docs/9.6/runtime-config-logging.html#GUC-SYSLOG-SEQUENCE-NUMBERS\">syslog_sequence_numbers</a>和<a href=\"/docs/9.6/runtime-config-logging.html#GUC-SYSLOG-SPLIT-MESSAGES\">syslog_split_messages</a>配置参数，为记录到 <span>syslog</span> 时的消息格式提供更多控制（Peter Eisentraut）</p>", "text": "添加syslog_sequence_numbers和syslog_split_messages配置参数，为记录到 syslog 时的消息格式提供更多控制（Peter Eisentraut）", "title": "添加syslog_sequence_numbers和syslog_split_messages配置参数，为记录到 syslog 时的消息格式提供更多控制", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "882f824d831b467c67fb45ad973dee6e709998a18f35689372d200a9b7aac752", "section_path": ["服务器", "服务器配置"], "commit_groups": [["f4c454e9b"], ["fc201dfd9"]], "identity_text": "Add guc-syslog-sequence-numbers and guc-syslog-split-messages configuration parameters to provide more control over the message format when logging to syslog (Peter Eisentraut)", "commit_aliases": ["f4c454e9b", "fc201dfd9"], "source_commits": ["f4c454e9b", "fc201dfd9"], "source_entry_id": "9.6.0/changes/059", "db_id": "d9f3e4aa945b7ea6f89c0a3c9c4894b3", "patch_ids": ["7ecfee74cc26744b6340b9eb347a10ca", "ea69b6530224f929c4e0489d825d0b1c"], "statement_hash": "3844b4d6da4cd0b689dd7d411904b1802d7d29dc6ece4cbc5339eb8c8b649dfb", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5025975f49083a5a", "cves": [], "html": "<p>把<a href=\"/docs/9.6/runtime-config-wal.html#GUC-WAL-LEVEL\">wal_level</a>配置参数的 <code>archive</code> 和 <code>hot_standby</code> 值合并为单一新值 <code>replica</code>（Peter Eisentraut）</p>\n<p>区分这些设置不再有用，合并它们是朝计划中的未来复制设置简化迈出的一步。旧名字仍被接受但在内部转换为 <code>replica</code>。</p>", "text": "把wal_level配置参数的 archive 和 hot_standby 值合并为单一新值 replica（Peter Eisentraut） 区分这些设置不再有用，合并它们是朝计划中的未来复制设置简化迈出的一步。旧名字仍被接受但在内部转换为 replica。", "title": "把wal_level配置参数的 archive 和 hot_standby 值合并为单一新值 replica", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "8d4cbd128c4482f8ae90bd162f238d5cd6a9518235dc037afc2271765fdc73e1", "section_path": ["服务器", "服务器配置"], "commit_groups": [["b555ed810"]], "identity_text": "Merge the archive and hot_standby values of the guc-wal-level configuration parameter into a single new value replica (Peter Eisentraut) Making a distinction between these settings is no longer useful, and merging them is a step towards a planned future simplification of replication setup. The old names are still accepted but are converted to replica internally.", "commit_aliases": ["b555ed810"], "source_commits": ["b555ed810"], "source_entry_id": "9.6.0/changes/060", "db_id": "88c0398481386a5325f619bf6c749d80", "patch_ids": ["32baf1e20424893caa44d3225843da1a"], "statement_hash": "3f949c15924983eb2725ca62199a241b7e3cd0f36f7e2c1505309ccd3e89aedd", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5ff2263d98c8d9f0", "cves": [], "html": "<p>添加 configure 选项 <code>--with-systemd</code> 以在服务器启动和停止时启用调用 <code>sd_notify()</code>（Peter Eisentraut）</p>\n<p>这允许使用 <code>notify</code> 类型的 <span>systemd</span> 服务单元，大大简化了 <span>PostgreSQL</span> 在 <span>systemd</span> 下的管理。</p>", "text": "添加 configure 选项 --with-systemd 以在服务器启动和停止时启用调用 sd_notify()（Peter Eisentraut） 这允许使用 notify 类型的 systemd 服务单元，大大简化了 PostgreSQL 在 systemd 下的管理。", "title": "添加 configure 选项 --with-systemd 以在服务器启动和停止时启用调用 sd_notify()", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "e8cbcf57e94280f2c4db950b7e876d1e9726271a5bc4478344492a44c76c1d37", "section_path": ["服务器", "服务器配置"], "commit_groups": [["7d17e683f"]], "identity_text": "Add configure option --with-systemd to enable calling sd_notify() at server start and stop (Peter Eisentraut) This allows the use of systemd service units of type notify, which greatly simplifies the management of PostgreSQL under systemd.", "commit_aliases": ["7d17e683f"], "source_commits": ["7d17e683f"], "source_entry_id": "9.6.0/changes/061", "db_id": "6994826f1d4179d20292fa5f5c0e0799", "patch_ids": ["266f8c7f14c1f59b25070620eecb4b3b"], "statement_hash": "28802777523dc1d82ec27bd534ca0a03ccab743441948191dbfb50ebad316c41", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-cb87f8eb590b35fd", "cves": [], "html": "<p>允许服务器的 <acronym>SSL</acronym> 密钥文件在由 <code>root</code> 拥有时具有组读访问（Christoph Berg）</p>\n<p>以前我们坚持密钥文件由运行 <span>PostgreSQL</span> 服务器的用户拥有，但在配置为集中管理证书的一些系统（如 <span>Debian</span>）上这不方便。因此允许密钥文件由 <code>root</code> 拥有并具有组读访问的情况。由操作系统管理员确保该组不包含任何不受信任的用户。</p>", "text": "允许服务器的 SSL 密钥文件在由 root 拥有时具有组读访问（Christoph Berg） 以前我们坚持密钥文件由运行 PostgreSQL 服务器的用户拥有，但在配置为集中管理证书的一些系统（如 Debian）上这不方便。因此允许密钥文件由 root 拥有并具有组读访问的情况。由操作系统管理员确保该组不包含任何不受信任的用户。", "title": "允许服务器的 SSL 密钥文件在由 root 拥有时具有组读访问", "commits": [], "section": "服务器 / 服务器配置", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.11", "source_hash": "936c6250c38d68e120e15ad76688fdf81b545aacc66bc33e33a59e4713c5dc32", "section_path": ["服务器", "服务器配置"], "commit_groups": [["9a83564c5"]], "identity_text": "Allow the server's SSL key file to have group read access if it is owned by root (Christoph Berg) Formerly, we insisted the key file be owned by the user running the PostgreSQL server, but that is inconvenient on some systems (such as Debian) that are configured to manage certificates centrally. Therefore, allow the case where the key file is owned by root and has group read access. It is up to the operating system administrator to ensure that the group does not include any untrusted users.", "commit_aliases": ["9a83564c5"], "source_commits": ["9a83564c5"], "source_entry_id": "9.6.0/changes/062", "db_id": "c63f0fd58ee2130e8e7669deb9c37034", "patch_ids": ["e6e194bc85d717a23c426a771389679b"], "statement_hash": "3fb7af8175fd5e7ac2c8ec2a15315b0f1b32aea455b68b384bca015e4b18bc41", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-83089a585362a383", "cves": [], "html": "<p>如果 postmaster 死亡，强制后端退出（Rajeev Rastogi、Robert Haas）</p>\n<p>在正常情况下 postmaster 总是比其子进程活得长。如果 postmaster 因某种原因死亡，强制后端会话报错退出。以前现有的后端会继续运行直到其客户端断开，但那既不安全又低效。它还阻止新的 postmaster 启动，直到最后一个旧后端退出。后端将在等待客户端 I/O 时检测 postmaster 死亡，所以退出不是瞬时的，但不会晚于当前查询结束。</p>", "text": "如果 postmaster 死亡，强制后端退出（Rajeev Rastogi、Robert Haas） 在正常情况下 postmaster 总是比其子进程活得长。如果 postmaster 因某种原因死亡，强制后端会话报错退出。以前现有的后端会继续运行直到其客户端断开，但那既不安全又低效。它还阻止新的 postmaster 启动，直到最后一个旧后端退出。后端将在等待客户端 I/O 时检测 postmaster 死亡，所以退出不是瞬时的，但不会晚于当前查询结束。", "title": "如果 postmaster 死亡，强制后端退出", "commits": [], "section": "服务器 / 可靠性", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.12", "source_hash": "dc4919e6a6d9620d1640905410ec93ddd83caa79fa984d30064ce410900a0489", "section_path": ["服务器", "可靠性"], "commit_groups": [["ac1d7945f"]], "identity_text": "Force backends to exit if the postmaster dies (Rajeev Rastogi, Robert Haas) Under normal circumstances the postmaster should always outlive its child processes. If for some reason the postmaster dies, force backend sessions to exit with an error. Formerly, existing backends would continue to run until their clients disconnect, but that is unsafe and inefficient. It also prevents a new postmaster from being started until the last old backend has exited. Backends will detect postmaster death when waiting for client I/O, so the exit will not be instantaneous, but it should happen no later than the end of the current query.", "commit_aliases": ["ac1d7945f"], "source_commits": ["ac1d7945f"], "source_entry_id": "9.6.0/changes/063", "db_id": "b5b0e9f5c11d557d0e6782d925cf63a9", "patch_ids": ["21f5176f8d220ba8a041d87947a7718e"], "statement_hash": "32d6be6c4f63ffa509aaaa696c0a9904086b1c59cba702ff1c80046d618e615b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3a4feed30d182376", "cves": [], "html": "<p>在报告约束违反失败之前检查可序列化冲突（Thomas Munro）</p>\n<p>使用可序列化事务隔离时，希望任何因并发事务导致的错误都表现为序列化失败，从而提示应用重试可能成功。不幸的是，对并发插入导致的重复键失败这不能可靠发生。此更改确保如果应用在事务中早些时候显式检查过冲突键的存在（且未找到），这种错误将被报告为序列化错误。</p>", "text": "在报告约束违反失败之前检查可序列化冲突（Thomas Munro） 使用可序列化事务隔离时，希望任何因并发事务导致的错误都表现为序列化失败，从而提示应用重试可能成功。不幸的是，对并发插入导致的重复键失败这不能可靠发生。此更改确保如果应用在事务中早些时候显式检查过冲突键的存在（且未找到），这种错误将被报告为序列化错误。", "title": "在报告约束违反失败之前检查可序列化冲突", "commits": [], "section": "服务器 / 可靠性", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.12", "source_hash": "ac276961f23e98ce6bef38287ddbea7e02c6121081afd8fc695cffa92ed780af", "section_path": ["服务器", "可靠性"], "commit_groups": [["fcff8a575"]], "identity_text": "Check for serializability conflicts before reporting constraint-violation failures (Thomas Munro) When using serializable transaction isolation, it is desirable that any error due to concurrent transactions should manifest as a serialization failure, thereby cueing the application that a retry might succeed. Unfortunately, this does not reliably happen for duplicate-key failures caused by concurrent insertions. This change ensures that such an error will be reported as a serialization error if the application explicitly checked for the presence of a conflicting key (and did not find it) earlier in the transaction.", "commit_aliases": ["fcff8a575"], "source_commits": ["fcff8a575"], "source_entry_id": "9.6.0/changes/064", "db_id": "b8cc53380765d846354e52618f192ffa", "patch_ids": ["4d15bb238596ea3d41244d0bb519bd52"], "statement_hash": "7b9b2c500fbdea8d99ce0b203d2a1adb8acb559963c6f180422d3b31173803ba", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-8b36a4a4b31d2d4b", "cves": [], "html": "<p>确保失效消息即使由未分配 <acronym>XID</acronym> 的事务发出也被记录到 <acronym>WAL</acronym> 中（Andres Freund）</p>\n<p>这修复了一些备库服务器上的事务没有注意到更改（如新索引）的边界情况。</p>", "text": "确保失效消息即使由未分配 XID 的事务发出也被记录到 WAL 中（Andres Freund） 这修复了一些备库服务器上的事务没有注意到更改（如新索引）的边界情况。", "title": "确保失效消息即使由未分配 XID 的事务发出也被记录到 WAL 中", "commits": [], "section": "服务器 / 可靠性", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.12", "source_hash": "4ffa1504804c4ade9cdc1dcfb0f1d44e465b3a4bbd2a03b381c7a8bf54cd296d", "section_path": ["服务器", "可靠性"], "commit_groups": [["c6ff84b06"]], "identity_text": "Ensure that invalidation messages are recorded in WAL even when issued by a transaction that has no XID assigned (Andres Freund) This fixes some corner cases in which transactions on standby servers failed to notice changes, such as new indexes.", "commit_aliases": ["c6ff84b06"], "source_commits": ["c6ff84b06"], "source_entry_id": "9.6.0/changes/065", "db_id": "7e9c2dd1f47115145052e4d9c19bfd99", "patch_ids": ["56cb443fb625c151a4e0e61a330698e5"], "statement_hash": "e18907fae37afaf5a2c02a42e90f770ace68651966019e020fd75667408ae376", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c4740f53c59454e7", "cves": [], "html": "<p>防止多个进程并发尝试清理 <acronym>GIN</acronym> 索引的未决列表（Teodor Sigaev、Jeff Janes）</p>\n<p>这是有意允许的，但它导致的竞态条件可能使清理遗漏它需要删除的索引条目。</p>", "text": "防止多个进程并发尝试清理 GIN 索引的未决列表（Teodor Sigaev、Jeff Janes） 这是有意允许的，但它导致的竞态条件可能使清理遗漏它需要删除的索引条目。", "title": "防止多个进程并发尝试清理 GIN 索引的未决列表", "commits": [], "section": "服务器 / 可靠性", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.3.12", "source_hash": "6b410808196e1c2442f1dc0726b6ee8410caf35ff06bf3330dc0c20c8859a8dd", "section_path": ["服务器", "可靠性"], "commit_groups": [["e2c79e14d"]], "identity_text": "Prevent multiple processes from trying to clean a GIN index's pending list concurrently (Teodor Sigaev, Jeff Janes) This had been intentionally allowed, but it causes race conditions that can result in vacuum missing index entries it needs to delete.", "commit_aliases": ["e2c79e14d"], "source_commits": ["e2c79e14d"], "source_entry_id": "9.6.0/changes/066", "db_id": "e0deaf013e38d26391a2a0f5b1f7062e", "patch_ids": ["8d53db94de3745ab52f624e87d7f4e6d"], "statement_hash": "66c3cc329e95d86cf9ef8ed9286f01c97c51620ae0ced22b00886c1c8e549c64", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d76678b86a914f9f", "cves": [], "html": "<p>允许同步复制支持多个同时的同步备库服务器而不只是一个（Masahiko Sawada、Beena Emerson、Michael Paquier、Fujii Masao、Kyotaro Horiguchi）</p>\n<p>提交被认为完成之前必须确认的备库服务器数量现在可作为<a href=\"/docs/9.6/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES\">synchronous_standby_names</a>参数的一部分进行配置。</p>", "text": "允许同步复制支持多个同时的同步备库服务器而不只是一个（Masahiko Sawada、Beena Emerson、Michael Paquier、Fujii Masao、Kyotaro Horiguchi） 提交被认为完成之前必须确认的备库服务器数量现在可作为synchronous_standby_names参数的一部分进行配置。", "title": "允许同步复制支持多个同时的同步备库服务器而不只是一个", "commits": [], "section": "复制与恢复", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.4", "source_hash": "0615a6b2ce96f9f3b45b65add789d462d9b44e5c89ec8450e612048257251859", "section_path": ["复制与恢复"], "commit_groups": [["17d5db352"], ["4c804fbdf"], ["989be0810"]], "identity_text": "Allow synchronous replication to support multiple simultaneous synchronous standby servers, not just one (Masahiko Sawada, Beena Emerson, Michael Paquier, Fujii Masao, Kyotaro Horiguchi) The number of standby servers that must acknowledge a commit before it is considered complete is now configurable as part of the guc-synchronous-standby-names parameter.", "commit_aliases": ["17d5db352", "4c804fbdf", "989be0810"], "source_commits": ["17d5db352", "4c804fbdf", "989be0810"], "source_entry_id": "9.6.0/changes/067", "db_id": "4032316fdcd8e8813f441c70fceb7222", "patch_ids": ["215923ec184ec901c660a20ad7c2cc38", "edcfbd6b7be38b266a853a4edd9b8d7f", "f3db3e9cc894b5b4c27cc1d1f26a106c"], "statement_hash": "153eab7a55f5e59dceebe3c01314b71154cebb795ab70945d8154a8cda920e67", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3371346bf38794a0", "cves": [], "html": "<p>为配置参数<a href=\"/docs/9.6/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT\">synchronous_commit</a>添加新设置 <code>remote_apply</code>（Thomas Munro）</p>\n<p>在这种模式下，主库等待事务在备库服务器上被<span><em>应用</em></span>而不只是写入磁盘。这意味着你可以指望备库上启动的事务看到主库先前确认的所有提交。</p>", "text": "为配置参数synchronous_commit添加新设置 remote_apply（Thomas Munro） 在这种模式下，主库等待事务在备库服务器上被应用而不只是写入磁盘。这意味着你可以指望备库上启动的事务看到主库先前确认的所有提交。", "title": "为配置参数synchronous_commit添加新设置 remote_apply", "commits": [], "section": "复制与恢复", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.4", "source_hash": "220b6c06430e48f117ca28c9d9c9382fd3aaa8580f4ba3ff995b7731acb1603d", "section_path": ["复制与恢复"], "commit_groups": [["314cbfc5d"]], "identity_text": "Add new setting remote_apply for configuration parameter guc-synchronous-commit (Thomas Munro) In this mode, the master waits for the transaction to be applied on the standby server, not just written to disk. That means that you can count on a transaction started on the standby to see all commits previously acknowledged by the master.", "commit_aliases": ["314cbfc5d"], "source_commits": ["314cbfc5d"], "source_entry_id": "9.6.0/changes/068", "db_id": "fccb22a56c56feec4e10ce394b033999", "patch_ids": ["4a0a9cdcae2c5ce04aaa01778a918ff1"], "statement_hash": "0696ddc2133bf8965ded75d87ca58f366d42f27277bd66d4f3833e798104d850", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-68bf8363e8dd7b82", "cves": [], "html": "<p>为复制协议添加一项特性，并为 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-REPLICATION-TABLE\" title=\"表 9.82. 复制 SQL 函数\"><code>pg_create_physical_replication_slot()</code></a> 添加相应选项，允许在创建复制槽时立即保留 <acronym>WAL</acronym>（Gurjeet Singh、Michael Paquier）</p>\n<p>这允许创建复制槽来保证基础备份所需的所有 <acronym>WAL</acronym> 都可用。</p>", "text": "为复制协议添加一项特性，并为 pg_create_physical_replication_slot() 添加相应选项，允许在创建复制槽时立即保留 WAL（Gurjeet Singh、Michael Paquier） 这允许创建复制槽来保证基础备份所需的所有 WAL 都可用。", "title": "为复制协议添加一项特性，并为 pg_create_physical_replication_slot() 添加相应选项，允许在创建复制槽时立即保留 WAL", "commits": [], "section": "复制与恢复", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.4", "source_hash": "c222377b6bce013e24abd8fb2522511054053db3246c51e69f4b247f391c3c3d", "section_path": ["复制与恢复"], "commit_groups": [["6fcd88511"], ["c314ead5b"]], "identity_text": "Add a feature to the replication protocol, and a corresponding option to pg_create_physical_replication_slot(), to allow reserving WAL immediately when creating a replication slot (Gurjeet Singh, Michael Paquier) This allows the creation of a replication slot to guarantee that all the WAL needed for a base backup will be available.", "commit_aliases": ["6fcd88511", "c314ead5b"], "source_commits": ["6fcd88511", "c314ead5b"], "source_entry_id": "9.6.0/changes/069", "db_id": "319fe44d1edf098a2346b2c7849b47a4", "patch_ids": ["257f8f2afef937882e67ab1368cc8141", "8e3192ddea07d1b7c6c51293ded33844"], "statement_hash": "e3ecf7db0fc4fae13dc43e23e0be962dde77aff4f0e72ae0c587f8d00ef49d49", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-88994f98c44c2112", "cves": [], "html": "<p>为<a href=\"/docs/9.6/app-pgbasebackup.html\" title=\"pg_basebackup\"><span>pg_basebackup</span></a>添加 <code>--slot</code> 选项（Peter Eisentraut）</p>\n<p>这让 <span>pg_basebackup</span> 能使用为 <acronym>WAL</acronym> 流式传输定义的复制槽。基础备份完成后，为常规流复制选择同一槽允许新的备库服务器无缝启动。</p>", "text": "为pg_basebackup添加 --slot 选项（Peter Eisentraut） 这让 pg_basebackup 能使用为 WAL 流式传输定义的复制槽。基础备份完成后，为常规流复制选择同一槽允许新的备库服务器无缝启动。", "title": "为pg_basebackup添加 --slot 选项", "commits": [], "section": "复制与恢复", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.4", "source_hash": "eb157f0576be9bc9779196ca50c01d4167998067d8041d9c17ab53ba60e383f6", "section_path": ["复制与恢复"], "commit_groups": [["0dc848b03"]], "identity_text": "Add a --slot option to pg_basebackup (Peter Eisentraut) This lets pg_basebackup use a replication slot defined for WAL streaming. After the base backup completes, selecting the same slot for regular streaming replication allows seamless startup of the new standby server.", "commit_aliases": ["0dc848b03"], "source_commits": ["0dc848b03"], "source_entry_id": "9.6.0/changes/070", "db_id": "5f8e05a3fa7ac1e6f31313c5f302c3bf", "patch_ids": ["3c834d40e67eeb6360412b1cdbc49380"], "statement_hash": "779d2f757749b04c8506ee05fd6d91cf98ef086bdccd656d3ffe5b49c71bd097", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-aa2802086f3d1f16", "cves": [], "html": "<p>扩展 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-ADMIN-BACKUP-TABLE\" title=\"表 9.78. 备份控制函数\"><code>pg_start_backup()</code></a> 和 <code>pg_stop_backup()</code> 以支持非独占备份（Magnus Hagander）</p>", "text": "扩展 pg_start_backup() 和 pg_stop_backup() 以支持非独占备份（Magnus Hagander）", "title": "扩展 pg_start_backup() 和 pg_stop_backup() 以支持非独占备份", "commits": [], "section": "复制与恢复", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.4", "source_hash": "d71e83a0ab980db56cd8abc8174d01813a997297cc0ae31411c02ad0f0edf5f2", "section_path": ["复制与恢复"], "commit_groups": [["711768546"], ["87d84d67b"]], "identity_text": "Extend pg_start_backup() and pg_stop_backup() to support non-exclusive backups (Magnus Hagander)", "commit_aliases": ["711768546", "87d84d67b"], "source_commits": ["711768546", "87d84d67b"], "source_entry_id": "9.6.0/changes/071", "db_id": "dca55d936a92b8690a471c2311fcd45e", "patch_ids": ["0e418466db412e3335af734c3a39751c", "cff46614ffac5cd0b2080bc2dbaabd92"], "statement_hash": "ff8742009cd2a98231ef5022062c6a2ad2ac7cffeae481e34df61a7c0feab2c7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-02cbf719e42f687c", "cves": [], "html": "<p>允许返回元组集合的函数返回简单的 <code>NULL</code>（Andrew Gierth、Tom Lane）</p>\n<p>在 <code>SELECT FROM function(...)</code> 的上下文中，返回复合值集合的函数以前不允许作为集合的一部分返回普通的 <code>NULL</code> 值。现在这是允许的并被解释为一行 <code>NULL</code>。这避免了例如展开复合值数组时的边界错误。</p>", "text": "允许返回元组集合的函数返回简单的 NULL（Andrew Gierth、Tom Lane） 在 SELECT FROM function(...) 的上下文中，返回复合值集合的函数以前不允许作为集合的一部分返回普通的 NULL 值。现在这是允许的并被解释为一行 NULL。这避免了例如展开复合值数组时的边界错误。", "title": "允许返回元组集合的函数返回简单的 NULL", "commits": [], "section": "查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.5", "source_hash": "f00fa9ec49db65bc155309afdc2cb00989ee73cbad44b3da6b281525614b2f83", "section_path": ["查询"], "commit_groups": [["d8411a6c8"]], "identity_text": "Allow functions that return sets of tuples to return simple NULLs (Andrew Gierth, Tom Lane) In the context of SELECT FROM function(...), a function that returned a set of composite values was previously not allowed to return a plain NULL value as part of the set. Now that is allowed and interpreted as a row of NULLs. This avoids corner-case errors with, for example, unnesting an array of composite values.", "commit_aliases": ["d8411a6c8"], "source_commits": ["d8411a6c8"], "source_entry_id": "9.6.0/changes/072", "db_id": "eaef868188f5ff4c98a2cb1b671c019a", "patch_ids": ["d9278e7d43e9bfbe00bc0242e9455583"], "statement_hash": "221183a942c7638472a304b4224c716107cfca7324d02febc0c75d778a615d5a", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4bcf5dbf6acaf497", "cves": [], "html": "<p>完全支持带多行 <code>VALUES</code> 的 <code>INSERT</code> 的目标列列表中的数组下标和字段选择（Tom Lane）</p>\n<p>以前这种情况下如果同一目标列被提及多于一次就会失败，例如 <code>INSERT INTO tab (x[1], x[2]) VALUES (...)</code>。</p>", "text": "完全支持带多行 VALUES 的 INSERT 的目标列列表中的数组下标和字段选择（Tom Lane） 以前这种情况下如果同一目标列被提及多于一次就会失败，例如 INSERT INTO tab (x[1], x[2]) VALUES (...)。", "title": "完全支持带多行 VALUES 的 INSERT 的目标列列表中的数组下标和字段选择", "commits": [], "section": "查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.5", "source_hash": "949ba79021765ddbf6e6528fe66de8f7ea0a2a0fcc58250df59cc508e6679654", "section_path": ["查询"], "commit_groups": [["a3c7a993d"]], "identity_text": "Fully support array subscripts and field selections in the target column list of an INSERT with multiple VALUES rows (Tom Lane) Previously, such cases failed if the same target column was mentioned more than once, e.g., INSERT INTO tab (x[1], x[2]) VALUES (...).", "commit_aliases": ["a3c7a993d"], "source_commits": ["a3c7a993d"], "source_entry_id": "9.6.0/changes/073", "db_id": "17976aaf7f2da10841d9a74141a63cf0", "patch_ids": ["43d7f6276dfff63b5a77acced89bad92"], "statement_hash": "f20f3f4114af45cfc993b735bdb3a51273ede6da3245a712bb43de5c4112f9a6", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-420a512ec91aecb7", "cves": [], "html": "<p>在适当之处把 <code>SELECT</code> 输出表达式的求值推迟到 <code>ORDER BY</code> 排序之后（Konstantin Knizhnik）</p>\n<p>此更改确保输出列表中的易变或昂贵函数按 <code>ORDER BY</code> 建议的顺序执行，并且当有 <code>LIMIT</code> 子句时不会被求值超过需要的次数。以前如果排序由索引扫描或合并前排序执行这些性质成立，但由顶层排序执行时不成立。</p>", "text": "在适当之处把 SELECT 输出表达式的求值推迟到 ORDER BY 排序之后（Konstantin Knizhnik） 此更改确保输出列表中的易变或昂贵函数按 ORDER BY 建议的顺序执行，并且当有 LIMIT 子句时不会被求值超过需要的次数。以前如果排序由索引扫描或合并前排序执行这些性质成立，但由顶层排序执行时不成立。", "title": "在适当之处把 SELECT 输出表达式的求值推迟到 ORDER BY 排序之后", "commits": [], "section": "查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.5", "source_hash": "ad277dd9646b41db021ddf3f65d744806eb6e285f683508382bfdf06782adccb", "section_path": ["查询"], "commit_groups": [["9118d03a8"], ["d543170f2"]], "identity_text": "When appropriate, postpone evaluation of SELECT output expressions until after an ORDER BY sort (Konstantin Knizhnik) This change ensures that volatile or expensive functions in the output list are executed in the order suggested by ORDER BY, and that they are not evaluated more times than required when there is a LIMIT clause. Previously, these properties held if the ordering was performed by an index scan or pre-merge-join sort, but not if it was performed by a top-level sort.", "commit_aliases": ["9118d03a8", "d543170f2"], "source_commits": ["9118d03a8", "d543170f2"], "source_entry_id": "9.6.0/changes/074", "db_id": "3ef0781024b8b527e8fb3697c0b0e93a", "patch_ids": ["60726c3f69689950e0487ceeb0b10b9e", "7603786614cb76cc5b04c0defe848501"], "statement_hash": "9ce59327b6d579a61f8bdec14f234688b370d636acf0972ace4616e94fb1dcc7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d44d727af1ca6be3", "cves": [], "html": "<p>把记录已处理元组数的计数器加宽到 64 位（Andreas Scherbaum）</p>\n<p>此更改允许命令标记（如 <code>SELECT</code>）正确报告超过 40 亿的元组数。这也适用于 PL/pgSQL 的 <code>GET DIAGNOSTICS ... ROW_COUNT</code> 命令。</p>", "text": "把记录已处理元组数的计数器加宽到 64 位（Andreas Scherbaum） 此更改允许命令标记（如 SELECT）正确报告超过 40 亿的元组数。这也适用于 PL/pgSQL 的 GET DIAGNOSTICS ... ROW_COUNT 命令。", "title": "把记录已处理元组数的计数器加宽到 64 位", "commits": [], "section": "查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.5", "source_hash": "dc1bbb9af5da105ac532733a1eb1a0142edd5e21e8a3e7843341d5fa8bdf428a", "section_path": ["查询"], "commit_groups": [["23a27b039"], ["74a379b98"]], "identity_text": "Widen counters recording the number of tuples processed to 64 bits (Andreas Scherbaum) This change allows command tags, e.g., SELECT, to correctly report tuple counts larger than 4 billion. This also applies to PL/pgSQL's GET DIAGNOSTICS ... ROW_COUNT command.", "commit_aliases": ["23a27b039", "74a379b98"], "source_commits": ["23a27b039", "74a379b98"], "source_entry_id": "9.6.0/changes/075", "db_id": "05a0711d78944806983c9260f1d1da71", "patch_ids": ["47605db42bd814c07c3cd374a26820a6", "ad9946d8edcec200f17545acf4053c48"], "statement_hash": "e2dfbcd474014ed1974c9a851e78f5a68ad1733fc657f6b02dcf731778af60ce", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3be9f88c41e8b145", "cves": [], "html": "<p>避免通过 <code>MULE_INTERNAL</code> 编码进行编码转换（Tom Lane）</p>\n<p>以前西里尔和中欧单字节编码的许多转换是通过转换到相关的 <code>MULE_INTERNAL</code> 编码方案再转到目标编码完成的。除了低效之外，这意味着当转换遇到不可翻译字符时，错误消息会令人困惑地抱怨无法转换到或从 <code>MULE_INTERNAL</code>，而不是用户可见的编码。</p>", "text": "避免通过 MULE_INTERNAL 编码进行编码转换（Tom Lane） 以前西里尔和中欧单字节编码的许多转换是通过转换到相关的 MULE_INTERNAL 编码方案再转到目标编码完成的。除了低效之外，这意味着当转换遇到不可翻译字符时，错误消息会令人困惑地抱怨无法转换到或从 MULE_INTERNAL，而不是用户可见的编码。", "title": "避免通过 MULE_INTERNAL 编码进行编码转换", "commits": [], "section": "查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.5", "source_hash": "a3f5b889ead5c8b5c6e769fd39186525bbb5f8c72f7ada01cfc1ed9201b3f935", "section_path": ["查询"], "commit_groups": [["8d32717b6"]], "identity_text": "Avoid doing encoding conversions by converting through the MULE_INTERNAL encoding (Tom Lane) Previously, many conversions for Cyrillic and Central European single-byte encodings were done by converting to a related MULE_INTERNAL coding scheme and then to the destination encoding. Aside from being inefficient, this meant that when the conversion encountered an untranslatable character, the error message would confusingly complain about failure to convert to or from MULE_INTERNAL, rather than the user-visible encoding.", "commit_aliases": ["8d32717b6"], "source_commits": ["8d32717b6"], "source_entry_id": "9.6.0/changes/076", "db_id": "19668e113722ba9a46438667f860abdd", "patch_ids": ["f416fc390626497a5afe4caee011d944"], "statement_hash": "64a56f5a7138a6f01d754c600bab6637e236f240a69e192c0a56bf9e5d95b9ea", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-87d2369ddc8f292c", "cves": [], "html": "<p>只有当外部表将在同一角色 ID 下被访问时才考虑远程执行外部表的连接（Shigeru Hanada、Ashutosh Bapat、Etsuro Fujita）</p>\n<p>以前外部连接下推基础设施把安全问题完全留给各个外部数据包装器，但这使 <acronym>FDW</acronym> 太容易无意中创建微妙的安全漏洞。因此改为核心代码决定哪个角色 ID 将访问每个表，除非所有相关关系的角色相同，否则不尝试连接下推。</p>", "text": "只有当外部表将在同一角色 ID 下被访问时才考虑远程执行外部表的连接（Shigeru Hanada、Ashutosh Bapat、Etsuro Fujita） 以前外部连接下推基础设施把安全问题完全留给各个外部数据包装器，但这使 FDW 太容易无意中创建微妙的安全漏洞。因此改为核心代码决定哪个角色 ID 将访问每个表，除非所有相关关系的角色相同，否则不尝试连接下推。", "title": "只有当外部表将在同一角色 ID 下被访问时才考虑远程执行外部表的连接", "commits": [], "section": "查询", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.5", "source_hash": "cf878875c1ad9d9258e47e26461ff861b1aa633fe975a7d3936df4fc8de12eb1", "section_path": ["查询"], "commit_groups": [["45639a052"], ["fbe5a3fb7"]], "identity_text": "Consider performing joins of foreign tables remotely only when the tables will be accessed under the same role ID (Shigeru Hanada, Ashutosh Bapat, Etsuro Fujita) Previously, the foreign join pushdown infrastructure left the question of security entirely up to individual foreign data wrappers, but that made it too easy for an FDW to inadvertently create subtle security holes. So, make it the core code's job to determine which role ID will access each table, and do not attempt join pushdown unless the role is the same for all relevant relations.", "commit_aliases": ["45639a052", "fbe5a3fb7"], "source_commits": ["45639a052", "fbe5a3fb7"], "source_entry_id": "9.6.0/changes/077", "db_id": "78a65fda3f2b9460cd3560a18d56051a", "patch_ids": ["079083e00e1329165e46a57d681d6bbd", "2cf53aaabedb900e0d3bb404d29f5954"], "statement_hash": "40d335d922fae9e308cec4ca037964364d73ceb3061c5386258292a59ba29389", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-295104f7939af8ff", "cves": [], "html": "<p>允许 <code>COPY</code> 复制 <code>INSERT</code>/<code>UPDATE</code>/<code>DELETE</code> ... <code>RETURNING</code> 查询的输出（Marko Tiikkaja）</p>\n<p>以前必须编写中间 <acronym>CTE</acronym> 才能得到这个结果。</p>", "text": "允许 COPY 复制 INSERT/UPDATE/DELETE ... RETURNING 查询的输出（Marko Tiikkaja） 以前必须编写中间 CTE 才能得到这个结果。", "title": "允许 COPY 复制 INSERT/UPDATE/DELETE ... RETURNING 查询的输出", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "4479a53cb5e8a62815dfda56c70cc1a30b31e90171b270256474e3ca6c0a6b1c", "section_path": ["工具命令"], "commit_groups": [["92e38182d"]], "identity_text": "Allow COPY to copy the output of an INSERT/UPDATE/DELETE ... RETURNING query (Marko Tiikkaja) Previously, an intermediate CTE had to be written to get this result.", "commit_aliases": ["92e38182d"], "source_commits": ["92e38182d"], "source_entry_id": "9.6.0/changes/078", "db_id": "2467cb6225d24dc1463f9c028e4a4b70", "patch_ids": ["1b161fa8179097d8009f5986bc59daba"], "statement_hash": "2a04e6d8dd0d85dae1105ee82c395d944d2731d0e95c9b5f6f1cd9c4297281f5", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6457d45a0491131f", "cves": [], "html": "<p>引入 <code>ALTER <em><code>object</code></em> DEPENDS ON EXTENSION</code>（Abhijit Menon-Sen）</p>\n<p>此命令允许把数据库对象标记为依赖于某个扩展，使它在扩展被删除时自动删除（不需要 <code>CASCADE</code>）。但该对象不是扩展的一部分，因此 <span>pg_dump</span> 会单独转储它。</p>", "text": "引入 ALTER object DEPENDS ON EXTENSION（Abhijit Menon-Sen） 此命令允许把数据库对象标记为依赖于某个扩展，使它在扩展被删除时自动删除（不需要 CASCADE）。但该对象不是扩展的一部分，因此 pg_dump 会单独转储它。", "title": "引入 ALTER object DEPENDS ON EXTENSION", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "60422c6726d2857482c86119617a2dce86af8b6581ac466452f1174548b9af10", "section_path": ["工具命令"], "commit_groups": [["f2fcad27d"]], "identity_text": "Introduce ALTER object DEPENDS ON EXTENSION (Abhijit Menon-Sen) This command allows a database object to be marked as depending on an extension, so that it will be dropped automatically if the extension is dropped (without needing CASCADE). However, the object is not part of the extension, and thus will be dumped separately by pg_dump.", "commit_aliases": ["f2fcad27d"], "source_commits": ["f2fcad27d"], "source_entry_id": "9.6.0/changes/079", "db_id": "8a1ed64612f2b6cc732de2dd111dcbbc", "patch_ids": ["497d171ce12000455e940c862bda97b4"], "statement_hash": "c0c32a4bf64ee28064c1d03b6552fd256702fe814075d9eb42bc3613a1efd6e4", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-b535b3cedaef98fb", "cves": [], "html": "<p>使 <code>ALTER <em><code>object</code></em> SET SCHEMA</code> 在对象已位于请求的模式中时不做任何事，而不是像历史上对大多数对象类型那样抛出错误（Marti Raudsepp）</p>", "text": "使 ALTER object SET SCHEMA 在对象已位于请求的模式中时不做任何事，而不是像历史上对大多数对象类型那样抛出错误（Marti Raudsepp）", "title": "使 ALTER object SET SCHEMA 在对象已位于请求的模式中时不做任何事，而不是像历史上对大多数对象类型那样抛出错误", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "360d7954023a8e537edf2d4b1fa76a15e0ad69ca514d73c10c8a2b32f56f1b24", "section_path": ["工具命令"], "commit_groups": [["bc4996e61"]], "identity_text": "Make ALTER object SET SCHEMA do nothing when the object is already in the requested schema, rather than throwing an error as it historically has for most object types (Marti Raudsepp)", "commit_aliases": ["bc4996e61"], "source_commits": ["bc4996e61"], "source_entry_id": "9.6.0/changes/080", "db_id": "f269e38fb279400ecd637f57e580c1d8", "patch_ids": ["9dcc868403453c63ab13f132cd92d52c"], "statement_hash": "005d6aa5b309a475ba4a6e6e80097eb925845033f94986c40b153abf32489eb3", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-38b15fc673a86719", "cves": [], "html": "<p>为 <code>ALTER OPERATOR</code> 添加选项以允许更改与现有操作符关联的选择率函数（Yury Zhuravlev）</p>", "text": "为 ALTER OPERATOR 添加选项以允许更改与现有操作符关联的选择率函数（Yury Zhuravlev）", "title": "为 ALTER OPERATOR 添加选项以允许更改与现有操作符关联的选择率函数", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "3fc3fa36d927b33c10440d93e5be11e4e34ae1763c83428438e3faf5e8cf73d4", "section_path": ["工具命令"], "commit_groups": [["0dab5ef39"], ["321eed5f0"]], "identity_text": "Add options to ALTER OPERATOR to allow changing the selectivity functions associated with an existing operator (Yury Zhuravlev)", "commit_aliases": ["0dab5ef39", "321eed5f0"], "source_commits": ["0dab5ef39", "321eed5f0"], "source_entry_id": "9.6.0/changes/081", "db_id": "2a88d585127ac85bf518c01636d17599", "patch_ids": ["3bb7091e8ecaadbcfa06ced2103cbcf0", "f01be0c1cf40c506cd10e7332d5f0f67"], "statement_hash": "ad9493c9a6536e5911ddfd3fd65321bf81a290d2cede5b94f0c3f9575b83bc8f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-f05301bb22fbe971", "cves": [], "html": "<p>为 <code>ALTER TABLE ADD COLUMN</code> 添加 <code>IF NOT EXISTS</code> 选项（Fabrízio de Royes Mello）</p>", "text": "为 ALTER TABLE ADD COLUMN 添加 IF NOT EXISTS 选项（Fabrízio de Royes Mello）", "title": "为 ALTER TABLE ADD COLUMN 添加 IF NOT EXISTS 选项", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "567e32620905d00e36d4999a98e070202c979956c2ce4dc6eb99bd01f3503698", "section_path": ["工具命令"], "commit_groups": [["2cd40adb8"]], "identity_text": "Add an IF NOT EXISTS option to ALTER TABLE ADD COLUMN (Fabrízio de Royes Mello)", "commit_aliases": ["2cd40adb8"], "source_commits": ["2cd40adb8"], "source_entry_id": "9.6.0/changes/082", "db_id": "4edec80867ea1923fe30aefeeb515b30", "patch_ids": ["81b743b942679a8874fec4ea8c40b4da"], "statement_hash": "ecba9e7e32678c3ff029cfcd509c128d2f8d7c78c52c56b84bb79bde6b6133f6", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-8e3a71521080397c", "cves": [], "html": "<p>降低 <code>ALTER TABLE</code> 在设置 fillfactor 和自动清理相关关系选项时所需的锁强度（Fabrízio de Royes Mello、Simon Riggs）</p>", "text": "降低 ALTER TABLE 在设置 fillfactor 和自动清理相关关系选项时所需的锁强度（Fabrízio de Royes Mello、Simon Riggs）", "title": "降低 ALTER TABLE 在设置 fillfactor 和自动清理相关关系选项时所需的锁强度", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "03cb1b6b7ccf1790d2842005637fa7df68816009c304754c5b8636a94d339baf", "section_path": ["工具命令"], "commit_groups": [["47167b790"], ["fcb4bfddb"]], "identity_text": "Reduce the lock strength needed by ALTER TABLE when setting fillfactor and autovacuum-related relation options (Fabrízio de Royes Mello, Simon Riggs)", "commit_aliases": ["47167b790", "fcb4bfddb"], "source_commits": ["47167b790", "fcb4bfddb"], "source_entry_id": "9.6.0/changes/083", "db_id": "f143c44391689e2df86af7c45bb1c669", "patch_ids": ["af28725b605733e5cc7f975d10afb213", "ee743db2afcc3012b2e8b86443b61d43"], "statement_hash": "b571deb72b264d6f50e2444ec008aaba8027e636cf7afc38c6bdd58f31582b1d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-fc68617df0321538", "cves": [], "html": "<p>引入 <a href=\"/docs/9.6/sql-create-access-method.html\" title=\"CREATE ACCESS METHOD\"><code>CREATE ACCESS METHOD</code></a> 以允许扩展创建索引访问方法（Alexander Korotkov、Petr Jelínek）</p>", "text": "引入 CREATE ACCESS METHOD 以允许扩展创建索引访问方法（Alexander Korotkov、Petr Jelínek）", "title": "引入 CREATE ACCESS METHOD 以允许扩展创建索引访问方法", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "d9ad3e57061ae6c908b37ed08649d551d68560b895e55d047b746020cc62b7fe", "section_path": ["工具命令"], "commit_groups": [["473b93287"]], "identity_text": "Introduce CREATE ACCESS METHOD to allow extensions to create index access methods (Alexander Korotkov, Petr Jelínek)", "commit_aliases": ["473b93287"], "source_commits": ["473b93287"], "source_entry_id": "9.6.0/changes/084", "db_id": "94f1e93bee5cfa5225aa181ca3509b73", "patch_ids": ["5ba934e7d9c6fc07ef6c3ba71c7bd38b"], "statement_hash": "85b0d105f9f5303220974aa2e7e608e92aeabfffe14d7561546386e2c0610ef0", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-ea028a44c773e557", "cves": [], "html": "<p>为 <code>CREATE EXTENSION</code> 添加 <code>CASCADE</code> 选项以自动创建所请求扩展依赖的任何扩展（Petr Jelínek）</p>", "text": "为 CREATE EXTENSION 添加 CASCADE 选项以自动创建所请求扩展依赖的任何扩展（Petr Jelínek）", "title": "为 CREATE EXTENSION 添加 CASCADE 选项以自动创建所请求扩展依赖的任何扩展", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "1d906e7a671af3b362df5556f6a7cf56a76cab4c874aa18e22f0a783522b4dbe", "section_path": ["工具命令"], "commit_groups": [["b67aaf21e"]], "identity_text": "Add a CASCADE option to CREATE EXTENSION to automatically create any extensions the requested one depends on (Petr Jelínek)", "commit_aliases": ["b67aaf21e"], "source_commits": ["b67aaf21e"], "source_entry_id": "9.6.0/changes/085", "db_id": "bd9ddc104c72c9de7d6e2b9eae38a940", "patch_ids": ["6a9914cb4872d9ef2700d5947b4c7b70"], "statement_hash": "09faa16fc30aa454ac84ca55fdd2f821e61fa3f64965e009cebdacb0c97dfeff", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-79aaeccb103dfad5", "cves": [], "html": "<p>使 <code>CREATE TABLE ... LIKE</code> 在任何源表有 <code>OID</code> 列时包含 OID 列（Bruce Momjian）</p>", "text": "使 CREATE TABLE ... LIKE 在任何源表有 OID 列时包含 OID 列（Bruce Momjian）", "title": "使 CREATE TABLE ... LIKE 在任何源表有 OID 列时包含 OID 列", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "c56b247b17aea9e7d52915ae349898de9f3f8e1cdd7d43d9ea4abb9551e29482", "section_path": ["工具命令"], "commit_groups": [["b943f502b"]], "identity_text": "Make CREATE TABLE ... LIKE include an OID column if any source table has one (Bruce Momjian)", "commit_aliases": ["b943f502b"], "source_commits": ["b943f502b"], "source_entry_id": "9.6.0/changes/086", "db_id": "2ec17ca3c61d492f26fa3658cae85a88", "patch_ids": ["c5f57b70bbe2867373e7475fe82bd6b8"], "statement_hash": "9a0d6228c6d5e0bedd3e6cde93849967ecf7aaaec69ce94aa39734f068de910f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a58b0b34f50ff4b8", "cves": [], "html": "<p>如果 <code>CHECK</code> 约束在表创建命令中被声明为 <code>NOT VALID</code>，自动把它标记为有效（Amit Langote、Amul Sul）</p>\n<p>这是安全的，因为表没有现有行。这与 <code>FOREIGN KEY</code> 约束的长期行为一致。</p>", "text": "如果 CHECK 约束在表创建命令中被声明为 NOT VALID，自动把它标记为有效（Amit Langote、Amul Sul） 这是安全的，因为表没有现有行。这与 FOREIGN KEY 约束的长期行为一致。", "title": "如果 CHECK 约束在表创建命令中被声明为 NOT VALID，自动把它标记为有效", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "3329373217749ab87420c942d4222ce9639805aa03849ce8d7f1bcfa3b2803d7", "section_path": ["工具命令"], "commit_groups": [["f27a6b15e"]], "identity_text": "If a CHECK constraint is declared NOT VALID in a table creation command, automatically mark it as valid (Amit Langote, Amul Sul) This is safe because the table has no existing rows. This matches the longstanding behavior of FOREIGN KEY constraints.", "commit_aliases": ["f27a6b15e"], "source_commits": ["f27a6b15e"], "source_entry_id": "9.6.0/changes/087", "db_id": "07abb13c76b6726d017351127274bc45", "patch_ids": ["6444ea0e0c5eb115e78f63b754a4cc37"], "statement_hash": "c54a6546b85aaab62bf55ec5a11b4d0d474e1178f872ed7de9de2106480ca51d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-28270299529a96cf", "cves": [], "html": "<p>修复 <code>DROP OPERATOR</code> 清除指向被删除操作符的 <code>pg_operator</code>.<code>oprcom</code> 和 <code>pg_operator</code>.<code>oprnegate</code> 链接（Roma Sokolov）</p>\n<p>以前这种链接保持原样，在被删除操作符的 <code>OID</code> 被复用于另一个操作符这种不太可能的事件中可能造成问题。</p>", "text": "修复 DROP OPERATOR 清除指向被删除操作符的 pg_operator.oprcom 和 pg_operator.oprnegate 链接（Roma Sokolov） 以前这种链接保持原样，在被删除操作符的 OID 被复用于另一个操作符这种不太可能的事件中可能造成问题。", "title": "修复 DROP OPERATOR 清除指向被删除操作符的 pg_operator.oprcom 和 pg_operator.oprnegate 链接", "commits": [], "section": "工具命令", "category": "bugfix", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "037c29b9b6bad2c41e4cc92426f98be1f3ab74d0ef6c99fb1afcf951afc5a4fa", "section_path": ["工具命令"], "commit_groups": [["c94959d41"]], "identity_text": "Fix DROP OPERATOR to clear pg_operator.oprcom and pg_operator.oprnegate links to the dropped operator (Roma Sokolov) Formerly such links were left as-is, which could pose a problem in the somewhat unlikely event that the dropped operator's OID was reused for another operator.", "commit_aliases": ["c94959d41"], "source_commits": ["c94959d41"], "source_entry_id": "9.6.0/changes/088", "db_id": "005c6ea8eae2eec4da6968038a0edade", "patch_ids": ["a8d14c20d8795de5010524bdef2c93e5"], "statement_hash": "94c08fd36a98e98711267f4961adf2fc78e326eb1775fb4d8141acc3a3aed6e6", "relations": [], "version": "9.6.0", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-1f5580eceb83e743", "cves": [], "html": "<p>不在 <code>EXPLAIN</code> 输出中两次显示同一子计划（Tom Lane）</p>\n<p>某些情况下（通常涉及索引条件中的 SubPlan 节点），<code>EXPLAIN</code> 会两次打印同一子计划的数据。</p>", "text": "不在 EXPLAIN 输出中两次显示同一子计划（Tom Lane） 某些情况下（通常涉及索引条件中的 SubPlan 节点），EXPLAIN 会两次打印同一子计划的数据。", "title": "不在 EXPLAIN 输出中两次显示同一子计划", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "34904b902d34abd16124b454ac528391206a0f183eafff974dc131a45d5e95f7", "section_path": ["工具命令"], "commit_groups": [["4d042999f"]], "identity_text": "Do not show the same subplan twice in EXPLAIN output (Tom Lane) In certain cases, typically involving SubPlan nodes in index conditions, EXPLAIN would print data for the same subplan twice.", "commit_aliases": ["4d042999f"], "source_commits": ["4d042999f"], "source_entry_id": "9.6.0/changes/089", "db_id": "10d9b65e130e3e9f10669a5cfe087417", "patch_ids": ["500eaa6181c489fccc9f580f9683118f"], "statement_hash": "f90cf7a82d0b37cad99525c0c08b2a247197e534e9939cccb8ea49158d276903", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-61e3d9b20465276b", "cves": [], "html": "<p>禁止在系统列上创建索引，<code>OID</code> 列除外（David Rowley）</p>\n<p>这种索引从未被视为受支持，而且很可能行为不当，因为系统可能在不更新索引的情况下更改元组的系统列字段。但以前没有防止创建它们的错误检查。</p>", "text": "禁止在系统列上创建索引，OID 列除外（David Rowley） 这种索引从未被视为受支持，而且很可能行为不当，因为系统可能在不更新索引的情况下更改元组的系统列字段。但以前没有防止创建它们的错误检查。", "title": "禁止在系统列上创建索引，OID 列除外", "commits": [], "section": "工具命令", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.6", "source_hash": "3d099b2c95203db8503099276c3ba969eecded4b6cdbb6e7ec0d227c06641e05", "section_path": ["工具命令"], "commit_groups": [["c34df8a00"]], "identity_text": "Disallow creation of indexes on system columns, except for OID columns (David Rowley) Such indexes were never considered supported, and would very possibly misbehave since the system might change the system-column fields of a tuple without updating indexes. However, previously there were no error checks to prevent them from being created.", "commit_aliases": ["c34df8a00"], "source_commits": ["c34df8a00"], "source_entry_id": "9.6.0/changes/090", "db_id": "9db9e365b10394c400f1a3c224df566b", "patch_ids": ["c13917cba4577088098173855ae6ae75"], "statement_hash": "897b9e9f04082a81c54de9c7da9dad3c0fa528531d24b611e05dae4c54b57f21", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5850008d4e580938", "cves": [], "html": "<p>使用权限系统管理对敏感函数的访问（Stephen Frost）</p>\n<p>以前许多安全敏感函数包含硬编码的检查，在被非超级用户调用时会抛出错误。这迫使一些相对平常的任务使用超级用户角色。硬编码的错误检查现已移除，改为让 <span>initdb</span> 撤销这些函数上的公共 <code>EXECUTE</code> 权限。这允许安装选择把这种函数的使用权授予不需要全部超级用户权限的可信角色。</p>", "text": "使用权限系统管理对敏感函数的访问（Stephen Frost） 以前许多安全敏感函数包含硬编码的检查，在被非超级用户调用时会抛出错误。这迫使一些相对平常的任务使用超级用户角色。硬编码的错误检查现已移除，改为让 initdb 撤销这些函数上的公共 EXECUTE 权限。这允许安装选择把这种函数的使用权授予不需要全部超级用户权限的可信角色。", "title": "使用权限系统管理对敏感函数的访问", "commits": [], "section": "权限管理", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.7", "source_hash": "b440b337fbb180edf4096a9d8fa428099047e172582a0195533b8763a6e78bd7", "section_path": ["权限管理"], "commit_groups": [["1574783b4"]], "identity_text": "Use the privilege system to manage access to sensitive functions (Stephen Frost) Formerly, many security-sensitive functions contained hard-wired checks that would throw an error if they were called by a non-superuser. This forced the use of superuser roles for some relatively pedestrian tasks. The hard-wired error checks are now gone in favor of making initdb revoke the default public EXECUTE privilege on these functions. This allows installations to choose to grant usage of such functions to trusted roles that do not need all superuser privileges.", "commit_aliases": ["1574783b4"], "source_commits": ["1574783b4"], "source_entry_id": "9.6.0/changes/091", "db_id": "b9ad438c4145f62439f3632fce7f1d1e", "patch_ids": ["2769d03cdec3b20644e9f59bd38a05ff"], "statement_hash": "ae519bc37d49e596341b1f56f5fdb4cc4ba120c52864ead2f01fca1926c67025", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-59077ff4f598ea9e", "cves": [], "html": "<p>创建一些<a href=\"/docs/9.6/default-roles.html\" title=\"21.5. 默认角色\">内建角色</a>，可用于授予对以前仅限超级用户的函数的访问（Stephen Frost）</p>\n<p>当前唯一这种角色是 <code>pg_signal_backend</code>，但预计未来会添加更多。</p>", "text": "创建一些内建角色，可用于授予对以前仅限超级用户的函数的访问（Stephen Frost） 当前唯一这种角色是 pg_signal_backend，但预计未来会添加更多。", "title": "创建一些内建角色，可用于授予对以前仅限超级用户的函数的访问", "commits": [], "section": "权限管理", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.7", "source_hash": "2d44be18814e79b3b62ab44170768b78dcabaf545ccd7814f720ef4f0d85a861", "section_path": ["权限管理"], "commit_groups": [["7a542700d"]], "identity_text": "Create some built-in roles that can be used to grant access to what were previously superuser-only functions (Stephen Frost) Currently the only such role is pg_signal_backend, but more are expected to be added in future.", "commit_aliases": ["7a542700d"], "source_commits": ["7a542700d"], "source_entry_id": "9.6.0/changes/092", "db_id": "d89dc78e6e7edd80aef53eebb08bc949", "patch_ids": ["2a982e4398522cefe9a137bd959914cd"], "statement_hash": "36f772ee3b2f3773e605de8044ce29e943d4badc9e31e2986707152e0822ddb2", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3d16a1cda7f7e18f", "cves": [], "html": "<p>改进<a href=\"/docs/9.6/textsearch.html\" title=\"第 12 章 全文搜索\">全文搜索</a>以支持搜索短语，即以特定顺序相邻出现或之间有指定距离的词素（Teodor Sigaev、Oleg Bartunov、Dmitry Ivanov）</p>\n<p>短语搜索查询可以在 <code>tsquery</code> 输入中用新操作符 <code>&lt;-&gt;</code> 和 <code>&lt;<em><code>N</code></em>&gt;</code> 指定。前者表示它前后的词素必须以该顺序相邻出现。后者表示它们必须恰好相隔 <em><code>N</code></em> 个词素。</p>", "text": "改进全文搜索以支持搜索短语，即以特定顺序相邻出现或之间有指定距离的词素（Teodor Sigaev、Oleg Bartunov、Dmitry Ivanov） 短语搜索查询可以在 tsquery 输入中用新操作符 <-> 和 <N> 指定。前者表示它前后的词素必须以该顺序相邻出现。后者表示它们必须恰好相隔 N 个词素。", "title": "改进全文搜索以支持搜索短语，即以特定顺序相邻出现或之间有指定距离的词素", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "5c98635e44681297592e97ef797270cababcd15d82a1af2107754320bb9e5eda", "section_path": ["数据类型"], "commit_groups": [["028350f61"], ["3dbbd0f02"], ["6734a1cac"], ["bb140506d"]], "identity_text": "Improve full-text search to support searching for phrases, that is, lexemes appearing adjacent to each other in a specific order, or with a specified distance between them (Teodor Sigaev, Oleg Bartunov, Dmitry Ivanov) A phrase-search query can be specified in tsquery input using the new operators <-> and <N>. The former means that the lexemes before and after it must appear adjacent to each other in that order. The latter means they must be exactly N lexemes apart.", "commit_aliases": ["028350f61", "3dbbd0f02", "6734a1cac", "bb140506d"], "source_commits": ["028350f61", "3dbbd0f02", "6734a1cac", "bb140506d"], "source_entry_id": "9.6.0/changes/093", "db_id": "5dab53e6088d28902f6a7c946e779cec", "patch_ids": ["4e9d902372398ff4ad7fab5833b07d54", "9eebd1840877aa7c523cf56bd746c630", "aa19fb572cd2d23589ee0db6089c0ca2", "c93059b2e6fdc28fcddb0b86d52063a2"], "statement_hash": "cb069b72557a73a272ca65f3143e27d41fbf06d45e5edae5fc44d7d60f7950f7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-ab09e4d880780ce3", "cves": [], "html": "<p>允许在数组切片说明符中省略一个或两个边界，例如 <code>array_col[3:]</code>（Yury Zhuravlev）</p>\n<p>省略的边界被当作相应数组下标的上限或下限。这使许多常见用例的指定更简单。</p>", "text": "允许在数组切片说明符中省略一个或两个边界，例如 array_col[3:]（Yury Zhuravlev） 省略的边界被当作相应数组下标的上限或下限。这使许多常见用例的指定更简单。", "title": "允许在数组切片说明符中省略一个或两个边界，例如 array_col[3:]", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "0a71787a54227532766c3e83a9558204cefc8da9b92ad9f216940ac8161c9d47", "section_path": ["数据类型"], "commit_groups": [["6efbded6e"]], "identity_text": "Allow omitting one or both boundaries in an array slice specifier, e.g., array_col[3:] (Yury Zhuravlev) Omitted boundaries are taken as the upper or lower limit of the corresponding array subscript. This allows simpler specification for many common use-cases.", "commit_aliases": ["6efbded6e"], "source_commits": ["6efbded6e"], "source_entry_id": "9.6.0/changes/094", "db_id": "0b8e27a722acd363b79728c418456dfe", "patch_ids": ["215e30fce1c9e6f63a0b52b1023027a8"], "statement_hash": "1bd3c5bbfa837c877a6ccad54d65edf2a8d7d9a24aeaeeb3717c2c77520cfe22", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-88af786226e6b9f1", "cves": [], "html": "<p>更谨慎地处理超出范围的日期和时间戳（Vitaly Burovoy）</p>\n<p>此更改防止对非常接近实现限制的 <code>timestamp with time zone</code> 值出现意外的超出范围错误。以前<span>“<span>同一</span>”</span>值可能被接受也可能不被接受，取决于 <code>timezone</code> 设置，这意味着转储和重新装载可能在一个先前被接受的值上失败。现在限制根据等价的 <acronym>UTC</acronym> 时间而非本地时间执行，因此与 <code>timezone</code> 无关。</p>\n<p>此外，<span>PostgreSQL</span> 现在更谨慎地检测计算新日期或时间戳值的操作（如 <code>date</code> <code>+</code> <code>integer</code>）中的溢出。</p>", "text": "更谨慎地处理超出范围的日期和时间戳（Vitaly Burovoy） 此更改防止对非常接近实现限制的 timestamp with time zone 值出现意外的超出范围错误。以前“同一”值可能被接受也可能不被接受，取决于 timezone 设置，这意味着转储和重新装载可能在一个先前被接受的值上失败。现在限制根据等价的 UTC 时间而非本地时间执行，因此与 timezone 无关。 此外，PostgreSQL 现在更谨慎地检测计算新日期或时间戳值的操作（如 date + integer）中的溢出。", "title": "更谨慎地处理超出范围的日期和时间戳", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "c3d0ae60042cf7dfec487bb92ecaef3715f81a8e860ef48498e1076a37fa652e", "section_path": ["数据类型"], "commit_groups": [["a70e13a39"]], "identity_text": "Be more careful about out-of-range dates and timestamps (Vitaly Burovoy) This change prevents unexpected out-of-range errors for timestamp with time zone values very close to the implementation limits. Previously, the same value might be accepted or not depending on the timezone setting, meaning that a dump and reload could fail on a value that had been accepted when presented. Now the limits are enforced according to the equivalent UTC time, not local time, so as to be independent of timezone. Also, PostgreSQL is now more careful to detect overflow in operations that compute new date or timestamp values, such as date + integer.", "commit_aliases": ["a70e13a39"], "source_commits": ["a70e13a39"], "source_entry_id": "9.6.0/changes/095", "db_id": "3d6fd19f90871a2b41faebc5bc817361", "patch_ids": ["59fce886b1b727380ff69cc39e2483da"], "statement_hash": "93df7d7d031f0bfbaeda72f03706101a39dc5fee3b2dbd464f839d3b895d489c", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-21196e320a851d9b", "cves": [], "html": "<p>对几何数据类型，确保 <code>infinity</code> 和 <code>NaN</code> 分量值在输入和输出期间被一致处理（Tom Lane）</p>\n<p>这种值现在总是与它们在简单 <code>float8</code> 列中打印的方式相同地打印，输入时以相同方式接受。以前行为与平台相关。</p>", "text": "对几何数据类型，确保 infinity 和 NaN 分量值在输入和输出期间被一致处理（Tom Lane） 这种值现在总是与它们在简单 float8 列中打印的方式相同地打印，输入时以相同方式接受。以前行为与平台相关。", "title": "对几何数据类型，确保 infinity 和 NaN 分量值在输入和输出期间被一致处理", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "f7a5aa274e3664f74d299eaa068603a79d18b2adc630d2ea992a9eeab26472f2", "section_path": ["数据类型"], "commit_groups": [["50861cd68"]], "identity_text": "For geometric data types, make sure infinity and NaN component values are treated consistently during input and output (Tom Lane) Such values will now always print the same as they would in a simple float8 column, and be accepted the same way on input. Previously the behavior was platform-dependent.", "commit_aliases": ["50861cd68"], "source_commits": ["50861cd68"], "source_entry_id": "9.6.0/changes/096", "db_id": "9137e26a3eab7dab0ddc33c4e66f694b", "patch_ids": ["6eee05444e8c70bbab815e3a93a91d0f"], "statement_hash": "cc422c8f7669664b0601b1257d0f5b7ba317289ea83008cec49938d18a7a3c1a", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-10f6f99a0cfe0d18", "cves": [], "html": "<p>升级 <a href=\"/docs/9.6/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY\" title=\"12.6.5. Ispell 词典\"><code>ispell</code></a> 词典类型以处理现代 <span>Hunspell</span> 文件并支持更多语言（Artur Zakirov）</p>", "text": "升级 ispell 词典类型以处理现代 Hunspell 文件并支持更多语言（Artur Zakirov）", "title": "升级 ispell 词典类型以处理现代 Hunspell 文件并支持更多语言", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "d71e5cedc8f1628e57191755cc79dd6cf61cf5a56ac83926563a392f559ac376", "section_path": ["数据类型"], "commit_groups": [["8829af47e"], ["d78a7d9c7"], ["f4ceed6ce"]], "identity_text": "Upgrade the ispell dictionary type to handle modern Hunspell files and support more languages (Artur Zakirov)", "commit_aliases": ["8829af47e", "d78a7d9c7", "f4ceed6ce"], "source_commits": ["8829af47e", "d78a7d9c7", "f4ceed6ce"], "source_entry_id": "9.6.0/changes/097", "db_id": "4a4644fba0d2d48134f2d204800b6473", "patch_ids": ["3a159b551b25a06434826a110ebc1fa9", "8ceb9a10faf39c0bc7bf99a39ba8eacd", "ce0ee63d93f8dec0944c0256a97bb3a9"], "statement_hash": "a37ec08099e18c82b07df993defc06832c16393584b75e511d3bb4f87240fbae", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-982159a84d6151df", "cves": [], "html": "<p>在<a href=\"/docs/9.6/functions-matching.html#FUNCTIONS-POSIX-REGEXP\" title=\"9.7.3. POSIX正则表达式\">正则表达式</a>中实现后顾约束（Tom Lane）</p>\n<p>后顾约束与前瞻约束类似，不消耗文本；但它检查在字符串当前点结束的匹配（或不存在），而不是在当前点开始的匹配。许多其他正则表达式引擎中存在类似特性。</p>", "text": "在正则表达式中实现后顾约束（Tom Lane） 后顾约束与前瞻约束类似，不消耗文本；但它检查在字符串当前点结束的匹配（或不存在），而不是在当前点开始的匹配。许多其他正则表达式引擎中存在类似特性。", "title": "在正则表达式中实现后顾约束", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "ee64a5cff725e486b6bf843d6421361c4caf10eda31692eb541a446e1804f814", "section_path": ["数据类型"], "commit_groups": [["12c9a0400"]], "identity_text": "Implement look-behind constraints in regular expressions (Tom Lane) A look-behind constraint is like a lookahead constraint in that it consumes no text; but it checks for existence (or nonexistence) of a match ending at the current point in the string, rather than one starting at the current point. Similar features exist in many other regular-expression engines.", "commit_aliases": ["12c9a0400"], "source_commits": ["12c9a0400"], "source_entry_id": "9.6.0/changes/098", "db_id": "ef9b43dc6bdd201f9c8bdd86d38968ec", "patch_ids": ["bf546dc73223139746a7615e5b2f7e62"], "statement_hash": "79e6156b6d181d19856d58ebb264d6b486bdb8ecc5604285d4bbc4698e239f3a", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3ecaead0504238c2", "cves": [], "html": "<p>在正则表达式中，如果表面上的三位八进制转义 <code>\\</code><em><code>nnn</code></em> 会超过 377（十进制 255），就假定它是两位八进制转义（Tom Lane）</p>\n<p>这使行为与当前的 <span>Tcl</span> 版本匹配。</p>", "text": "在正则表达式中，如果表面上的三位八进制转义 \\nnn 会超过 377（十进制 255），就假定它是两位八进制转义（Tom Lane） 这使行为与当前的 Tcl 版本匹配。", "title": "在正则表达式中，如果表面上的三位八进制转义 \\nnn 会超过 377（十进制 255），就假定它是两位八进制转义", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "d6a6e52d887581cca3d427b858acabbe2afaf9ebbaaa1f094479d5ab4f7159b0", "section_path": ["数据类型"], "commit_groups": [["b44d92b67"]], "identity_text": "In regular expressions, if an apparent three-digit octal escape \\nnn would exceed 377 (255 decimal), assume it is a two-digit octal escape instead (Tom Lane) This makes the behavior match current Tcl releases.", "commit_aliases": ["b44d92b67"], "source_commits": ["b44d92b67"], "source_entry_id": "9.6.0/changes/099", "db_id": "6334e86b5166dedd50b3a2facfd2769c", "patch_ids": ["ec573f116fca067ad53f3828aa0232c1"], "statement_hash": "d0f04a4771e6e4b445ea68a7b3928e5ddf5bd121b1a463113457490e054c0a65", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-b2a782625b31d0bb", "cves": [], "html": "<p>添加事务 ID 操作符 <code>xid</code> <code>&lt;&gt;</code> <code>xid</code> 和 <code>xid</code> <code>&lt;&gt;</code> <code>int4</code>，以与相应的相等操作符保持一致（Michael Paquier）</p>", "text": "添加事务 ID 操作符 xid <> xid 和 xid <> int4，以与相应的相等操作符保持一致（Michael Paquier）", "title": "添加事务 ID 操作符 xid <> xid 和 xid <> int4，以与相应的相等操作符保持一致", "commits": [], "section": "数据类型", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.8", "source_hash": "8ed64876e0895b79954c458315841c5f4737c2ad4c467ccad37792f83dfd5b89", "section_path": ["数据类型"], "commit_groups": [["c5e86ea93"]], "identity_text": "Add transaction ID operators xid <> xid and xid <> int4, for consistency with the corresponding equality operators (Michael Paquier)", "commit_aliases": ["c5e86ea93"], "source_commits": ["c5e86ea93"], "source_entry_id": "9.6.0/changes/100", "db_id": "2e489bd7297766859bfe5f477662dda0", "patch_ids": ["8b84697d539c77d24fbc70343840fb8d"], "statement_hash": "c377ac6e7b9c2d66946b5e91377bf42a75a565c2acc85c239df298e7653f79b6", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-2e96cfada5549436", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE\" title=\"表 9.45. JSON 处理函数\"><code>jsonb_insert()</code></a> 函数，用于向 <code>jsonb</code> 数组插入新元素，或向 <code>jsonb</code> 对象插入此前不存在的键（Dmitry Dolgov）</p>", "text": "添加 jsonb_insert() 函数，用于向 jsonb 数组插入新元素，或向 jsonb 对象插入此前不存在的键（Dmitry Dolgov）", "title": "添加 jsonb_insert() 函数，用于向 jsonb 数组插入新元素，或向 jsonb 对象插入此前不存在的键", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "500a514ce954925d5bc27bb24cc4e776640036cfd573cba4cc9e360ea2c9f6d2", "section_path": ["函数"], "commit_groups": [["0b62fd036"]], "identity_text": "Add jsonb_insert() function to insert a new element into a jsonb array, or a not-previously-existing key into a jsonb object (Dmitry Dolgov)", "commit_aliases": ["0b62fd036"], "source_commits": ["0b62fd036"], "source_entry_id": "9.6.0/changes/101", "db_id": "8a4dcd6d9ab0952b08a8048801ccecb7", "patch_ids": ["da885f0576618aad6569035871d7996e"], "statement_hash": "ceaf49a40ee8db7f4e5c5299f752a08cc3f11f4a74e7f1c8a5f70e09a1fb147a", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6b94f6d734d46ea5", "cves": [], "html": "<p>提高 <code>ln()</code>、<code>log()</code>、<code>exp()</code> 和 <code>pow()</code> 函数在 <code>numeric</code> 类型上的计算精度（Dean Rasheed）</p>", "text": "提高 ln()、log()、exp() 和 pow() 函数在 numeric 类型上的计算精度（Dean Rasheed）", "title": "提高 ln()、log()、exp() 和 pow() 函数在 numeric 类型上的计算精度", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "5ac8325eccc3044345a1ed6c22ccf04e403497244d6b8f3e0b467b545f28973b", "section_path": ["函数"], "commit_groups": [["18a02ad2a"], ["7d9a4737c"]], "identity_text": "Improve the accuracy of the ln(), log(), exp(), and pow() functions for type numeric (Dean Rasheed)", "commit_aliases": ["18a02ad2a", "7d9a4737c"], "source_commits": ["18a02ad2a", "7d9a4737c"], "source_entry_id": "9.6.0/changes/102", "db_id": "1e5dac4ea6bdae5ec9d412f67bc16b00", "patch_ids": ["a5d6b9999591cd4d50499e424f7b058a", "f1e604bd13318598dd854920dcc55bd5"], "statement_hash": "0e22406c99401f30104948400c3fdaa29eeed383a61823d4d619811a7e46d6eb", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-cc398ac2773abb50", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/functions-math.html#FUNCTIONS-MATH-FUNC-TABLE\" title=\"表 9.5. 数学函数\"><code>scale(numeric)</code></a> 函数以提取 <code>numeric</code> 值的显示标度（Marko Tiikkaja）</p>", "text": "添加 scale(numeric) 函数以提取 numeric 值的显示标度（Marko Tiikkaja）", "title": "添加 scale(numeric) 函数以提取 numeric 值的显示标度", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "5b85eaa3773c20ed5e97061bdaa1a0381a54960ac97c14d19fbff75383be5e35", "section_path": ["函数"], "commit_groups": [["abb173392"]], "identity_text": "Add a scale(numeric) function to extract the display scale of a numeric value (Marko Tiikkaja)", "commit_aliases": ["abb173392"], "source_commits": ["abb173392"], "source_entry_id": "9.6.0/changes/103", "db_id": "573df66e47331737213d286c60614475", "patch_ids": ["cea785939a8919a2b5da7d903707baf6"], "statement_hash": "cd16696354d1b4797ecb9e5d17bbfea5dc86becf39c1fabb64666fa3fc9e4fa7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5a196f42bca02a32", "cves": [], "html": "<p>添加以度为单位的三角函数（Dean Rasheed）</p>\n<p>例如 <a href=\"/docs/9.6/functions-math.html#FUNCTIONS-MATH-TRIG-TABLE\" title=\"表 9.7. 三角函数\"><code>sind()</code></a> 以度度量其参数，而 <code>sin()</code> 以弧度度量。这些函数竭力在可以期待精确结果的值上给出精确结果，例如 <code>sind(30) = 0.5</code>。</p>", "text": "添加以度为单位的三角函数（Dean Rasheed） 例如 sind() 以度度量其参数，而 sin() 以弧度度量。这些函数竭力在可以期待精确结果的值上给出精确结果，例如 sind(30) = 0.5。", "title": "添加以度为单位的三角函数", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "149be166194670e1011b8dd74c3b2c7ce090ab0fabfee637c075d0e5316f5025", "section_path": ["函数"], "commit_groups": [["e1bd684a3"]], "identity_text": "Add trigonometric functions that work in degrees (Dean Rasheed) For example, sind() measures its argument in degrees, whereas sin() measures in radians. These functions go to some lengths to deliver exact results for values where an exact result can be expected, for instance sind(30) = 0.5.", "commit_aliases": ["e1bd684a3"], "source_commits": ["e1bd684a3"], "source_entry_id": "9.6.0/changes/104", "db_id": "c3aea9dccd53d85f3d9f25497a7366df", "patch_ids": ["4d27f914a37ab52ed9472718f8cd6864"], "statement_hash": "16ec4f9a95b994bf7cf448879e0a6ff8ffc1e7896494eec0f31b0289f4f847b5", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-62299cd05c21824d", "cves": [], "html": "<p>确保三角函数按照 <acronym>POSIX</acronym> 标准处理 <code>infinity</code> 和 <code>NaN</code> 输入（Dean Rasheed）</p>\n<p><acronym>POSIX</acronym> 标准说这些函数对 <code>NaN</code> 输入应返回 <code>NaN</code>，对包括 <code>infinity</code> 在内的超出范围输入应抛出错误。以前我们的行为随平台而异。</p>", "text": "确保三角函数按照 POSIX 标准处理 infinity 和 NaN 输入（Dean Rasheed） POSIX 标准说这些函数对 NaN 输入应返回 NaN，对包括 infinity 在内的超出范围输入应抛出错误。以前我们的行为随平台而异。", "title": "确保三角函数按照 POSIX 标准处理 infinity 和 NaN 输入", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "7b431e23c2825468f3f9754c1f6f6d6c2e02e6c442273574bcbdc053a5b675bd", "section_path": ["函数"], "commit_groups": [["fd5200c3d"]], "identity_text": "Ensure that trigonometric functions handle infinity and NaN inputs per the POSIX standard (Dean Rasheed) The POSIX standard says that these functions should return NaN for NaN input, and should throw an error for out-of-range inputs including infinity. Previously our behavior varied across platforms.", "commit_aliases": ["fd5200c3d"], "source_commits": ["fd5200c3d"], "source_entry_id": "9.6.0/changes/105", "db_id": "b5bcce83b7bfc35cf1e15e9cb92991ee", "patch_ids": ["c256141f0fac850551d5af7fc5affe40"], "statement_hash": "b8f16ed5579f74b0559ff9f810632eaf0bb520a4ef6f68f92fa0f7f102a2e213", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5d953108ad45da8e", "cves": [], "html": "<p>使 <a href=\"/docs/9.6/functions-datetime.html#FUNCTIONS-DATETIME-TABLE\" title=\"表 9.30. 日期/时间函数\"><code>to_timestamp(float8)</code></a> 把浮点 <code>infinity</code> 转换为时间戳 <code>infinity</code>（Vitaly Burovoy）</p>\n<p>以前它对无穷输入只会失败。</p>", "text": "使 to_timestamp(float8) 把浮点 infinity 转换为时间戳 infinity（Vitaly Burovoy） 以前它对无穷输入只会失败。", "title": "使 to_timestamp(float8) 把浮点 infinity 转换为时间戳 infinity", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "e512680f836618432e4cfb4fb55ce6e53eb00ad522e9be5a2ae791e705d51763", "section_path": ["函数"], "commit_groups": [["e511d878f"]], "identity_text": "Make to_timestamp(float8) convert float infinity to timestamp infinity (Vitaly Burovoy) Formerly it just failed on an infinite input.", "commit_aliases": ["e511d878f"], "source_commits": ["e511d878f"], "source_entry_id": "9.6.0/changes/106", "db_id": "864a2e107d230ea17ea1667ceb6159cc", "patch_ids": ["8fb61b3aadd0d82159229718644a5231"], "statement_hash": "b9925191da301e722f58ab41cf3268e66d852455bbc761269ca793de57708546", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-fe7672c663a6897a", "cves": [], "html": "<p>为 <code>tsvector</code> 数据添加新函数（Stas Kelvich）</p>\n<p>新函数是 <a href=\"/docs/9.6/functions-textsearch.html#TEXTSEARCH-FUNCTIONS-TABLE\" title=\"表 9.40. 文本搜索函数\"><code>ts_delete()</code></a>、<code>ts_filter()</code>、<code>unnest()</code>、<code>tsvector_to_array()</code>、<code>array_to_tsvector()</code>，以及只为指定词素设置权重的 <code>setweight()</code> 变体。</p>", "text": "为 tsvector 数据添加新函数（Stas Kelvich） 新函数是 ts_delete()、ts_filter()、unnest()、tsvector_to_array()、array_to_tsvector()，以及只为指定词素设置权重的 setweight() 变体。", "title": "为 tsvector 数据添加新函数", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "305fa4e91cca6e9c555bc6c07e9dc6402148da70957555bd59b4578c6bf77308", "section_path": ["函数"], "commit_groups": [["0b9a23443"], ["6943a946c"]], "identity_text": "Add new functions for tsvector data (Stas Kelvich) The new functions are ts_delete(), ts_filter(), unnest(), tsvector_to_array(), array_to_tsvector(), and a variant of setweight() that sets the weight only for specified lexeme(s).", "commit_aliases": ["0b9a23443", "6943a946c"], "source_commits": ["0b9a23443", "6943a946c"], "source_entry_id": "9.6.0/changes/107", "db_id": "2fcc96ad1e4c3e775265fcada95adb3a", "patch_ids": ["787f0c10a5220ba6f214b6e63163c8f6", "99275814a7ea1f6182c81b5d7bb4db38"], "statement_hash": "17deae91effe11468d80a389e8777f7b1a69ea025464b04bcf8ce129ebad0f55", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-88c60ee85c512b04", "cves": [], "html": "<p>允许 <a href=\"/docs/9.6/textsearch-features.html#TEXTSEARCH-STATISTICS\" title=\"12.4.4. 收集文档统计数据\"><code>ts_stat()</code></a> 和 <a href=\"/docs/9.6/textsearch-features.html#TEXTSEARCH-UPDATE-TRIGGERS\" title=\"12.4.3. 用于自动更新的触发器\"><code>tsvector_update_trigger()</code></a> 对与预期参数类型二进制兼容的类型（而不只是恰好该类型）的值进行操作；例如在期望 <code>text</code> 之处允许 <code>citext</code>（Teodor Sigaev）</p>", "text": "允许 ts_stat() 和 tsvector_update_trigger() 对与预期参数类型二进制兼容的类型（而不只是恰好该类型）的值进行操作；例如在期望 text 之处允许 citext（Teodor Sigaev）", "title": "允许 ts_stat() 和 tsvector_update_trigger() 对与预期参数类型二进制兼容的类型（而不只是恰好该类型）的值进行操作；例如在期望 text 之处允许 citext", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "ea980e5ce4ec91394a544c9f1e2709a5e7e94f3847260c171bc13c9a3edf0313", "section_path": ["函数"], "commit_groups": [["9acb9007d"]], "identity_text": "Allow ts_stat() and tsvector_update_trigger() to operate on values that are of types binary-compatible with the expected argument type, not just exactly that type; for example allow citext where text is expected (Teodor Sigaev)", "commit_aliases": ["9acb9007d"], "source_commits": ["9acb9007d"], "source_entry_id": "9.6.0/changes/108", "db_id": "7f4cfb21cc2619e73b83e249d19a91cd", "patch_ids": ["a234aa050f359d0053e0e85f0a3bf100"], "statement_hash": "ca4f8ea493ae843a96b6ec535fbfc6401a885b12836c21709995f58cf2aab8c1", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-20d25c076b4d55f3", "cves": [], "html": "<p>添加可变参数函数 <a href=\"/docs/9.6/functions-comparison.html#FUNCTIONS-COMPARISON-FUNC-TABLE\" title=\"表 9.3. 比较函数\"><code>num_nulls()</code></a> 和 <code>num_nonnulls()</code>，统计其参数中空或非空的数量（Marko Tiikkaja）</p>\n<p>一个用法示例是 <code>CHECK(num_nonnulls(a,b,c) = 1)</code>，断言 a,b,c 中恰好有一个不为 <code>NULL</code>。这些函数还可用于统计数组中空或非空元素的数量。</p>", "text": "添加可变参数函数 num_nulls() 和 num_nonnulls()，统计其参数中空或非空的数量（Marko Tiikkaja） 一个用法示例是 CHECK(num_nonnulls(a,b,c) = 1)，断言 a,b,c 中恰好有一个不为 NULL。这些函数还可用于统计数组中空或非空元素的数量。", "title": "添加可变参数函数 num_nulls() 和 num_nonnulls()，统计其参数中空或非空的数量", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "b14c552b1bef8a0bd71fa2c9981c4b9bc3c5c2680b4620c621d2e78e569741f2", "section_path": ["函数"], "commit_groups": [["6819514fc"]], "identity_text": "Add variadic functions num_nulls() and num_nonnulls() that count the number of their arguments that are null or non-null (Marko Tiikkaja) An example usage is CHECK(num_nonnulls(a,b,c) = 1) which asserts that exactly one of a,b,c is not NULL. These functions can also be used to count the number of null or nonnull elements in an array.", "commit_aliases": ["6819514fc"], "source_commits": ["6819514fc"], "source_entry_id": "9.6.0/changes/109", "db_id": "ac9a5b71b18dbbd98304b62e55ef1dab", "patch_ids": ["b7c6456f353622d8330771a7700b139d"], "statement_hash": "891e666d607c25bdd6bf44662e473e0c2bfadfc9bc191e8296c28f29e0232205", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-062e16b4c273534b", "cves": [], "html": "<p>添加函数 <a href=\"/docs/9.6/functions-string.html#FUNCTIONS-STRING-OTHER\" title=\"表 9.9. 其他字符串函数\"><code>parse_ident()</code></a> 以把限定的、可能带引号的 <acronym>SQL</acronym> 标识符拆分成各部分（Pavel Stehule）</p>", "text": "添加函数 parse_ident() 以把限定的、可能带引号的 SQL 标识符拆分成各部分（Pavel Stehule）", "title": "添加函数 parse_ident() 以把限定的、可能带引号的 SQL 标识符拆分成各部分", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "973d3b98d8e55ae667f5b86f5ae5a43900ee4b2e8fa18c849192081ced5120b7", "section_path": ["函数"], "commit_groups": [["3187d6de0"]], "identity_text": "Add function parse_ident() to split a qualified, possibly quoted SQL identifier into its parts (Pavel Stehule)", "commit_aliases": ["3187d6de0"], "source_commits": ["3187d6de0"], "source_entry_id": "9.6.0/changes/110", "db_id": "87ac28170e677ac268b657bdf7c484a0", "patch_ids": ["a24deb8035bcc6cf70465bd196d8f094"], "statement_hash": "568714e3f0226122e7cc0a7bab0891e7abb1bf4cb9da963b52e98e1912a2fd60", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-3317014fb5243da7", "cves": [], "html": "<p>在 <a href=\"/docs/9.6/functions-formatting.html#FUNCTIONS-FORMATTING-TABLE\" title=\"表 9.23. 格式化函数\"><code>to_number()</code></a> 中，把 <code>V</code> 格式代码解释为除以 10 的 <code>V</code> 后数字次数幂（Bruce Momjian）</p>\n<p>这使它以与 <code>to_char()</code> 相逆的方式操作。</p>", "text": "在 to_number() 中，把 V 格式代码解释为除以 10 的 V 后数字次数幂（Bruce Momjian） 这使它以与 to_char() 相逆的方式操作。", "title": "在 to_number() 中，把 V 格式代码解释为除以 10 的 V 后数字次数幂", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "25170dc6aa0e8fc2a7bc6bd95017feb2e8d01cbcdfd487e950b941f1ac975c94", "section_path": ["函数"], "commit_groups": [["28b3a3d41"]], "identity_text": "In to_number(), interpret a V format code as dividing by 10 to the power of the number of digits following V (Bruce Momjian) This makes it operate in an inverse fashion to to_char().", "commit_aliases": ["28b3a3d41"], "source_commits": ["28b3a3d41"], "source_entry_id": "9.6.0/changes/111", "db_id": "7ee8253aace196ff399cc2c1fa6b6835", "patch_ids": ["a47c4de8a966f0601ce12b1b3cd10ca0"], "statement_hash": "2cb5cce68ffe7d3b4ca929abb85a9f047aa74671936712e014f00732b84b1a1d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-438a2f9d56e47b2e", "cves": [], "html": "<p>使 <a href=\"/docs/9.6/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE\" title=\"表 9.62. 系统目录信息函数\"><code>to_reg*()</code></a> 函数接受 <code>text</code> 类型而非 <code>cstring</code>（Petr Korobeinikov）</p>\n<p>这避免了在参数不是简单字面常量的大多数情况下编写显式强制转换的需要。</p>", "text": "使 to_reg*() 函数接受 text 类型而非 cstring（Petr Korobeinikov） 这避免了在参数不是简单字面常量的大多数情况下编写显式强制转换的需要。", "title": "使 to_reg*() 函数接受 text 类型而非 cstring", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "7d180c4764c530b0a356da4f91dd8acd124dc449ce4ca7b78afa5ce34afae321", "section_path": ["函数"], "commit_groups": [["ea0d494da"]], "identity_text": "Make the to_reg*() functions accept type text not cstring (Petr Korobeinikov) This avoids the need to write an explicit cast in most cases where the argument is not a simple literal constant.", "commit_aliases": ["ea0d494da"], "source_commits": ["ea0d494da"], "source_entry_id": "9.6.0/changes/112", "db_id": "171a8320322c2078e211fcbf7f6baa33", "patch_ids": ["cc95636ee646ef3991310764dd61cc24"], "statement_hash": "7a6486065a8a220f2f833d273264b82a661e1541831bf908e97859eb709ef545", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6b0eafe00cddbc7e", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE\" title=\"表 9.83. 数据库对象尺寸函数\"><code>pg_size_bytes()</code></a> 函数以把人类可读的大小字符串转换为数字（Pavel Stehule、Vitaly Burovoy、Dean Rasheed）</p>\n<p>此函数把 <code>pg_size_pretty()</code> 产生的字符串转换为字节。一个用法示例是 <code>SELECT oid::regclass FROM pg_class WHERE pg_total_relation_size(oid) &gt; pg_size_bytes('10 GB')</code>。</p>", "text": "添加 pg_size_bytes() 函数以把人类可读的大小字符串转换为数字（Pavel Stehule、Vitaly Burovoy、Dean Rasheed） 此函数把 pg_size_pretty() 产生的字符串转换为字节。一个用法示例是 SELECT oid::regclass FROM pg_class WHERE pg_total_relation_size(oid) > pg_size_bytes('10 GB')。", "title": "添加 pg_size_bytes() 函数以把人类可读的大小字符串转换为数字", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "8a9dd1920109f60f0fabbbf89a67cd2d55c403dfd6e7005bf2f2b4fe544a19b8", "section_path": ["函数"], "commit_groups": [["53874c522"]], "identity_text": "Add pg_size_bytes() function to convert human-readable size strings to numbers (Pavel Stehule, Vitaly Burovoy, Dean Rasheed) This function converts strings like those produced by pg_size_pretty() into bytes. An example usage is SELECT oid::regclass FROM pg_class WHERE pg_total_relation_size(oid) > pg_size_bytes('10 GB').", "commit_aliases": ["53874c522"], "source_commits": ["53874c522"], "source_entry_id": "9.6.0/changes/113", "db_id": "6b4df0dbd0e5bfa56faff9b14a54d748", "patch_ids": ["2656fe995909d40937acf051f8ca2b2a"], "statement_hash": "a978e1c298c556929ba28319d6dc519b61d78c3732d71f89aeb367fc6436d147", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-bdf39f437ab9dc30", "cves": [], "html": "<p>在 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE\" title=\"表 9.83. 数据库对象尺寸函数\"><code>pg_size_pretty()</code></a> 中，负数的格式化与正数相似（Adrian Vondendriesch）</p>\n<p>以前负数从不缩写，只是以字节打印。</p>", "text": "在 pg_size_pretty() 中，负数的格式化与正数相似（Adrian Vondendriesch） 以前负数从不缩写，只是以字节打印。", "title": "在 pg_size_pretty() 中，负数的格式化与正数相似", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "76a60cbf1385761fc47a398ac2598ea42ca4eeeee825c5d2f4ab190856318d2b", "section_path": ["函数"], "commit_groups": [["8a1fab36a"]], "identity_text": "In pg_size_pretty(), format negative numbers similarly to positive ones (Adrian Vondendriesch) Previously, negative numbers were never abbreviated, just printed in bytes.", "commit_aliases": ["8a1fab36a"], "source_commits": ["8a1fab36a"], "source_entry_id": "9.6.0/changes/114", "db_id": "27fbf9292ed30e1c012c9863faf1133a", "patch_ids": ["47a2cadb68c5b563fe1843460440caff"], "statement_hash": "b797698241e51e62bb6cf8bd1f343779be6e03f2ef67c52bd7798fb47cb78d62", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-486b2853d424348d", "cves": [], "html": "<p>为 <a href=\"/docs/9.6/functions-admin.html#FUNCTIONS-ADMIN-SET-TABLE\" title=\"表 9.76. 配置设定函数\"><code>current_setting()</code></a> 函数添加可选的 <em><code>missing_ok</code></em> 参数（David Christensen）</p>\n<p>这允许对无法识别的参数名避免错误，改为返回 <code>NULL</code>。</p>", "text": "为 current_setting() 函数添加可选的 missing_ok 参数（David Christensen） 这允许对无法识别的参数名避免错误，改为返回 NULL。", "title": "为 current_setting() 函数添加可选的 missing_ok 参数", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "ac3221169d282388cafdec38da8126d463207e21549bd5a0b862089e6edb27d3", "section_path": ["函数"], "commit_groups": [["10fb48d66"]], "identity_text": "Add an optional missing_ok argument to the current_setting() function (David Christensen) This allows avoiding an error for an unrecognized parameter name, instead returning a NULL.", "commit_aliases": ["10fb48d66"], "source_commits": ["10fb48d66"], "source_entry_id": "9.6.0/changes/115", "db_id": "428d546f02cf43113e42f00645e67d75", "patch_ids": ["583c493cf12ecee95675e227bd13c637"], "statement_hash": "dbcf79172c3add16f89a1a9c3fece66be251be52c3dd741bae354c408dbae80e", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-fe115298f0c739c8", "cves": [], "html": "<p>更改各种目录检查函数对无效输入返回 <code>NULL</code>（Michael Paquier）</p>\n<p><a href=\"/docs/9.6/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE\" title=\"表 9.62. 系统目录信息函数\"><code>pg_get_viewdef()</code></a> 现在给定无效的视图 <code>OID</code> 时返回 <code>NULL</code>，几个类似函数对坏输入同样返回 <code>NULL</code>。以前这种情况通常导致 <span>“<span>cache lookup failed</span>”</span> 错误，这些错误本不应在面向用户的情况中出现。</p>", "text": "更改各种目录检查函数对无效输入返回 NULL（Michael Paquier） pg_get_viewdef() 现在给定无效的视图 OID 时返回 NULL，几个类似函数对坏输入同样返回 NULL。以前这种情况通常导致 “cache lookup failed” 错误，这些错误本不应在面向用户的情况中出现。", "title": "更改各种目录检查函数对无效输入返回 NULL", "commits": [], "section": "函数", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "1cec6e408b13826961cc0cfc008177ad740b4fd356666322ca6d4e59d2d4638b", "section_path": ["函数"], "commit_groups": [["3153b1a52"], ["8a8c6b538"], ["976b24fb4"]], "identity_text": "Change various catalog-inspection functions to return NULL for invalid input (Michael Paquier) pg_get_viewdef() now returns NULL if given an invalid view OID, and several similar functions likewise return NULL for bad input. Previously, such cases usually led to cache lookup failed errors, which are not meant to occur in user-facing cases.", "commit_aliases": ["3153b1a52", "8a8c6b538", "976b24fb4"], "source_commits": ["3153b1a52", "8a8c6b538", "976b24fb4"], "source_entry_id": "9.6.0/changes/116", "db_id": "b48792a3c5b1b128061cae2b4283287f", "patch_ids": ["1cccbfe875db3e881fbe92872abfc883", "b96d18c071f7d15462cfcbd245a72453", "cc96cb5e8c1c380bb8cc819d3c2c0e67"], "statement_hash": "0e9b73d122cde983fa203fcc353b1deed1b2bf0c3d12d95ed560230ac6846f28", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-00fb7011cd2126f9", "cves": [], "html": "<p>修复 <a href=\"/docs/9.6/functions-admin.html#PG-REPLICATION-ORIGIN-XACT-RESET\"><code>pg_replication_origin_xact_reset()</code></a> 使之不带任何参数（Fujii Masao）</p>\n<p>文档说它没有参数，C 代码也不期望任何参数，但 <code>pg_proc</code> 中的条目错误地指定了两个参数。</p>", "text": "修复 pg_replication_origin_xact_reset() 使之不带任何参数（Fujii Masao） 文档说它没有参数，C 代码也不期望任何参数，但 pg_proc 中的条目错误地指定了两个参数。", "title": "修复 pg_replication_origin_xact_reset() 使之不带任何参数", "commits": [], "section": "函数", "category": "bugfix", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.9", "source_hash": "e885718ee4d3c82f09d95539755d925863736a83888f29bfe97e1042fd179378", "section_path": ["函数"], "commit_groups": [["dd5eb805d"]], "identity_text": "Fix pg_replication_origin_xact_reset() to not have any arguments (Fujii Masao) The documentation said that it has no arguments, and the C code did not expect any arguments, but the entry in pg_proc mistakenly specified two arguments.", "commit_aliases": ["dd5eb805d"], "source_commits": ["dd5eb805d"], "source_entry_id": "9.6.0/changes/117", "db_id": "34eb14689f04c89a930663d253018303", "patch_ids": ["b861a9c50f15419e58f690a0bd678073"], "statement_hash": "52f1540d3c4dd444bcf271c33bcbb3f86427e8a4f7c4e2b06c6a6a77efe1b0cf", "relations": [], "version": "9.6.0", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4dc6e6c794aa692e", "cves": [], "html": "<p>在 <a href=\"/docs/9.6/plpgsql.html\" title=\"第 41 章 PL/pgSQL — SQL 过程语言\">PL/pgSQL</a> 中，在编译函数时检测不匹配的 <code>CONTINUE</code> 和 <code>EXIT</code> 语句，而不是在执行时（Jim Nasby）</p>", "text": "在 PL/pgSQL 中，在编译函数时检测不匹配的 CONTINUE 和 EXIT 语句，而不是在执行时（Jim Nasby）", "title": "在 PL/pgSQL 中，在编译函数时检测不匹配的 CONTINUE 和 EXIT 语句，而不是在执行时", "commits": [], "section": "服务器端语言", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "ebe34b4193038c1faf762cf637a85756934b34d8d1ce85c991683c8c2404a881", "section_path": ["服务器端语言"], "commit_groups": [["fcdfce682"]], "identity_text": "In PL/pgSQL, detect mismatched CONTINUE and EXIT statements while compiling a function, rather than at execution time (Jim Nasby)", "commit_aliases": ["fcdfce682"], "source_commits": ["fcdfce682"], "source_entry_id": "9.6.0/changes/118", "db_id": "7393b1e1e19324b388941ffc4cb565f2", "patch_ids": ["350159cd4cd742a9cb382f6135cbcb0a"], "statement_hash": "cd96b2070feb04dd7f5e7922be0bd8f9ab71f6d16737e7bc39e9b897506bdf21", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-0693ec90370ac31d", "cves": [], "html": "<p>扩展 <span>PL/Python</span> 的错误报告和消息报告函数，允许指定主错误消息之外的其他消息字段（Pavel Stehule）</p>", "text": "扩展 PL/Python 的错误报告和消息报告函数，允许指定主错误消息之外的其他消息字段（Pavel Stehule）", "title": "扩展 PL/Python 的错误报告和消息报告函数，允许指定主错误消息之外的其他消息字段", "commits": [], "section": "服务器端语言", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "fa80f9774c7b19f0a2fa200146b28207b0d6e8afe7b955918c90c0e4fc14c53a", "section_path": ["服务器端语言"], "commit_groups": [["020140d84"], ["3a4a33ad4"], ["5c3c3cd0a"]], "identity_text": "Extend PL/Python's error-reporting and message-reporting functions to allow specifying additional message fields besides the primary error message (Pavel Stehule)", "commit_aliases": ["020140d84", "3a4a33ad4", "5c3c3cd0a"], "source_commits": ["020140d84", "3a4a33ad4", "5c3c3cd0a"], "source_entry_id": "9.6.0/changes/119", "db_id": "cbe50811444041c6cab2c79bf509af6d", "patch_ids": ["43341bbce5665f7abcc06f421b9e8a5d", "cbcf0a283e3e2eccac56dece4e5cae8c", "ce37bbd0db2e702ea4788a65587f3d49"], "statement_hash": "6d52d88d8f29219b04f3302050db6304547593a6f4d14efe109a17a150300d3b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e55fd65f4097b7c3", "cves": [], "html": "<p>允许 PL/Python 函数通过 <span>SPI</span> 递归调用自身，并修复在一个查询中调用多个返回集合的 PL/Python 函数时的行为（Alexey Grishchenko、Tom Lane）</p>", "text": "允许 PL/Python 函数通过 SPI 递归调用自身，并修复在一个查询中调用多个返回集合的 PL/Python 函数时的行为（Alexey Grishchenko、Tom Lane）", "title": "允许 PL/Python 函数通过 SPI 递归调用自身，并修复在一个查询中调用多个返回集合的 PL/Python 函数时的行为", "commits": [], "section": "服务器端语言", "category": "bugfix", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "aa880658dc42c3ccff6e775bd58770b14a67f46adb102a83748f64a43a088fca", "section_path": ["服务器端语言"], "commit_groups": [["1d2fe56e4"]], "identity_text": "Allow PL/Python functions to call themselves recursively via SPI, and fix the behavior when multiple set-returning PL/Python functions are called within one query (Alexey Grishchenko, Tom Lane)", "commit_aliases": ["1d2fe56e4"], "source_commits": ["1d2fe56e4"], "source_entry_id": "9.6.0/changes/120", "db_id": "0b6586eab56320a01271b57f37aef1c8", "patch_ids": ["a3607b1a9d7bdd261c43ac827ab5aaa0"], "statement_hash": "3e4f7f3fcc9482c659ba29f4925fc664fa2ddccc08423113fc73cfacb8f6714e", "relations": [], "version": "9.6.0", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-b2e772ce54b791f3", "cves": [], "html": "<p>修复 PL/Python 中的会话生命周期内存泄漏（Heikki Linnakangas、Haribabu Kommi、Tom Lane）</p>", "text": "修复 PL/Python 中的会话生命周期内存泄漏（Heikki Linnakangas、Haribabu Kommi、Tom Lane）", "title": "修复 PL/Python 中的会话生命周期内存泄漏", "commits": [], "section": "服务器端语言", "category": "bugfix", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "40ae17a24fa2554b58e8f1f826f59074cc23e6c38711b3ec90e9bcbef033a71d", "section_path": ["服务器端语言"], "commit_groups": [["8c75ad436"]], "identity_text": "Fix session-lifespan memory leaks in PL/Python (Heikki Linnakangas, Haribabu Kommi, Tom Lane)", "commit_aliases": ["8c75ad436"], "source_commits": ["8c75ad436"], "source_entry_id": "9.6.0/changes/121", "db_id": "31df09355aaf03bfdba14a7539f64439", "patch_ids": ["941da1a73dc2af7424fb42aab880d094"], "statement_hash": "6afe387188602f261761163ffb3a215639736d3b0c5e75103c0e79007ec0c11e", "relations": [], "version": "9.6.0", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-70b49df0f75e7432", "cves": [], "html": "<p>使 <span>PL/Tcl</span> 现代化，使用 Tcl 的<span>“<span>对象</span>”</span> <acronym>API</acronym> 而非简单字符串（Jim Nasby、Karl Lehenbauer）</p>\n<p>这在某些情况下可以显著改进性能。注意 <span>PL/Tcl</span> 现在要求 Tcl 8.4 或更新版本。</p>", "text": "使 PL/Tcl 现代化，使用 Tcl 的“对象” API 而非简单字符串（Jim Nasby、Karl Lehenbauer） 这在某些情况下可以显著改进性能。注意 PL/Tcl 现在要求 Tcl 8.4 或更新版本。", "title": "使 PL/Tcl 现代化，使用 Tcl 的“对象” API 而非简单字符串", "commits": [], "section": "服务器端语言", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "462fe8a15295ca7dfe6b814505b15fa68c07696b60755977e0dcaf24faef831f", "section_path": ["服务器端语言"], "commit_groups": [["287822068"], ["e2609323e"]], "identity_text": "Modernize PL/Tcl to use Tcl's object APIs instead of simple strings (Jim Nasby, Karl Lehenbauer) This can improve performance substantially in some cases. Note that PL/Tcl now requires Tcl 8.4 or later.", "commit_aliases": ["287822068", "e2609323e"], "source_commits": ["287822068", "e2609323e"], "source_entry_id": "9.6.0/changes/122", "db_id": "292cf4dc73540711dcc7ed5372fc0462", "patch_ids": ["357fd7e56019965cd3c9072da871077c", "67cb8cf88b2051dfde2e594ca9044380"], "statement_hash": "184a4d2708cc622bebfacd4d995472f19aca15a05767d3f4e11557104fb31eb9", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-35cf6158f69aa8cf", "cves": [], "html": "<p>在 <span>PL/Tcl</span> 中，使数据库报告的错误在 Tcl 的 <code>errorCode</code> 全局变量中返回附加信息（Jim Nasby、Tom Lane）</p>\n<p>此特性遵循 Tcl 返回错误辅助数据的惯例。</p>", "text": "在 PL/Tcl 中，使数据库报告的错误在 Tcl 的 errorCode 全局变量中返回附加信息（Jim Nasby、Tom Lane） 此特性遵循 Tcl 返回错误辅助数据的惯例。", "title": "在 PL/Tcl 中，使数据库报告的错误在 Tcl 的 errorCode 全局变量中返回附加信息", "commits": [], "section": "服务器端语言", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "368daaad22e47037960d18a1a7872f28f6c5cbe360034fe940afe67a988206cd", "section_path": ["服务器端语言"], "commit_groups": [["cd37bb785"], ["fb8d2a7f5"]], "identity_text": "In PL/Tcl, make database-reported errors return additional information in Tcl's errorCode global variable (Jim Nasby, Tom Lane) This feature follows the Tcl convention for returning auxiliary data about an error.", "commit_aliases": ["cd37bb785", "fb8d2a7f5"], "source_commits": ["cd37bb785", "fb8d2a7f5"], "source_entry_id": "9.6.0/changes/123", "db_id": "d712afe9f172186d3b83a0c85c865f28", "patch_ids": ["ab6f52c2324d4a6e7044a3abca960cdf", "c9378db52b681bf8ce4a594b8b46ca61"], "statement_hash": "ee8af43f516953c8bf5ee57faf66eb978330ada5a5aa2c0b5591b9d832251fcf", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-88acc8ebd176c87d", "cves": [], "html": "<p>修复 <span>PL/Tcl</span> 在数据库编码和 <code>UTF-8</code>（Tcl 所期望的）之间执行编码转换（Tom Lane）</p>\n<p>以前字符串不经转换直接传递，当数据库编码不是 <code>UTF-8</code> 时导致非 <code>ASCII</code> 字符的错误行为。</p>", "text": "修复 PL/Tcl 在数据库编码和 UTF-8（Tcl 所期望的）之间执行编码转换（Tom Lane） 以前字符串不经转换直接传递，当数据库编码不是 UTF-8 时导致非 ASCII 字符的错误行为。", "title": "修复 PL/Tcl 在数据库编码和 UTF-8（Tcl 所期望的）之间执行编码转换", "commits": [], "section": "服务器端语言", "category": "bugfix", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.10", "source_hash": "02453e2434f24cd5dd783974e2a6705f41b5a3857952154a34409843125a8a5c", "section_path": ["服务器端语言"], "commit_groups": [["c8c7c93de"]], "identity_text": "Fix PL/Tcl to perform encoding conversion between the database encoding and UTF-8, which is what Tcl expects (Tom Lane) Previously, strings were passed through without conversion, leading to misbehavior with non-ASCII characters when the database encoding was not UTF-8.", "commit_aliases": ["c8c7c93de"], "source_commits": ["c8c7c93de"], "source_entry_id": "9.6.0/changes/124", "db_id": "d226887349d1542c336c0ff7dfab0ebb", "patch_ids": ["51e363035a7cb17586ca769a01e9fefc"], "statement_hash": "4e469b8a5b86aba1839067f125c60a3f87106b9b74a1a4d2269698aaafee658a", "relations": [], "version": "9.6.0", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-ecace0234f348cc1", "cves": [], "html": "<p>在错误和通知消息中添加 <a href=\"/docs/9.6/protocol-error-fields.html\" title=\"51.6. 错误和通知消息字段\">severity 字段</a>的未本地化版本（Tom Lane）</p>\n<p>此更改允许客户端代码确定错误或通知的严重性，而不必担心 severity 字符串的本地化变体。</p>", "text": "在错误和通知消息中添加 severity 字段的未本地化版本（Tom Lane） 此更改允许客户端代码确定错误或通知的严重性，而不必担心 severity 字符串的本地化变体。", "title": "在错误和通知消息中添加 severity 字段的未本地化版本", "commits": [], "section": "客户端接口", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11", "source_hash": "d79205486a780f9af2372297a215892e94f0f9afeb462d2390c0d6d7fbd63065", "section_path": ["客户端接口"], "commit_groups": [["e796d0aba"]], "identity_text": "Add a nonlocalized version of the severity field in error and notice messages (Tom Lane) This change allows client code to determine severity of an error or notice without having to worry about localized variants of the severity strings.", "commit_aliases": ["e796d0aba"], "source_commits": ["e796d0aba"], "source_entry_id": "9.6.0/changes/125", "db_id": "a3a3e3bdf488a7e31453939e8824a996", "patch_ids": ["a9d52d6995619b0913f8ff02989e8071"], "statement_hash": "494c7a5af0d15cf55c6693bb685be1b5358a09ab34c431ec05ea220338bcd3e2", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e2a86ce963549df5", "cves": [], "html": "<p>在 <span>libpq</span> 中引入一项特性，可以始终或只对非错误消息抑制消息的 <code>CONTEXT</code> 字段（Pavel Stehule）</p>\n<p><a href=\"/docs/9.6/libpq-status.html#LIBPQ-PQERRORMESSAGE\"><code>PQerrorMessage()</code></a> 的默认行为现在只对错误打印 <code>CONTEXT</code>。新函数 <a href=\"/docs/9.6/libpq-control.html#LIBPQ-PQSETERRORCONTEXTVISIBILITY\"><code>PQsetErrorContextVisibility()</code></a> 可用于调整这一点。</p>", "text": "在 libpq 中引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段（Pavel Stehule） PQerrorMessage() 的默认行为现在只对错误打印 CONTEXT。新函数 PQsetErrorContextVisibility() 可用于调整这一点。", "title": "在 libpq 中引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段", "commits": [], "section": "客户端接口", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11", "source_hash": "e21b25c86a8c259b6c3b6b1f18ac2b47effef1c3c36c456a935f74a26675dcaf", "section_path": ["客户端接口"], "commit_groups": [["0426f349e"]], "identity_text": "Introduce a feature in libpq whereby the CONTEXT field of messages can be suppressed, either always or only for non-error messages (Pavel Stehule) The default behavior of PQerrorMessage() is now to print CONTEXT only for errors. The new function PQsetErrorContextVisibility() can be used to adjust this.", "commit_aliases": ["0426f349e"], "source_commits": ["0426f349e"], "source_entry_id": "9.6.0/changes/126", "db_id": "38f5670a2a48e398fc5f56296717be27", "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "statement_hash": "21851571063284dcd4eb5e47caa1862830e0479585af2896f60bc48c06369b8e", "relations": [{"rule": 2, "type": "related", "target": "170b1fefcffcedda9461e5d56803fec1", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}}, {"rule": 2, "type": "related", "target": "3ce123ea6c2d6bd34288d178655446b8", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}}], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": [{"db_id": "3ce123ea6c2d6bd34288d178655446b8", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-5dfbe1edb70fc5fe", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3"}, {"db_id": "170b1fefcffcedda9461e5d56803fec1", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "移除 PL/pgSQL 中抑制 RAISE 命令发出消息的 CONTEXT 最内层的“特性”", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-709f75cc02efb359", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4"}]}, {"id": "9.6.0-4af9085e630bc127", "cves": [], "html": "<p>在 <span>libpq</span> 中添加以不同详细级别重新生成错误消息的支持（Alex Shulgin）</p>\n<p>这通过新函数 <a href=\"/docs/9.6/libpq-exec.html#LIBPQ-PQRESULTVERBOSEERRORMESSAGE\"><code>PQresultVerboseErrorMessage()</code></a> 完成。这支持 <span>psql</span> 的新 <code>\\errverbose</code> 特性，对其他客户端也可能有用。</p>", "text": "在 libpq 中添加以不同详细级别重新生成错误消息的支持（Alex Shulgin） 这通过新函数 PQresultVerboseErrorMessage() 完成。这支持 psql 的新 \\errverbose 特性，对其他客户端也可能有用。", "title": "在 libpq 中添加以不同详细级别重新生成错误消息的支持", "commits": [], "section": "客户端接口", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11", "source_hash": "48efdc386c7a390ddfb7aca6327d4fa8f661dcb759aa9fc94611716e63dd882a", "section_path": ["客户端接口"], "commit_groups": [["e3161b231"]], "identity_text": "Add support in libpq for regenerating an error message with a different verbosity level (Alex Shulgin) This is done with the new function PQresultVerboseErrorMessage(). This supports psql's new \\errverbose feature, and may be useful for other clients as well.", "commit_aliases": ["e3161b231"], "source_commits": ["e3161b231"], "source_entry_id": "9.6.0/changes/127", "db_id": "ad94c6683ee6a1faf7cb154d3ff6711b", "patch_ids": ["8f4a9d1fda9ed1bf0a52df7f8977651f"], "statement_hash": "305ae249329a2cdaa83974d6df698d8e4d6cb8bd09df82f5f6d9f802e6a4847b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-dcaacbe7d2a7bd92", "cves": [], "html": "<p>改进 <span>libpq</span> 的 <a href=\"/docs/9.6/libpq-status.html#LIBPQ-PQHOST\"><code>PQhost()</code></a> 函数，为默认 Unix 套接字连接返回有用数据（Tom Lane）</p>\n<p>以前如果没有给出显式主机说明它会返回 <code>NULL</code>；现在返回默认套接字目录路径。</p>", "text": "改进 libpq 的 PQhost() 函数，为默认 Unix 套接字连接返回有用数据（Tom Lane） 以前如果没有给出显式主机说明它会返回 NULL；现在返回默认套接字目录路径。", "title": "改进 libpq 的 PQhost() 函数，为默认 Unix 套接字连接返回有用数据", "commits": [], "section": "客户端接口", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11", "source_hash": "883dfde45ce492aee93d177718e7ae3b1b9e157b3dd52fa0c5d3f1a445147ad5", "section_path": ["客户端接口"], "commit_groups": [["40cb21f70"]], "identity_text": "Improve libpq's PQhost() function to return useful data for default Unix-socket connections (Tom Lane) Previously it would return NULL if no explicit host specification had been given; now it returns the default socket directory path.", "commit_aliases": ["40cb21f70"], "source_commits": ["40cb21f70"], "source_entry_id": "9.6.0/changes/128", "db_id": "e62c510f496d49ef000d5aded9a2045d", "patch_ids": ["bb7708d2ae3405e46ea3740e21d1ef21"], "statement_hash": "66994ee82c693dbcffc003e648957e3a75bf096e105155db6658239fd413206c", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5c60674c2108ce7d", "cves": [], "html": "<p>修复 <span>ecpg</span> 的词法分析器处理预处理指令行上注释中的换行（Michael Meskes）</p>", "text": "修复 ecpg 的词法分析器处理预处理指令行上注释中的换行（Michael Meskes）", "title": "修复 ecpg 的词法分析器处理预处理指令行上注释中的换行", "commits": [], "section": "客户端接口", "category": "bugfix", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11", "source_hash": "5c3ad047d3413f9780c407ca793c569ad0eb00c01e87af840aff1a35198ccb03", "section_path": ["客户端接口"], "commit_groups": [["fc1ae7d2e"]], "identity_text": "Fix ecpg's lexer to handle line breaks within comments starting on preprocessor directive lines (Michael Meskes)", "commit_aliases": ["fc1ae7d2e"], "source_commits": ["fc1ae7d2e"], "source_entry_id": "9.6.0/changes/129", "db_id": "2788096b88f0732de85b79faa631852e", "patch_ids": ["a6c0b9239e8b0e2d54603d15dca251f5"], "statement_hash": "7b281e13956fff6e007facdb464b91ad9a918a9b66987b587e3ae4c9b6ca1fbe", "relations": [], "version": "9.6.0", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5785c6dde2a8a489", "cves": [], "html": "<p>为<a href=\"/docs/9.6/app-pgdump.html\" title=\"pg_dump\"><span>pg_dump</span></a>和<a href=\"/docs/9.6/app-pgrestore.html\" title=\"pg_restore\"><span>pg_restore</span></a>添加 <code>--strict-names</code> 选项（Pavel Stehule）</p>\n<p>此选项使程序在 <code>-t</code> 或 <code>-n</code> 选项没有匹配时报怨，而不是静默地不做任何事。</p>", "text": "为pg_dump和pg_restore添加 --strict-names 选项（Pavel Stehule） 此选项使程序在 -t 或 -n 选项没有匹配时报怨，而不是静默地不做任何事。", "title": "为pg_dump和pg_restore添加 --strict-names 选项", "commits": [], "section": "客户端应用程序", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12", "source_hash": "d4e1e15ae2e140a0eb43696360bc39eb0bd62e524dbbc5d0943dc98d494538e0", "section_path": ["客户端应用程序"], "commit_groups": [["d02426029"]], "identity_text": "Add a --strict-names option to pg_dump and pg_restore (Pavel Stehule) This option causes the program to complain if there is no match for a -t or -n option, rather than silently doing nothing.", "commit_aliases": ["d02426029"], "source_commits": ["d02426029"], "source_entry_id": "9.6.0/changes/130", "db_id": "1bf80ab0f55accc82e8a808f66857909", "patch_ids": ["58f518be859c58970ed6690609938a22"], "statement_hash": "36cfcf0d969bd9b38a5f5f7106e30123494240e124998c878ee51eee0d676a1f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-2c42028e9bedfa66", "cves": [], "html": "<p>在 <span>pg_dump</span> 中，转储对系统对象的本地权限分配更改（Stephen Frost）</p>\n<p>虽然超级user总是可以更改内建或扩展创建对象的权限分配，但这种更改以前在转储和重新装载中丢失。现在 <span>pg_dump</span> 识别并转储这种更改。（但这只在从 9.6 或更晚服务器转储时有效。）</p>", "text": "在 pg_dump 中，转储对系统对象的本地权限分配更改（Stephen Frost） 虽然超级user总是可以更改内建或扩展创建对象的权限分配，但这种更改以前在转储和重新装载中丢失。现在 pg_dump 识别并转储这种更改。（但这只在从 9.6 或更晚服务器转储时有效。）", "title": "在 pg_dump 中，转储对系统对象的本地权限分配更改", "commits": [], "section": "客户端应用程序", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12", "source_hash": "d3ed9efe38a355f2a40c1c71a70fb407a0d1a99966214529b9d9ca5996624ff3", "section_path": ["客户端应用程序"], "commit_groups": [["23f34fa4b"], ["5d589993c"], ["a9f0e8e5a"], ["d217b2c36"], ["e1b120a8c"]], "identity_text": "In pg_dump, dump locally-made changes of privilege assignments for system objects (Stephen Frost) While it has always been possible for a superuser to change the privilege assignments for built-in or extension-created objects, such changes were formerly lost in a dump and reload. Now, pg_dump recognizes and dumps such changes. (This works only when dumping from a 9.6 or later server, however.)", "commit_aliases": ["23f34fa4b", "5d589993c", "a9f0e8e5a", "d217b2c36", "e1b120a8c"], "source_commits": ["23f34fa4b", "5d589993c", "a9f0e8e5a", "d217b2c36", "e1b120a8c"], "source_entry_id": "9.6.0/changes/131", "db_id": "142ca0a40b457ad1a24e1409f08d8db7", "patch_ids": ["1a0e24e598e96ffcce8ce98651a4642c", "26f9cf7d18d482b0943ac7665a2e0ee5", "4a80b996959f79fbdf6023b9b6efc64b", "99902c0c7312000e26027171d3590a6b", "999f276322a117aeab6d1d38a3d02ffc"], "statement_hash": "b76eba8cf54112ee6a1c06e3b8714c55d0b2a2cdb456c648271357191e9af1e9", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-196da4f46b703b0e", "cves": [], "html": "<p>允许 <span>pg_dump</span> 转储扩展拥有的模式中的非扩展拥有对象（Martín Marqués）</p>\n<p>以前这种对象被忽略，因为被错误地假定属于拥有其模式的扩展。</p>", "text": "允许 pg_dump 转储扩展拥有的模式中的非扩展拥有对象（Martín Marqués） 以前这种对象被忽略，因为被错误地假定属于拥有其模式的扩展。", "title": "允许 pg_dump 转储扩展拥有的模式中的非扩展拥有对象", "commits": [], "section": "客户端应用程序", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12", "source_hash": "c2284af97cd92606c14cdcb7d4b5bb10c48e4eaced6b0c4ef91aac4fd1f18785", "section_path": ["客户端应用程序"], "commit_groups": [["31eb14504"]], "identity_text": "Allow pg_dump to dump non-extension-owned objects that are within an extension-owned schema (Martín Marqués) Previously such objects were ignored because they were mistakenly assumed to belong to the extension owning their schema.", "commit_aliases": ["31eb14504"], "source_commits": ["31eb14504"], "source_entry_id": "9.6.0/changes/132", "db_id": "64e402daa5f824d8c890f64d278a5ccb", "patch_ids": ["b056468fb15a63e1af2c10c1c8449cbd"], "statement_hash": "4e422c8487740d2f57a1e287fe45f88935b493d43a83c645e797768f3ee2445f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-08f9fc4f44d94379", "cves": [], "html": "<p>在 <span>pg_dump</span> 输出中，对只在每表内唯一命名的对象类型（例如触发器）的对象标记中包含表名（Peter Eisentraut）</p>", "text": "在 pg_dump 输出中，对只在每表内唯一命名的对象类型（例如触发器）的对象标记中包含表名（Peter Eisentraut）", "title": "在 pg_dump 输出中，对只在每表内唯一命名的对象类型（例如触发器）的对象标记中包含表名", "commits": [], "section": "客户端应用程序", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12", "source_hash": "1f8747a211e644794b8d1c8608152a7afca52a86f6b829d62f219c524affffb7", "section_path": ["客户端应用程序"], "commit_groups": [["3b3fcc4ee"]], "identity_text": "In pg_dump output, include the table name in object tags for object types that are only uniquely named per-table (for example, triggers) (Peter Eisentraut)", "commit_aliases": ["3b3fcc4ee"], "source_commits": ["3b3fcc4ee"], "source_entry_id": "9.6.0/changes/133", "db_id": "9ac1d4e547c515fdc4ecc8882afc32d5", "patch_ids": ["d0ecb13d5b312d63f7ae41e86712210d"], "statement_hash": "4952f5e0ebf88aa7babd8698d3da2c8c17d524f0fd24f70f85d56c7659cc726f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-0f237b1a49997674", "cves": [], "html": "<p>支持多个 <code>-c</code> 和 <code>-f</code> 命令行选项（Pavel Stehule、Catalin Iacob）</p>\n<p>指定的操作按给出选项的顺序执行，然后 <span>psql</span> 终止。</p>", "text": "支持多个 -c 和 -f 命令行选项（Pavel Stehule、Catalin Iacob） 指定的操作按给出选项的顺序执行，然后 psql 终止。", "title": "支持多个 -c 和 -f 命令行选项", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "a6b87235492e0727d5ef2688852d2d29fa775112e843595d9a107b2f98bd22ed", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["d5563d7df"]], "identity_text": "Support multiple -c and -f command-line options (Pavel Stehule, Catalin Iacob) The specified operations are carried out in the order in which the options are given, and then psql terminates.", "commit_aliases": ["d5563d7df"], "source_commits": ["d5563d7df"], "source_entry_id": "9.6.0/changes/134", "db_id": "a00cd5070d8809c80e20264fef692640", "patch_ids": ["d44cc20a573665822f6c5b3fb2de7086"], "statement_hash": "43ae0499f1f2e7df22ed6d6d1204117f6a21ec435e4b53869f009d78e11c7c25", "relations": [{"rule": 2, "type": "related", "target": "fc511d32b5b42f2b7b4101c635c29f52", "evidence": {"same_day": true, "patch_ids": ["d44cc20a573665822f6c5b3fb2de7086"]}}], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": [{"db_id": "fc511d32b5b42f2b7b4101c635c29f52", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "psql 的 -c 选项不再隐含 --no-psqlrc", "evidence": {"same_day": true, "patch_ids": ["d44cc20a573665822f6c5b3fb2de7086"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-da86a4f603d24861", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4"}]}, {"id": "9.6.0-9bc6925afc3b8840", "cves": [], "html": "<p>添加以交叉表显示打印查询结果的 <code>\\crosstabview</code> 命令（Daniel Vérité）</p>\n<p>在交叉表显示中，来自一个查询结果列的数据值被放在一个网格中，其列和行标题来自其他查询结果列。</p>", "text": "添加以交叉表显示打印查询结果的 \\crosstabview 命令（Daniel Vérité） 在交叉表显示中，来自一个查询结果列的数据值被放在一个网格中，其列和行标题来自其他查询结果列。", "title": "添加以交叉表显示打印查询结果的 \\crosstabview 命令", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "581566586196ac7b2c91d05c07620e4557ec7a00d1b12cb9747ff7cb2cb36121", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["c09b18f21"]], "identity_text": "Add a \\crosstabview command that prints the results of a query in a cross-tabulated display (Daniel Vérité) In the crosstab display, data values from one query result column are placed in a grid whose column and row headers come from other query result columns.", "commit_aliases": ["c09b18f21"], "source_commits": ["c09b18f21"], "source_entry_id": "9.6.0/changes/135", "db_id": "99b44967b787fc4880b59d893f9ef1eb", "patch_ids": ["389a608e7f10beb766c810954e8247aa"], "statement_hash": "5819b47c4fe96136ccb910dcc47e206173d991771da05c3439254f9160db633a", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6d10ddda2369fc47", "cves": [], "html": "<p>添加以完整详细程度显示最后一个服务器错误的 <code>\\errverbose</code> 命令（Alex Shulgin）</p>\n<p>这在得到意外错误之后很有用——不再需要调整 <code>VERBOSITY</code> 变量并重现失败来查看默认不显示的错误字段。</p>", "text": "添加以完整详细程度显示最后一个服务器错误的 \\errverbose 命令（Alex Shulgin） 这在得到意外错误之后很有用——不再需要调整 VERBOSITY 变量并重现失败来查看默认不显示的错误字段。", "title": "添加以完整详细程度显示最后一个服务器错误的 \\errverbose 命令", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "a29d495ca8815ce832d497be3b732c92cb3befdc1cdc901dfe77586109fdb7be", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["3cc38ca7d"]], "identity_text": "Add an \\errverbose command that shows the last server error at full verbosity (Alex Shulgin) This is useful after getting an unexpected error — you no longer need to adjust the VERBOSITY variable and recreate the failure in order to see error fields that are not shown by default.", "commit_aliases": ["3cc38ca7d"], "source_commits": ["3cc38ca7d"], "source_entry_id": "9.6.0/changes/136", "db_id": "f65aea8a9f7830d41e78308e6d581d6c", "patch_ids": ["2053351b9390efd4d211c7613aa93408"], "statement_hash": "b49fa0fc4592037f44760c1d3219bc451a787cc7006c1c59013f2478f9913306", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5633ca407d553c96", "cves": [], "html": "<p>添加用于编辑和显示视图定义的 <code>\\ev</code> 和 <code>\\sv</code> 命令（Petr Korobeinikov）</p>\n<p>它们与现有的用于函数的 <code>\\ef</code> 和 <code>\\sf</code> 命令平行。</p>", "text": "添加用于编辑和显示视图定义的 \\ev 和 \\sv 命令（Petr Korobeinikov） 它们与现有的用于函数的 \\ef 和 \\sf 命令平行。", "title": "添加用于编辑和显示视图定义的 \\ev 和 \\sv 命令", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "b630a27c5e251225fd0dfa70b352147c6211f126b1ca3a359dcb5a636b9d78de", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["8eb6407aa"], ["9b66aa006"]], "identity_text": "Add \\ev and \\sv commands for editing and showing view definitions (Petr Korobeinikov) These are parallel to the existing \\ef and \\sf commands for functions.", "commit_aliases": ["8eb6407aa", "9b66aa006"], "source_commits": ["8eb6407aa", "9b66aa006"], "source_entry_id": "9.6.0/changes/137", "db_id": "83abb57c3a2f2468865b62d467be1f8a", "patch_ids": ["3868372185aa6c6aeab2923ea526fa24", "b7ae541d5d06e269b99ef2bddb43e6c9"], "statement_hash": "f03c2b2de51428c3fffc5de3f3fbce33e40afe490c3b000e1400a67094320e84", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-ff339cfc12aa29de", "cves": [], "html": "<p>添加执行查询并把结果重新作为新查询提交的 <code>\\gexec</code> 命令（Corey Huinker）</p>", "text": "添加执行查询并把结果重新作为新查询提交的 \\gexec 命令（Corey Huinker）", "title": "添加执行查询并把结果重新作为新查询提交的 \\gexec 命令", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "e0019830489fc28e7a05b8728e5e5cffadf1b7ac5f219fef709826f14c9b4eff", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["2bbe9112a"]], "identity_text": "Add a \\gexec command that executes a query and re-submits the result(s) as new queries (Corey Huinker)", "commit_aliases": ["2bbe9112a"], "source_commits": ["2bbe9112a"], "source_entry_id": "9.6.0/changes/138", "db_id": "13b38e8c361fd3dff4289c090270f559", "patch_ids": ["2f8405206c072d309dbc3aeb0c323ac3"], "statement_hash": "1ab6c2ef37b9fe414f1fdb7558ef23a78d9357493b47c3affd42354161f275a8", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-caca60830a5e7523", "cves": [], "html": "<p>允许 <code>\\pset C <em><code>string</code></em></code> 设置表标题，与 <code>\\C <em><code>string</code></em></code> 一致（Bruce Momjian）</p>", "text": "允许 \\pset C string 设置表标题，与 \\C string 一致（Bruce Momjian）", "title": "允许 \\pset C string 设置表标题，与 \\C string 一致", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "5cba1f213b9641fc6a8051ddd363396abd8f2c09b232a228a32799e9bd5e6e77", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["2145a7660"]], "identity_text": "Allow \\pset C string to set the table title, for consistency with \\C string (Bruce Momjian)", "commit_aliases": ["2145a7660"], "source_commits": ["2145a7660"], "source_entry_id": "9.6.0/changes/139", "db_id": "5b2c59e3ef783348321ee863b66ddcbd", "patch_ids": ["4eae0019bd4ae26b427194a17a6194d2"], "statement_hash": "60e5888afc7542df3dd9924725a2f7648a5dd9df54e46c46d08e1331d94e7328", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-b27c042c3a36bf5e", "cves": [], "html": "<p>在 <code>\\pset expanded auto</code> 模式下，对只有一列的查询结果不使用扩展格式（Andreas Karlsson、Robert Haas）</p>", "text": "在 \\pset expanded auto 模式下，对只有一列的查询结果不使用扩展格式（Andreas Karlsson、Robert Haas）", "title": "在 \\pset expanded auto 模式下，对只有一列的查询结果不使用扩展格式", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "5f6b203f8885baae7f1c4226e9b1b1dc2e8f8df3290f400347b45de09cdcad70", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["69ab7b9d6"]], "identity_text": "In \\pset expanded auto mode, do not use expanded format for query results with only one column (Andreas Karlsson, Robert Haas)", "commit_aliases": ["69ab7b9d6"], "source_commits": ["69ab7b9d6"], "source_entry_id": "9.6.0/changes/140", "db_id": "8abfc6a1a2a65789fe6afdb88982ed32", "patch_ids": ["14677e6ecf21ee4992f7f1efe5882ce2"], "statement_hash": "7c29b329b393c90630e6b1c3cebc52ad0e561f64cf3ecd3c5984f745d4a25a9b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a28f11bca9d463ce", "cves": [], "html": "<p>改进 <code>\\watch</code> 命令输出的头（Michael Paquier、Tom Lane）</p>\n<p>包括 <code>\\pset title</code> 字符串（如果已设置），并把头部预制部分缩短为 <code><em><code>timestamp</code></em> (every <em><code>N</code></em>s)</code>。此外时间戳格式现在遵循 <span>psql</span> 的区域环境。</p>", "text": "改进 \\watch 命令输出的头（Michael Paquier、Tom Lane） 包括 \\pset title 字符串（如果已设置），并把头部预制部分缩短为 timestamp (every Ns)。此外时间戳格式现在遵循 psql 的区域环境。", "title": "改进 \\watch 命令输出的头", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "771c2e16f3821c8e8c8c1de4179440a3cdfa99afb853cc66dc3835705b69ce13", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["9901d8ac2"], ["dea2b5960"]], "identity_text": "Improve the headers output by the \\watch command (Michael Paquier, Tom Lane) Include the \\pset title string if one has been set, and shorten the prefabricated part of the header to be timestamp (every Ns). Also, the timestamp format now obeys psql's locale environment.", "commit_aliases": ["9901d8ac2", "dea2b5960"], "source_commits": ["9901d8ac2", "dea2b5960"], "source_entry_id": "9.6.0/changes/141", "db_id": "e12ebbbcfb1e473a752cbf58b3efec44", "patch_ids": ["e6282ba04f2ac2ae963aea42ec2b20fd", "f81ca2da842e7def570a364ed369b64a"], "statement_hash": "c50cca28d460b4559b52f4a1621a66a72dbc928747eaac1a423299f0f99e3885", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e951e1068217b23d", "cves": [], "html": "<p>改进 Tab 补全逻辑以考虑整个输入查询，而不只是当前行（Tom Lane）</p>\n<p>以前把命令拆成多行会击败任何需要看到前几行单词的 Tab 补全规则。</p>", "text": "改进 Tab 补全逻辑以考虑整个输入查询，而不只是当前行（Tom Lane） 以前把命令拆成多行会击败任何需要看到前几行单词的 Tab 补全规则。", "title": "改进 Tab 补全逻辑以考虑整个输入查询，而不只是当前行", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "148e053f2ef699a83d80efdce5f10bb0d1ee6fa7f301c3ebbf9187295bf9a6ce", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["d854118c8"]], "identity_text": "Improve tab-completion logic to consider the entire input query, not only the current line (Tom Lane) Previously, breaking a command into multiple lines defeated any tab completion rules that needed to see words on earlier lines.", "commit_aliases": ["d854118c8"], "source_commits": ["d854118c8"], "source_entry_id": "9.6.0/changes/142", "db_id": "85b9e3fd91229fb81ed1483d090cb620", "patch_ids": ["81ebdaa825ab83fe4b44f0a1a82f0247"], "statement_hash": "23130b5f4b29dc8b3ee9ba3518eb06e80cf7a10ebfd5f37bbe4948d181c3d710", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-9a3b6f33f6a8f3ad", "cves": [], "html": "<p>Tab 补全行为的大量小改进（Peter Eisentraut、Vik Fearing、Kevin Grittner、Kyotaro Horiguchi、Jeff Janes、Andreas Karlsson、Fujii Masao、Thomas Munro、Masahiko Sawada、Pavel Stehule）</p>", "text": "Tab 补全行为的大量小改进（Peter Eisentraut、Vik Fearing、Kevin Grittner、Kyotaro Horiguchi、Jeff Janes、Andreas Karlsson、Fujii Masao、Thomas Munro、Masahiko Sawada、Pavel Stehule）", "title": "Tab 补全行为的大量小改进", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "4b41641bfdc9fef3b5ed1c5a325610d839282f0099ef218895e3ae80804492cd", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["158e3bc8e"], ["2f8880704"], ["3ae16798f"], ["4189e3d65"], ["6ae4c8de0"], ["7c0b49cd0"], ["8014c44e8"], ["879d71393"], ["89611c4df"], ["b1bfb28b5"], ["bc56d5898"], ["bf4817e4f"], ["d0f2f53cd"]], "identity_text": "Numerous minor improvements in tab-completion behavior (Peter Eisentraut, Vik Fearing, Kevin Grittner, Kyotaro Horiguchi, Jeff Janes, Andreas Karlsson, Fujii Masao, Thomas Munro, Masahiko Sawada, Pavel Stehule)", "commit_aliases": ["158e3bc8e", "2f8880704", "3ae16798f", "4189e3d65", "6ae4c8de0", "7c0b49cd0", "8014c44e8", "879d71393", "89611c4df", "b1bfb28b5", "bc56d5898", "bf4817e4f", "d0f2f53cd"], "source_commits": ["158e3bc8e", "2f8880704", "3ae16798f", "4189e3d65", "6ae4c8de0", "7c0b49cd0", "8014c44e8", "879d71393", "89611c4df", "b1bfb28b5", "bc56d5898", "bf4817e4f", "d0f2f53cd"], "source_entry_id": "9.6.0/changes/143", "db_id": "890cf3f25e614891e6c297b7bed6c45c", "patch_ids": ["0b1c38e540a7e03892e9f14b1b897722", "21141fccf90e7dd21137e027f13ed5e6", "3992266ad10cd06087d9e2a49f0b618f", "507b4e10ca81725e7cf6d3b5c8f4e1c9", "5e8bee78ae141f022d6734540f85116a", "6a6f014629fcdb0d63b8d8969f19094f", "742439f7e626dd769cef05107838f1e9", "87af778d6d2b2f1ba5be49ab16753fc8", "8c61790bd82215d681e6ff3c4b517c3f", "b45cc9df873940c23dafa9841a0b770c", "d87a9468bcc63aacc58d565724e120ed", "e538efdcf5de8219d0bd42c02db56adb", "eac046aa32905bab19b9c6f4534bc8ba"], "statement_hash": "2fd1722b78d02355cd7d471916a516e48c63154412c6b52b84ad75a782356c4c", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-89c1c2f19f0876ba", "cves": [], "html": "<p>添加 <code>PROMPT</code> 选项 <code>%p</code> 以插入所连接后端的进程 ID（Julien Rouhaud）</p>", "text": "添加 PROMPT 选项 %p 以插入所连接后端的进程 ID（Julien Rouhaud）", "title": "添加 PROMPT 选项 %p 以插入所连接后端的进程 ID", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "b4b97c0a15ba79420ade01a0b4313bd91219acd9254d134bf186ed43186fe980", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["275f05c99"]], "identity_text": "Add a PROMPT option %p to insert the process ID of the connected backend (Julien Rouhaud)", "commit_aliases": ["275f05c99"], "source_commits": ["275f05c99"], "source_entry_id": "9.6.0/changes/144", "db_id": "c1c80a3e6757f4a8d607b26fc3f7cddf", "patch_ids": ["c3dfc549d612d53294a2c4b578e01d2e"], "statement_hash": "e6188876ae56b5ad043c4dcb47f755e41e6067f981e5280001566fbfc255066e", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5dfbe1edb70fc5fe", "cves": [], "html": "<p>引入一项特性，可以始终或只对非错误消息抑制消息的 <code>CONTEXT</code> 字段（Pavel Stehule）</p>\n<p>只对错误打印 <code>CONTEXT</code> 现在是默认行为。可以通过设置特殊变量 <code>SHOW_CONTEXT</code> 更改。</p>", "text": "引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段（Pavel Stehule） 只对错误打印 CONTEXT 现在是默认行为。可以通过设置特殊变量 SHOW_CONTEXT 更改。", "title": "引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "cc5f4915430f84d0628cc9e29e45d24d81ef683de17e87d7d54a7c16c98398bb", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["0426f349e"]], "identity_text": "Introduce a feature whereby the CONTEXT field of messages can be suppressed, either always or only for non-error messages (Pavel Stehule) Printing CONTEXT only for errors is now the default behavior. This can be changed by setting the special variable SHOW_CONTEXT.", "commit_aliases": ["0426f349e"], "source_commits": ["0426f349e"], "source_entry_id": "9.6.0/changes/145", "db_id": "3ce123ea6c2d6bd34288d178655446b8", "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "statement_hash": "a7fde02d87c498a1365675c15da9c7f859adfe490cf5ba2535dd96fd3e990b57", "relations": [{"rule": 2, "type": "related", "target": "170b1fefcffcedda9461e5d56803fec1", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}}, {"rule": 2, "type": "related", "target": "38f5670a2a48e398fc5f56296717be27", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}}], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": [{"db_id": "38f5670a2a48e398fc5f56296717be27", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "在 libpq 中引入一项特性，可以始终或只对非错误消息抑制消息的 CONTEXT 字段", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-e2a86ce963549df5", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.11"}, {"db_id": "170b1fefcffcedda9461e5d56803fec1", "kind": "related", "version": "9.6.0", "label": "9.6", "title": "移除 PL/pgSQL 中抑制 RAISE 命令发出消息的 CONTEXT 最内层的“特性”", "evidence": {"same_day": true, "patch_ids": ["d674faf49d479be5cc744274d9634d04"], "ambiguous_patch_ids": ["d674faf49d479be5cc744274d9634d04"]}, "url": "/docs/compare/?release=9.6.0#9.6.0-709f75cc02efb359", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.4"}]}, {"id": "9.6.0-789044856ef7b7bb", "cves": [], "html": "<p>使 <code>\\df+</code> 显示函数访问权限和并行安全属性（Michael Paquier）</p>", "text": "使 \\df+ 显示函数访问权限和并行安全属性（Michael Paquier）", "title": "使 \\df+ 显示函数访问权限和并行安全属性", "commits": [], "section": "客户端应用程序 / psql", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.3", "source_hash": "1ed212e91fb3c5ae4e5b5e767e49675baf5f1715f54b4528b3ad87e23334b3be", "section_path": ["客户端应用程序", "psql"], "commit_groups": [["a670c24c3"]], "identity_text": "Make \\df+ show function access privileges and parallel-safety attributes (Michael Paquier)", "commit_aliases": ["a670c24c3"], "source_commits": ["a670c24c3"], "source_entry_id": "9.6.0/changes/146", "db_id": "e6321fc264f0ba9c568779146505c86f", "patch_ids": ["5c582cc984b841628b2b38da00233637"], "statement_hash": "bf6d308d614e5a4dd9ee8adecdfc59f73a06e205c092e8c21cf5d174bcfedfde", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-0e8e90f31962f298", "cves": [], "html": "<p><span>pgbench</span> 脚本中的 SQL 命令现在以分号而非换行结束（Kyotaro Horiguchi、Tom Lane）</p>\n<p>此更改允许脚本中的 SQL 命令跨多行。现有的自定义脚本需要修改，在每个还没有分号的行尾添加分号。（这样做不会破坏脚本在旧版本 <span>pgbench</span> 中的使用。）</p>", "text": "pgbench 脚本中的 SQL 命令现在以分号而非换行结束（Kyotaro Horiguchi、Tom Lane） 此更改允许脚本中的 SQL 命令跨多行。现有的自定义脚本需要修改，在每个还没有分号的行尾添加分号。（这样做不会破坏脚本在旧版本 pgbench 中的使用。）", "title": "pgbench 脚本中的 SQL 命令现在以分号而非换行结束", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "3f0f6e700f5fc0539cc665d2c6239f58a22aa45e0a84b2074090fa00acacc479", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["68ab8e8ba"]], "identity_text": "SQL commands in pgbench scripts are now ended by semicolons, not newlines (Kyotaro Horiguchi, Tom Lane) This change allows SQL commands in scripts to span multiple lines. Existing custom scripts will need to be modified to add a semicolon at the end of each line that does not have one already. (Doing so does not break the script for use with older versions of pgbench.)", "commit_aliases": ["68ab8e8ba"], "source_commits": ["68ab8e8ba"], "source_entry_id": "9.6.0/changes/147", "db_id": "fd5a866c5fbdfd2c9df3696526558d59", "patch_ids": ["81009f194d31f4fad5d256756a7d8831"], "statement_hash": "a1366f9ccf7a88dbcc3288006ee4563d93254c61db48720828141f25bf56c5f7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d14a10a5dc37b78d", "cves": [], "html": "<p>支持反斜杠命令表达式中的浮点运算以及一些<a href=\"/docs/9.6/pgbench.html#PGBENCH-BUILTIN-FUNCTIONS\" title=\"内置函数\">内建函数</a>（Fabien Coelho）</p>", "text": "支持反斜杠命令表达式中的浮点运算以及一些内建函数（Fabien Coelho）", "title": "支持反斜杠命令表达式中的浮点运算以及一些内建函数", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "7ef100f63d66a03816795016bcd60b9837000cfd3c131cf1ac99736bb4dd59ce", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["7a622b273"], ["7e137f846"], ["86c43f4e2"], ["951529948"]], "identity_text": "Support floating-point arithmetic, as well as some built-in functions, in expressions in backslash commands (Fabien Coelho)", "commit_aliases": ["7a622b273", "7e137f846", "86c43f4e2", "951529948"], "source_commits": ["7a622b273", "7e137f846", "86c43f4e2", "951529948"], "source_entry_id": "9.6.0/changes/148", "db_id": "09ebeaa832cb7ee34c85f28befdb2fdc", "patch_ids": ["1450f363f45566482791b61246e24cbc", "94c5df2c011edfee2176eabc57fa2832", "c69560be041b259ad142c5b1e1135189", "dc43c46380ffb2e4c582717d665d6d01"], "statement_hash": "411871e5186918fcc9100028c18749b64dbf9953493bb98bbb6ce4f5eff62ba7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c6809f7bcda1e74b", "cves": [], "html": "<p>用内建函数替换 <code>\\setrandom</code>（Fabien Coelho）</p>\n<p>新内建函数包括 <a href=\"/docs/9.6/pgbench.html#PGBENCH-FUNCTIONS\" title=\"表 240. pgbench 函数\"><code>random()</code></a>、<code>random_exponential()</code> 和 <code>random_gaussian()</code>，它们执行与 <code>\\setrandom</code> 相同的工作，但更易于使用，因为可以嵌入更大的表达式。由于这些添加使 <code>\\setrandom</code> 过时，将其移除。</p>", "text": "用内建函数替换 \\setrandom（Fabien Coelho） 新内建函数包括 random()、random_exponential() 和 random_gaussian()，它们执行与 \\setrandom 相同的工作，但更易于使用，因为可以嵌入更大的表达式。由于这些添加使 \\setrandom 过时，将其移除。", "title": "用内建函数替换 \\setrandom", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "e9ad1d51e2f6f024233a82bdcb22bc3a82c74969d49aad90f19e6d53218de6de", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["ad9566470"]], "identity_text": "Replace \\setrandom with built-in functions (Fabien Coelho) The new built-in functions include random(), random_exponential(), and random_gaussian(), which perform the same work as \\setrandom, but are easier to use since they can be embedded in larger expressions. Since these additions have made \\setrandom obsolete, remove it.", "commit_aliases": ["ad9566470"], "source_commits": ["ad9566470"], "source_entry_id": "9.6.0/changes/149", "db_id": "f8da612b81ff368f05b4ac9d5e63af2f", "patch_ids": ["701282bc1ba12851268c8a97cfa4c03a"], "statement_hash": "c421273622030eed1f43259f2267e7adb03554095a7c2fc72a526c755f84d5a5", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-cbbf5f507323d0df", "cves": [], "html": "<p>允许调用内建脚本的多个副本，而不只是自定义脚本（Fabien Coelho）</p>\n<p>这通过新的 <code>-b</code> 开关完成，它对自定义脚本的作用类似于 <code>-f</code>。</p>", "text": "允许调用内建脚本的多个副本，而不只是自定义脚本（Fabien Coelho） 这通过新的 -b 开关完成，它对自定义脚本的作用类似于 -f。", "title": "允许调用内建脚本的多个副本，而不只是自定义脚本", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "74bf1260519b8675abaecdd890f3b860783149121c5dd265627d2b6a71059da0", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["8bea3d221"], ["d561f1cae"]], "identity_text": "Allow invocation of multiple copies of the built-in scripts, not only custom scripts (Fabien Coelho) This is done with the new -b switch, which works similarly to -f for custom scripts.", "commit_aliases": ["8bea3d221", "d561f1cae"], "source_commits": ["8bea3d221", "d561f1cae"], "source_entry_id": "9.6.0/changes/150", "db_id": "080ef0e74108d8ae9cf4997036ea0543", "patch_ids": ["19f4270e318911306c5b014e47790051", "9a323d7b78b3e13481a691c26383ebf3"], "statement_hash": "5cb113b4f39eda62e7c889fbbb582c1c894392b192e21556259d5fe874c5e639", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-61a181d87c548517", "cves": [], "html": "<p>允许更改脚本的选择概率（权重）（Fabien Coelho）</p>\n<p>当指定多个脚本时，每个 <span>pgbench</span> 事务随机选择一个执行。以前这总是以均匀概率完成，但现在可以为不同脚本指定不同的选择概率。</p>", "text": "允许更改脚本的选择概率（权重）（Fabien Coelho） 当指定多个脚本时，每个 pgbench 事务随机选择一个执行。以前这总是以均匀概率完成，但现在可以为不同脚本指定不同的选择概率。", "title": "允许更改脚本的选择概率（权重）", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "0558ed5cc6b6fd4f4255832c5dd0448febdd7d2b24aded5c6d6eca0ed6316c47", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["7bafffea6"], ["970300faa"]], "identity_text": "Allow changing the selection probabilities (weights) for scripts (Fabien Coelho) When multiple scripts are specified, each pgbench transaction randomly chooses one to execute. Formerly this was always done with uniform probability, but now different selection probabilities can be specified for different scripts.", "commit_aliases": ["7bafffea6", "970300faa"], "source_commits": ["7bafffea6", "970300faa"], "source_entry_id": "9.6.0/changes/151", "db_id": "64b3406d8d2c9044c9fbf97c64de9470", "patch_ids": ["bf433b1823801515835a61d4a5d99c58", "ce4dc28b741efa3b9a0cff9474a9aeac"], "statement_hash": "bc16596c8197d052b47e9c1ffc80ed113e741f6baa4ec311c8005be13c60bbc7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-44f0a8794d2c71e5", "cves": [], "html": "<p>在多脚本运行中为每个脚本收集统计信息（Fabien Coelho）</p>\n<p>此特性为现有的全局和逐命令统计输出添加了一个中间细节级别。</p>", "text": "在多脚本运行中为每个脚本收集统计信息（Fabien Coelho） 此特性为现有的全局和逐命令统计输出添加了一个中间细节级别。", "title": "在多脚本运行中为每个脚本收集统计信息", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "a8df2b20d56d973e6b1f1d81a235ff764076a6171c421e70d91578e7c1637300", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["1d0c3b3f8"]], "identity_text": "Collect statistics for each script in a multi-script run (Fabien Coelho) This feature adds an intermediate level of detail to existing global and per-command statistics printouts.", "commit_aliases": ["1d0c3b3f8"], "source_commits": ["1d0c3b3f8"], "source_entry_id": "9.6.0/changes/152", "db_id": "b51daaf486a2ef30d6731f85c12b338c", "patch_ids": ["a77bd6f199e71f5ba805460f4797573d"], "statement_hash": "57d1bc05b48f3598375a443bb8f8fb8282e7914ce7fb5c72297d98896bafbaf7", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e00d9ad2b4469f43", "cves": [], "html": "<p>添加 <code>--progress-timestamp</code> 选项以用 Unix 纪元时间戳报告进度，而不是自运行开始以来的时间（Fabien Coelho）</p>", "text": "添加 --progress-timestamp 选项以用 Unix 纪元时间戳报告进度，而不是自运行开始以来的时间（Fabien Coelho）", "title": "添加 --progress-timestamp 选项以用 Unix 纪元时间戳报告进度，而不是自运行开始以来的时间", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "e421648d0c4674e9deb36d604420c27c037772f5fd6c845ed926f6732b4e4133", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["1def9063c"]], "identity_text": "Add a --progress-timestamp option to report progress with Unix epoch timestamps, instead of time since the run started (Fabien Coelho)", "commit_aliases": ["1def9063c"], "source_commits": ["1def9063c"], "source_entry_id": "9.6.0/changes/153", "db_id": "8ccf638b4321a3d5968c8b4de23e4b47", "patch_ids": ["f189d47217ecaa2b7cdbe0fe714142d3"], "statement_hash": "4fdad26bd3ca79acb876639ee4f9dc8118d109faf081e071bc4d64646359abd3", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-2d6f077dfec28828", "cves": [], "html": "<p>允许客户端连接数（<code>-c</code>）不必是线程数（<code>-j</code>）的精确倍数（Fabien Coelho）</p>", "text": "允许客户端连接数（-c）不必是线程数（-j）的精确倍数（Fabien Coelho）", "title": "允许客户端连接数（-c）不必是线程数（-j）的精确倍数", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "dca7920d1317f54e1dd5906fad58be5af3a85135058552e34ae0cf05b3522220", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["ba3deeefb"]], "identity_text": "Allow the number of client connections (-c) to not be an exact multiple of the number of threads (-j) (Fabien Coelho)", "commit_aliases": ["ba3deeefb"], "source_commits": ["ba3deeefb"], "source_entry_id": "9.6.0/changes/154", "db_id": "0e43b89310cc4712bfa662fce94f6516", "patch_ids": ["b3301723f0184388ed774dc5bede1d29"], "statement_hash": "7d4ab72f99eba4e5c9a11016a2d481c6118945ac56cae0d3a778ad224f62119b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c19a2caa0479a297", "cves": [], "html": "<p>使用 <code>-T</code> 选项时，在指定时间结束时及时停止（Fabien Coelho）</p>\n<p>以前指定低事务速率可能导致 <span>pgbench</span> 等待明显长于指定的时间。</p>", "text": "使用 -T 选项时，在指定时间结束时及时停止（Fabien Coelho） 以前指定低事务速率可能导致 pgbench 等待明显长于指定的时间。", "title": "使用 -T 选项时，在指定时间结束时及时停止", "commits": [], "section": "客户端应用程序 / pgbench", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.12.4", "source_hash": "7affe89033845386c53d35449389513074043ac2d1c0e592da7d2b0d680b4d54", "section_path": ["客户端应用程序", "pgbench"], "commit_groups": [["accf7616f"]], "identity_text": "When the -T option is used, stop promptly at the end of the specified time (Fabien Coelho) Previously, specifying a low transaction rate could cause pgbench to wait significantly longer than specified.", "commit_aliases": ["accf7616f"], "source_commits": ["accf7616f"], "source_entry_id": "9.6.0/changes/155", "db_id": "db011a3cb21530aca8134e5ddec320d5", "patch_ids": ["acfcb1a9931e1b7c3776ccec20128834"], "statement_hash": "f2614eaee16510f24c749ac409108caf4ae8df39f43757e979098bf02f0f51b2", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-315b7c0969492f7c", "cves": [], "html": "<p>改进 <span>initdb</span> 引导后阶段的错误报告（Tom Lane）</p>\n<p>以前这里的错误导致把整个输入文件报告为<span>“<span>失败的查询</span>”</span>；现在只报告当前查询。为获得期望的行为， <span>initdb</span> 输入文件中的查询必须用空行分隔。</p>", "text": "改进 initdb 引导后阶段的错误报告（Tom Lane） 以前这里的错误导致把整个输入文件报告为“失败的查询”；现在只报告当前查询。为获得期望的行为， initdb 输入文件中的查询必须用空行分隔。", "title": "改进 initdb 引导后阶段的错误报告", "commits": [], "section": "服务器应用程序", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.13", "source_hash": "1a3bafb2acc1d4de3c4f54e12c077728463b17925169e60a27e36578f09d2d98", "section_path": ["服务器应用程序"], "commit_groups": [["66d947b9d"]], "identity_text": "Improve error reporting during initdb's post-bootstrap phase (Tom Lane) Previously, an error here led to reporting the entire input file as the failing query; now just the current query is reported. To get the desired behavior, queries in initdb's input files must be separated by blank lines.", "commit_aliases": ["66d947b9d"], "source_commits": ["66d947b9d"], "source_entry_id": "9.6.0/changes/156", "db_id": "b24070e720c788555a888dc98b4c20e8", "patch_ids": ["27c50a37cab63242436ea8eba8921880"], "statement_hash": "a3fea1d65148f3b6caed05efdebdd3ee345c558d1305e0f3244cefbd39e18180", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4e9643aa2516d8d9", "cves": [], "html": "<p>通过为所有引导后步骤只使用一个独立后端会话来加速 <span>initdb</span>（Tom Lane）</p>", "text": "通过为所有引导后步骤只使用一个独立后端会话来加速 initdb（Tom Lane）", "title": "通过为所有引导后步骤只使用一个独立后端会话来加速 initdb", "commits": [], "section": "服务器应用程序", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.13", "source_hash": "bcbfc210bf7194c44492cbef677f778c8ea7026cfd58948f561e6e74d2a796f2", "section_path": ["服务器应用程序"], "commit_groups": [["c4a8812cf"], ["d9720e437"]], "identity_text": "Speed up initdb by using just one standalone-backend session for all the post-bootstrap steps (Tom Lane)", "commit_aliases": ["c4a8812cf", "d9720e437"], "source_commits": ["c4a8812cf", "d9720e437"], "source_entry_id": "9.6.0/changes/157", "db_id": "c92fec2892ecc415360b9aba11991110", "patch_ids": ["61e718e873938a434199b22a07ed612b", "8b377c22ec1801a294ae0fd4ccdb715a"], "statement_hash": "e1f6e22424332735ddc1a2f2343c3356cbdb3c38c4f5b265502418be0e244a62", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-48876cb59a78211a", "cves": [], "html": "<p>改进<a href=\"/docs/9.6/app-pgrewind.html\" title=\"pg_rewind\"><span>pg_rewind</span></a>使它能在目标时间线更改时工作（Alexander Korotkov）</p>\n<p>这允许例如把已提升的备库回卷到旧主库时间线的某个状态。</p>", "text": "改进pg_rewind使它能在目标时间线更改时工作（Alexander Korotkov） 这允许例如把已提升的备库回卷到旧主库时间线的某个状态。", "title": "改进pg_rewind使它能在目标时间线更改时工作", "commits": [], "section": "服务器应用程序", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.13", "source_hash": "a0650a994c4c68f053dd92d81c2bb66f7ae68b4187eb0ce7a379d6ee9216cab9", "section_path": ["服务器应用程序"], "commit_groups": [["e50cda784"]], "identity_text": "Improve pg_rewind so that it can work when the target timeline changes (Alexander Korotkov) This allows, for example, rewinding a promoted standby back to some state of the old master's timeline.", "commit_aliases": ["e50cda784"], "source_commits": ["e50cda784"], "source_entry_id": "9.6.0/changes/158", "db_id": "9f45bfc149b1bcee561f54517961596d", "patch_ids": ["2e8618ffd2f6844b4bd2978267f094d1"], "statement_hash": "0399c550f5af383753f0b9e0b8d07f31e4833489d16f290586bc902228c47bd3", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-26d121d4584333c4", "cves": [], "html": "<p>移除过时的 <code>heap_formtuple</code>/ <code>heap_modifytuple</code>/ <code>heap_deformtuple</code> 函数（Peter Geoghegan）</p>", "text": "移除过时的 heap_formtuple/ heap_modifytuple/ heap_deformtuple 函数（Peter Geoghegan）", "title": "移除过时的 heap_formtuple/ heap_modifytuple/ heap_deformtuple 函数", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "c357b39759dce9330bf92d9a5d8723eac8c7fc93533909cc36e2a2dc7fc215a9", "section_path": ["源代码"], "commit_groups": [["726117243"]], "identity_text": "Remove obsolete heap_formtuple/heap_modifytuple/heap_deformtuple functions (Peter Geoghegan)", "commit_aliases": ["726117243"], "source_commits": ["726117243"], "source_entry_id": "9.6.0/changes/159", "db_id": "f0a2cdcdea21a4e06e36c3d9dddb3d8b", "patch_ids": ["37e13659833c74f4f01e71bca8e7adfd"], "statement_hash": "90285467a1a01dfd10e6040822e36a37f45c3fab7d9d80eda988d5e049c0c857", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e7a59c348a5119a2", "cves": [], "html": "<p>添加宏使 <code>AllocSetContextCreate()</code> 调用更简单、更安全（Tom Lane）</p>\n<p>现在不推荐为内存上下文写出各个大小参数，改为使用新宏 <code>ALLOCSET_DEFAULT_SIZES</code>、<code>ALLOCSET_SMALL_SIZES</code> 或 <code>ALLOCSET_START_SMALL_SIZES</code> 之一。但现有代码仍然工作。</p>", "text": "添加宏使 AllocSetContextCreate() 调用更简单、更安全（Tom Lane） 现在不推荐为内存上下文写出各个大小参数，改为使用新宏 ALLOCSET_DEFAULT_SIZES、ALLOCSET_SMALL_SIZES 或 ALLOCSET_START_SMALL_SIZES 之一。但现有代码仍然工作。", "title": "添加宏使 AllocSetContextCreate() 调用更简单、更安全", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "082182dcc79338b8c3c7dc583285f0e617e8523cfc72963db0a558e489754385", "section_path": ["源代码"], "commit_groups": [["b9fe6cbc8"]], "identity_text": "Add macros to make AllocSetContextCreate() calls simpler and safer (Tom Lane) Writing out the individual sizing parameters for a memory context is now deprecated in favor of using one of the new macros ALLOCSET_DEFAULT_SIZES, ALLOCSET_SMALL_SIZES, or ALLOCSET_START_SMALL_SIZES. Existing code continues to work, however.", "commit_aliases": ["b9fe6cbc8"], "source_commits": ["b9fe6cbc8"], "source_entry_id": "9.6.0/changes/160", "db_id": "4759d40a7814a2dad5bb4c035a9401f3", "patch_ids": ["161b83a54281885afb4fd13ba33fa738"], "statement_hash": "defe02b3d8e5e538fbbf5c8d5eac3b0cbfcb77262141a48ae3297d05958481ce", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-ca2a43d602dbdb44", "cves": [], "html": "<p>在头文件中无条件使用 <code>static inline</code> 函数（Andres Freund）</p>\n<p>这对非常老的编译器可能导致警告和/或浪费代码空间，但记法上的改进看来值得。</p>", "text": "在头文件中无条件使用 static inline 函数（Andres Freund） 这对非常老的编译器可能导致警告和/或浪费代码空间，但记法上的改进看来值得。", "title": "在头文件中无条件使用 static inline 函数", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "1298b353bc9086b1f435158654223023548430b1f7460769ec4e987de98a4d41", "section_path": ["源代码"], "commit_groups": [["de6fd1c89"]], "identity_text": "Unconditionally use static inline functions in header files (Andres Freund) This may result in warnings and/or wasted code space with very old compilers, but the notational improvement seems worth it.", "commit_aliases": ["de6fd1c89"], "source_commits": ["de6fd1c89"], "source_entry_id": "9.6.0/changes/161", "db_id": "c7099a50a64dd144f7395628d038d302", "patch_ids": ["3c69dbfe63ce38be636306cca9cc3764"], "statement_hash": "bdeed52316acccd7313719eab4b3d16e9ca9975c5799c651981deea63e2972b8", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-469d348ab7570c54", "cves": [], "html": "<p>改进 <span>TAP</span> 测试基础设施（Michael Paquier、Craig Ringer、Álvaro Herrera、Stephen Frost）</p>\n<p>值得注意的是，现在可以使用此基础设施测试恢复场景。</p>", "text": "改进 TAP 测试基础设施（Michael Paquier、Craig Ringer、Álvaro Herrera、Stephen Frost） 值得注意的是，现在可以使用此基础设施测试恢复场景。", "title": "改进 TAP 测试基础设施", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "84608e3eb11f8d4c32f1d5f6fb96042b4552dfba14d6ea5caa7f6ddeb02f28aa", "section_path": ["源代码"], "commit_groups": [["13d856e17"], ["1caef31d9"], ["2c83f435a"], ["49148645f"], ["6bd356c33"], ["74d58425c"], ["9821492ee"]], "identity_text": "Improve TAP testing infrastructure (Michael Paquier, Craig Ringer, Álvaro Herrera, Stephen Frost) Notably, it is now possible to test recovery scenarios using this infrastructure.", "commit_aliases": ["13d856e17", "1caef31d9", "2c83f435a", "49148645f", "6bd356c33", "74d58425c", "9821492ee"], "source_commits": ["13d856e17", "1caef31d9", "2c83f435a", "49148645f", "6bd356c33", "74d58425c", "9821492ee"], "source_entry_id": "9.6.0/changes/162", "db_id": "61125db84b974a5021f4c0c9727bf787", "patch_ids": ["0958de69a0f5e3efaf2081246249447f", "3688721e4e0c50aa25f3d1756f55e2b8", "70f7170202e24e596aaeb3cd74b7ada9", "a341639a67c7a5996d7372c8fc79ab46", "d97fcbf82b092b734e200d1db22e8604", "e242e4b53d52ad5b0dd9e6d2109dcbc3", "f1742d7d634a4bd9a7d7789920eca876"], "statement_hash": "17de13ba6b3868401c308baf4db9ec2e87b62df04763ead0539204e25fa2b5d1", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-5c864ae8b795ef13", "cves": [], "html": "<p>使 <code>trace_lwlocks</code> 按名称标识各个锁（Robert Haas）</p>", "text": "使 trace_lwlocks 按名称标识各个锁（Robert Haas）", "title": "使 trace_lwlocks 按名称标识各个锁", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "2e59ddac0ea4441fde32c0146110d298721b3c15c503e5df639bc8fdfb9cede2", "section_path": ["源代码"], "commit_groups": [["aa65de042"]], "identity_text": "Make trace_lwlocks identify individual locks by name (Robert Haas)", "commit_aliases": ["aa65de042"], "source_commits": ["aa65de042"], "source_entry_id": "9.6.0/changes/163", "db_id": "f24385f77895f417a6a5ed4f410d74cd", "patch_ids": ["5eee474d7a8ce8627c7247154fa75863"], "statement_hash": "6e7bf097111eae1f391880564cd0c1838831230a9ee38a4a9e1dd2cc538e6837", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6896354ce5caddff", "cves": [], "html": "<p>改进 <span>psql</span> 的 Tab 补全代码基础设施（Thomas Munro、Michael Paquier）</p>\n<p>Tab 补全规则现在编写起来相当容易，也更紧凑。</p>", "text": "改进 psql 的 Tab 补全代码基础设施（Thomas Munro、Michael Paquier） Tab 补全规则现在编写起来相当容易，也更紧凑。", "title": "改进 psql 的 Tab 补全代码基础设施", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "ba9f9dfd295ae89d9bd3b7863e68b73e983f8967698d14aead1b23b3c6c4eb11", "section_path": ["源代码"], "commit_groups": [["4f18010af"], ["9b181b036"], ["d37b816dc"]], "identity_text": "Improve psql's tab-completion code infrastructure (Thomas Munro, Michael Paquier) Tab-completion rules are now considerably easier to write, and more compact.", "commit_aliases": ["4f18010af", "9b181b036", "d37b816dc"], "source_commits": ["4f18010af", "9b181b036", "d37b816dc"], "source_entry_id": "9.6.0/changes/164", "db_id": "7822450da9bb8d4fd413cd7a52b69672", "patch_ids": ["0c14ec70ff58700a98ab27d93c0ce134", "8581fae928b6a545d76bab5b75999bfe", "e983c34028cd907641a97a9f249303ef"], "statement_hash": "ec0e88726bf401e0419e4ccd19fdb4b59677d2706083c9ced873ca2d1fcf0a7e", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-9b3d2742cde8314d", "cves": [], "html": "<p>把 <code>pg_shseclabel</code> 系统目录钉入缓存，使它在连接认证期间可被访问（Adam Brightwell）</p>\n<p>核心代码不把此目录用于认证，但扩展可能希望查询它。</p>", "text": "把 pg_shseclabel 系统目录钉入缓存，使它在连接认证期间可被访问（Adam Brightwell） 核心代码不把此目录用于认证，但扩展可能希望查询它。", "title": "把 pg_shseclabel 系统目录钉入缓存，使它在连接认证期间可被访问", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "192a2f55e5a57044d2b3981cbcdd25e0564d1905c3118c0b4dd3a16197a0252b", "section_path": ["源代码"], "commit_groups": [["efa318bcf"]], "identity_text": "Nail the pg_shseclabel system catalog into cache, so that it is available for access during connection authentication (Adam Brightwell) The core code does not use this catalog for authentication, but extensions might wish to consult it.", "commit_aliases": ["efa318bcf"], "source_commits": ["efa318bcf"], "source_entry_id": "9.6.0/changes/165", "db_id": "794ad65e50ffc1e3d60deaa17f91f105", "patch_ids": ["2bdd8ed10ca5eb1155838154eb251e8f"], "statement_hash": "715664dbcc9dec7f4450256c63f3f061fa85d8789f67fa6f54bdfbf6649b6f8d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-861fd4e656e5cd5f", "cves": [], "html": "<p>重构<a href=\"/docs/9.6/indexam.html\" title=\"第 59 章 索引访问方法接口定义\">索引访问方法 <acronym>API</acronym></a>，在 <span>C</span> 层面隐藏其大部分（Alexander Korotkov、Andrew Gierth）</p>\n<p>此更改把索引 <acronym>AM API</acronym> 现代化，使其看起来更像我们为外部数据包装器和 tablesample 处理器采用的设计。这简化了 <span>C</span> 代码并使在可安装扩展中定义索引访问方法实际可行。结果是 <code>pg_am</code> 系统目录的大多数列消失了。添加了新的<a href=\"/docs/9.6/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE\" title=\"表 9.62. 系统目录信息函数\">检查函数</a>，允许 SQL 查询确定以前可以从 <code>pg_am</code> 发现的索引 AM 属性。。</p>", "text": "重构索引访问方法 API，在 C 层面隐藏其大部分（Alexander Korotkov、Andrew Gierth） 此更改把索引 AM API 现代化，使其看起来更像我们为外部数据包装器和 tablesample 处理器采用的设计。这简化了 C 代码并使在可安装扩展中定义索引访问方法实际可行。结果是 pg_am 系统目录的大多数列消失了。添加了新的检查函数，允许 SQL 查询确定以前可以从 pg_am 发现的索引 AM 属性。。", "title": "重构索引访问方法 API，在 C 层面隐藏其大部分", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "5bdb3c6c3c930659415c8d86af0d4128245ac2df2ee937822d052fc70bba009f", "section_path": ["源代码"], "commit_groups": [["65c5fcd35"], ["be44ed27b"], ["ed0097e4f"]], "identity_text": "Restructure index access method API to hide most of it at the C level (Alexander Korotkov, Andrew Gierth) This change modernizes the index AM API to look more like the designs we have adopted for foreign data wrappers and tablesample handlers. This simplifies the C code and makes it much more practical to define index access methods in installable extensions. A consequence is that most of the columns of the pg_am system catalog have disappeared. New inspection functions have been added to allow SQL queries to determine index AM properties that used to be discoverable from pg_am.", "commit_aliases": ["65c5fcd35", "be44ed27b", "ed0097e4f"], "source_commits": ["65c5fcd35", "be44ed27b", "ed0097e4f"], "source_entry_id": "9.6.0/changes/166", "db_id": "bd5713f7098a53ff35a9c98f457dc69c", "patch_ids": ["4df956701b34c2186ad4449976c70fbe", "9f4bee7c3a09cc9e625b87fcaa0fa649", "a1ef37d612cff13aa30bc998f37db0b0"], "statement_hash": "51920b7d58ee13e52a3c43058d65f63b18157ec66bc5b8b82a41618f65344b5f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-7e9e8261d9d22bfe", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/catalog-pg-init-privs.html\" title=\"50.28. pg_init_privs\"><code>pg_init_privs</code></a> 系统目录以保存 <span>initdb</span> 创建和扩展创建对象的原始权限（Stephen Frost）</p>\n<p>此基础设施允许 <span>pg_dump</span> 转储安装可能对附加到系统对象的权限所做的更改。以前这种更改在转储和重新装载中丢失，但现在被保留。</p>", "text": "添加 pg_init_privs 系统目录以保存 initdb 创建和扩展创建对象的原始权限（Stephen Frost） 此基础设施允许 pg_dump 转储安装可能对附加到系统对象的权限所做的更改。以前这种更改在转储和重新装载中丢失，但现在被保留。", "title": "添加 pg_init_privs 系统目录以保存 initdb 创建和扩展创建对象的原始权限", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "d22a07d867d639ab6ac9e1067b6d8b449bf6069fb814045e086c7fa29db799a6", "section_path": ["源代码"], "commit_groups": [["6c268df12"]], "identity_text": "Add pg_init_privs system catalog to hold original privileges of initdb-created and extension-created objects (Stephen Frost) This infrastructure allows pg_dump to dump changes that an installation may have made in privileges attached to system objects. Formerly, such changes would be lost in a dump and reload, but now they are preserved.", "commit_aliases": ["6c268df12"], "source_commits": ["6c268df12"], "source_entry_id": "9.6.0/changes/167", "db_id": "18975fccb1e29ff36bcfde8de7f7b866", "patch_ids": ["e10395ddea0991d44fb3bd1a71635d1f"], "statement_hash": "ecd532fa260abdc0364e1c585102555a58522f2b1474cd6ed576903aa7db6ef0", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d34f5764eb365c70", "cves": [], "html": "<p>更改扩展分配自定义 <code>LWLock</code> 的方式（Amit Kapila、Robert Haas）</p>\n<p><code>RequestAddinLWLocks()</code> 函数被移除，替换为 <code>RequestNamedLWLockTranche()</code>。这允许更好地标识自定义 <code>LWLock</code>，也更不容易出错。</p>", "text": "更改扩展分配自定义 LWLock 的方式（Amit Kapila、Robert Haas） RequestAddinLWLocks() 函数被移除，替换为 RequestNamedLWLockTranche()。这允许更好地标识自定义 LWLock，也更不容易出错。", "title": "更改扩展分配自定义 LWLock 的方式", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "dfbb66c598a98c07b4ea49c050e5ef34a71786cbdc06233bb94af3e7582523ac", "section_path": ["源代码"], "commit_groups": [["c1772ad92"]], "identity_text": "Change the way that extensions allocate custom LWLocks (Amit Kapila, Robert Haas) The RequestAddinLWLocks() function is removed, and replaced by RequestNamedLWLockTranche(). This allows better identification of custom LWLocks, and is less error-prone.", "commit_aliases": ["c1772ad92"], "source_commits": ["c1772ad92"], "source_entry_id": "9.6.0/changes/168", "db_id": "0a845106f3d95f517c85b14667cbbbfa", "patch_ids": ["f9c844c2e935d93d247b134a0e127d3a"], "statement_hash": "5f8f25c6454b43a1c647e4073fda0244e1028e1441d54613f4bd00a2a8cfd901", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-712789ebed846123", "cves": [], "html": "<p>改进隔离测试器以允许多个会话并发等待，允许测试死锁场景（Robert Haas）</p>", "text": "改进隔离测试器以允许多个会话并发等待，允许测试死锁场景（Robert Haas）", "title": "改进隔离测试器以允许多个会话并发等待，允许测试死锁场景", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "eb9c176f037319d8a23ec27147c26a8e262eeb4c85f548aa830d79af527be992", "section_path": ["源代码"], "commit_groups": [["38f8bdcac"]], "identity_text": "Improve the isolation tester to allow multiple sessions to wait concurrently, allowing testing of deadlock scenarios (Robert Haas)", "commit_aliases": ["38f8bdcac"], "source_commits": ["38f8bdcac"], "source_entry_id": "9.6.0/changes/169", "db_id": "54419d5ac4e4d764d1a4f8b8548b140b", "patch_ids": ["eb278b5d04f70297bbcbcaffee4d6db5"], "statement_hash": "19c8c2618b52aa779abadb20ad8f4c9cabd7c3476806d239a387ecfdd4f6bc49", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d643ac89d8dcc9b6", "cves": [], "html": "<p>引入可扩展节点类型（KaiGai Kohei）</p>\n<p>此更改允许 <span>FDW</span> 或自定义扫描提供者以比以前更方便的格式在计划树中存储数据。</p>", "text": "引入可扩展节点类型（KaiGai Kohei） 此更改允许 FDW 或自定义扫描提供者以比以前更方便的格式在计划树中存储数据。", "title": "引入可扩展节点类型", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "692ecfedc515eed5db0e553166e427bd563bb871ed44c1ddd9056a0a7e18257b", "section_path": ["源代码"], "commit_groups": [["bcac23de7"]], "identity_text": "Introduce extensible node types (KaiGai Kohei) This change allows FDWs or custom scan providers to store data in a plan tree in a more convenient format than was previously possible.", "commit_aliases": ["bcac23de7"], "source_commits": ["bcac23de7"], "source_entry_id": "9.6.0/changes/170", "db_id": "a43569a0e5931ed2608dcc2fd2afab87", "patch_ids": ["2de30cfb69e17ee58c30f523608367a5"], "statement_hash": "7a493d72b44536adc8c6feaf844649eb4457d69fd1b0eb3e8f99a123019022f4", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-6809eff690baaebd", "cves": [], "html": "<p>使规划器通过生成和比较 <code>Path</code> 来处理扫描/连接之后的查询步骤，替换大量特设逻辑（Tom Lane）</p>\n<p>此更改今天只提供边际的用户可见改进，但它使将来许多上层规划器改进成为可能，这些在旧代码结构下不切实际。</p>", "text": "使规划器通过生成和比较 Path 来处理扫描/连接之后的查询步骤，替换大量特设逻辑（Tom Lane） 此更改今天只提供边际的用户可见改进，但它使将来许多上层规划器改进成为可能，这些在旧代码结构下不切实际。", "title": "使规划器通过生成和比较 Path 来处理扫描/连接之后的查询步骤，替换大量特设逻辑", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "0bc91b83b0b0a8a698e2f77e50d950b8a3d6ce08dac641085f8a141700322b6a", "section_path": ["源代码"], "commit_groups": [["19a541143"], ["3fc6e2d7f"], ["5ce5e4a12"], ["68fa28f77"], ["9e703987a"], ["c44d01383"]], "identity_text": "Make the planner deal with post-scan/join query steps by generating and comparing Paths, replacing a lot of ad-hoc logic (Tom Lane) This change provides only marginal user-visible improvements today, but it enables future work on a lot of upper-planner improvements that were impractical to tackle using the old code structure.", "commit_aliases": ["19a541143", "3fc6e2d7f", "5ce5e4a12", "68fa28f77", "9e703987a", "c44d01383"], "source_commits": ["19a541143", "3fc6e2d7f", "5ce5e4a12", "68fa28f77", "9e703987a", "c44d01383"], "source_entry_id": "9.6.0/changes/171", "db_id": "ec1dd59505ee107e7359d1672520b5f0", "patch_ids": ["5b6cebbf78077a0ef941c324cf9defa4", "a05dfc48ea46fdffa98a3d96af9ea6de", "b308f676581382c8cef0f5a4165452eb", "c562debd6956d2878526c112b90470ad", "e531d13f4f4cfcc0e7d5c92048aa3bd1", "fad0ea6b379e68a23e721b500afe5c98"], "statement_hash": "e23bbac096ff7d1c6c656b31f7a28e9061bfc8bd0410f3497948c85491dba2d2", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e4953ca7240a1994", "cves": [], "html": "<p>支持部分聚合（David Rowley、Simon Riggs）</p>\n<p>此更改允许把聚合函数的计算拆分为单独的部分，例如使并行工作者进程能够协作计算聚合。将来它可能允许跨本地和远程数据的聚合部分在远程端发生。</p>", "text": "支持部分聚合（David Rowley、Simon Riggs） 此更改允许把聚合函数的计算拆分为单独的部分，例如使并行工作者进程能够协作计算聚合。将来它可能允许跨本地和远程数据的聚合部分在远程端发生。", "title": "支持部分聚合", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "1ea945e55f279fe59b00146837de8ec76b891d5f728a7989a068c45388fae57c", "section_path": ["源代码"], "commit_groups": [["19e972d55"], ["a7de3dc5c"], ["f8ace5477"]], "identity_text": "Support partial aggregation (David Rowley, Simon Riggs) This change allows the computation of an aggregate function to be split into separate parts, for example so that parallel worker processes can cooperate on computing an aggregate. In future it might allow aggregation across local and remote data to occur partially on the remote end.", "commit_aliases": ["19e972d55", "a7de3dc5c", "f8ace5477"], "source_commits": ["19e972d55", "a7de3dc5c", "f8ace5477"], "source_entry_id": "9.6.0/changes/172", "db_id": "66665187ccc648ba7f9383815677ad16", "patch_ids": ["552a016ffa412b9d5dc44eb3721c0f5c", "697ba33153f44012e2359ba6bdd8c483", "e63a6c819bd9fc45310334dbd00860e1"], "statement_hash": "a0945b4fdb8037a0d205b3f53c56a6a73077f6eb460ede4195208977a1473fd0", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-404f777e691455ce", "cves": [], "html": "<p>添加通用命令进度报告设施（Vinayak Pokale、Rahila Syed、Amit Langote、Robert Haas）</p>", "text": "添加通用命令进度报告设施（Vinayak Pokale、Rahila Syed、Amit Langote、Robert Haas）", "title": "添加通用命令进度报告设施", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "51a2d63c8acfa1691f990d89989a208ed7797287197bce106a970c818389bed1", "section_path": ["源代码"], "commit_groups": [["b6fb6471f"]], "identity_text": "Add a generic command progress reporting facility (Vinayak Pokale, Rahila Syed, Amit Langote, Robert Haas)", "commit_aliases": ["b6fb6471f"], "source_commits": ["b6fb6471f"], "source_entry_id": "9.6.0/changes/173", "db_id": "11dc7df3d8408fdd6f60777ea61005b0", "patch_ids": ["0ad73226a1ca22a8d9fbb6c28ad66647"], "statement_hash": "3b10d65efb14910a51c4e098b61b86356ae8baf96d3f0fa824e0e985b0d53a02", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d833ba7bc6bf52b4", "cves": [], "html": "<p>把 <span>psql</span> 的 <span>flex</span> 词法分析器分离出来供其他客户端程序使用（Tom Lane、Kyotaro Horiguchi）</p>\n<p>这消除了需要能够很好地解析 SQL 命令以识别命令边界的程序中的代码重复。以完整的一般性做到这一点比人们希望的更痛苦，到目前为止在我们支持的客户端程序中只有 <span>psql</span> 真正做对了。</p>\n<p>创建了新的源代码子目录 <code>src/fe_utils/</code> 来保存这个和其他在客户端程序之间共享的代码。以前这种共享是通过在构建时符号链接或复制源文件完成的，这很丑陋且需要重复编译。</p>", "text": "把 psql 的 flex 词法分析器分离出来供其他客户端程序使用（Tom Lane、Kyotaro Horiguchi） 这消除了需要能够很好地解析 SQL 命令以识别命令边界的程序中的代码重复。以完整的一般性做到这一点比人们希望的更痛苦，到目前为止在我们支持的客户端程序中只有 psql 真正做对了。 创建了新的源代码子目录 src/fe_utils/ 来保存这个和其他在客户端程序之间共享的代码。以前这种共享是通过在构建时符号链接或复制源文件完成的，这很丑陋且需要重复编译。", "title": "把 psql 的 flex 词法分析器分离出来供其他客户端程序使用", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "99c5ed52e196691f7d572babd398014a9fe21ce77cfcd2a0ac94186fa711fc0d", "section_path": ["源代码"], "commit_groups": [["0ea9efbe9"], ["27199058d"], ["588d963b0"], ["b6afae71a"], ["c1156411a"], ["d65bea26a"]], "identity_text": "Separate out psql's flex lexer to make it usable by other client programs (Tom Lane, Kyotaro Horiguchi) This eliminates code duplication for programs that need to be able to parse SQL commands well enough to identify command boundaries. Doing that in full generality is more painful than one could wish, and up to now only psql has really gotten it right among our supported client programs. A new source-code subdirectory src/fe_utils/ has been created to hold this and other code that is shared across our client programs. Formerly such sharing was accomplished by symbolic linking or copying source files at build time, which was ugly and required duplicate compilation.", "commit_aliases": ["0ea9efbe9", "27199058d", "588d963b0", "b6afae71a", "c1156411a", "d65bea26a"], "source_commits": ["0ea9efbe9", "27199058d", "588d963b0", "b6afae71a", "c1156411a", "d65bea26a"], "source_entry_id": "9.6.0/changes/174", "db_id": "cf1ecbcf96f1a64f3d4c7293ace49a6a", "patch_ids": ["04450d49188f661336bba6f6dea3a40b", "864d67497b03fba0958be422b6f12792", "b0f9b1dee201104970e45d79afb63815", "b680d374b5a4d6440baa7833b3b7a223", "d1cc0f86d505da6d709fb223cbbb55c2", "ecf5b4549f8252e85cd17d8f91e878c6"], "statement_hash": "7acc6a13e0479dc231b199ac8403776da3ea59e1d60584b2f590c3219ebd9745", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-f804fee2e344a11c", "cves": [], "html": "<p>引入 <code>WaitEventSet</code> <acronym>API</acronym> 以允许高效等待通常不会在两次等待之间更改的事件集（Andres Freund、Amit Kapila）</p>", "text": "引入 WaitEventSet API 以允许高效等待通常不会在两次等待之间更改的事件集（Andres Freund、Amit Kapila）", "title": "引入 WaitEventSet API 以允许高效等待通常不会在两次等待之间更改的事件集", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "87676fb675a779fd318e675775eedba9fa07d28091c33724761243bf8e4715c5", "section_path": ["源代码"], "commit_groups": [["98a64d0bd"]], "identity_text": "Introduce WaitEventSet API to allow efficient waiting for event sets that usually do not change from one wait to the next (Andres Freund, Amit Kapila)", "commit_aliases": ["98a64d0bd"], "source_commits": ["98a64d0bd"], "source_entry_id": "9.6.0/changes/175", "db_id": "0856bdc40fcfeac66ca4d6244ce28b38", "patch_ids": ["6da149fbc1c8ce20b6cc7714f1f0bf77"], "statement_hash": "c97c6df346299f754bf6b35ae06b562590d65b12a7bbc13e01e707bc6abf7fba", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-58ba79fc7f12f8e3", "cves": [], "html": "<p>添加用于写 <acronym>WAL</acronym> 记录的通用接口（Alexander Korotkov、Petr Jelínek、Markus Nullmeier）</p>\n<p>此更改允许扩展使用标准布局为页更改写 <acronym>WAL</acronym> 记录。需要在无法访问扩展的情况下重放 <acronym>WAL</acronym> 的问题通过通用重放代码解决。这允许扩展实现例如索引访问方法并让它们有 <acronym>WAL</acronym> 支持。</p>", "text": "添加用于写 WAL 记录的通用接口（Alexander Korotkov、Petr Jelínek、Markus Nullmeier） 此更改允许扩展使用标准布局为页更改写 WAL 记录。需要在无法访问扩展的情况下重放 WAL 的问题通过通用重放代码解决。这允许扩展实现例如索引访问方法并让它们有 WAL 支持。", "title": "添加用于写 WAL 记录的通用接口", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "b3cb7380fd91bd2f96ff87aed6f84b397ee222673c9146855a7565c1565a2e44", "section_path": ["源代码"], "commit_groups": [["65578341a"]], "identity_text": "Add a generic interface for writing WAL records (Alexander Korotkov, Petr Jelínek, Markus Nullmeier) This change allows extensions to write WAL records for changes to pages using a standard layout. The problem of needing to replay WAL without access to the extension is solved by having generic replay code. This allows extensions to implement, for example, index access methods and have WAL support for them.", "commit_aliases": ["65578341a"], "source_commits": ["65578341a"], "source_entry_id": "9.6.0/changes/176", "db_id": "dab5b6e3fff0d3a79149e154cf8ec514", "patch_ids": ["e5625ff5e6ed86a7a317ded4a8fe9f2a"], "statement_hash": "4c5ef1776b3df75985740b8e6d5d48bc796037a5643644db6a26a6afabdc2e81", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-20af980f33dbae83", "cves": [], "html": "<p>支持逻辑解码的通用 <acronym>WAL</acronym> 消息（Petr Jelínek、Andres Freund）</p>\n<p>此特性允许扩展把数据插入 <acronym>WAL</acronym> 流中，逻辑解码插件可以读取它，但它与物理数据恢复无关。</p>", "text": "支持逻辑解码的通用 WAL 消息（Petr Jelínek、Andres Freund） 此特性允许扩展把数据插入 WAL 流中，逻辑解码插件可以读取它，但它与物理数据恢复无关。", "title": "支持逻辑解码的通用 WAL 消息", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "613df77511763ed02b924b72f197da6ac8a79ac3366bc0a5e7824c6c6388e6d4", "section_path": ["源代码"], "commit_groups": [["3fe3511d0"]], "identity_text": "Support generic WAL messages for logical decoding (Petr Jelínek, Andres Freund) This feature allows extensions to insert data into the WAL stream that can be read by logical-decoding plugins, but is not connected to physical data restoration.", "commit_aliases": ["3fe3511d0"], "source_commits": ["3fe3511d0"], "source_entry_id": "9.6.0/changes/177", "db_id": "0a51f53ebd873cfc1867bece28726a5a", "patch_ids": ["308573ba5c992bd8bde05d7e69eacc6a"], "statement_hash": "0d33dd7d01eabdadcc2b6d386f4d2bc10cb3c39549fce0b86d8fc965fb2f6b9a", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4be4f72e28bb75f5", "cves": [], "html": "<p>允许 SP-GiST 操作符类在沿索引下降时存储任意<span>“<span>遍历值</span>”</span>（Alexander Lebedev、Teodor Sigaev）</p>\n<p>这有点像<span>“<span>重建值</span>”</span>，但它可以是任意数据块，不一定是与被索引列相同的数据类型。</p>", "text": "允许 SP-GiST 操作符类在沿索引下降时存储任意“遍历值”（Alexander Lebedev、Teodor Sigaev） 这有点像“重建值”，但它可以是任意数据块，不一定是与被索引列相同的数据类型。", "title": "允许 SP-GiST 操作符类在沿索引下降时存储任意“遍历值”", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "432138e369c8795bca081b2c94cca2e27c8882400735ffc529954cccc4e264e0", "section_path": ["源代码"], "commit_groups": [["87545f541"], ["ccd6eb49a"]], "identity_text": "Allow SP-GiST operator classes to store an arbitrary traversal value while descending the index (Alexander Lebedev, Teodor Sigaev) This is somewhat like the reconstructed value, but it could be any arbitrary chunk of data, not necessarily of the same data type as the indexed column.", "commit_aliases": ["87545f541", "ccd6eb49a"], "source_commits": ["87545f541", "ccd6eb49a"], "source_entry_id": "9.6.0/changes/178", "db_id": "d52500e463a2c62cc67218059e5ce4f2", "patch_ids": ["3346e5293336e2b3de477359c99bc6d1", "a7c4bb53065006e2a3b098c6586d214e"], "statement_hash": "dd07a05295f358f0556c38fc04628c2b8bed638e3170001ae531a7292c740c6b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-717998a841e8982b", "cves": [], "html": "<p>为 <code>ereport()</code> 引入 <code>LOG_SERVER_ONLY</code> 消息级别（David Steele）</p>\n<p>此级别的行为像 <code>LOG</code>，只是消息永远不会发送到客户端。它用于审计和类似应用。</p>", "text": "为 ereport() 引入 LOG_SERVER_ONLY 消息级别（David Steele） 此级别的行为像 LOG，只是消息永远不会发送到客户端。它用于审计和类似应用。", "title": "为 ereport() 引入 LOG_SERVER_ONLY 消息级别", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "b7948bd29f344d3015a5fbb8cd74842d1ffc5fe55cdc985875b41a01fb1f0a2d", "section_path": ["源代码"], "commit_groups": [["66229ac00"]], "identity_text": "Introduce a LOG_SERVER_ONLY message level for ereport() (David Steele) This level acts like LOG except that the message is never sent to the client. It is meant for use in auditing and similar applications.", "commit_aliases": ["66229ac00"], "source_commits": ["66229ac00"], "source_entry_id": "9.6.0/changes/179", "db_id": "4b2546b4625f4775e5dbf1ff85d2dffb", "patch_ids": ["dd1036b560a6b6fbc68b00ca96e239af"], "statement_hash": "c663800da3bfcb32803a0c34771389a69d80cda5484085c0890f6b077f22580d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-61187e239a510eeb", "cves": [], "html": "<p>提供构建所有生成头文件的 <code>Makefile</code> 目标（Michael Paquier、Tom Lane）</p>\n<p>现在可以调用 <code>submake-generated-headers</code> 来确保生成的后端头文件是最新的。这在可能<span>“<span>独立</span>”</span>构建的子目录中有用。</p>", "text": "提供构建所有生成头文件的 Makefile 目标（Michael Paquier、Tom Lane） 现在可以调用 submake-generated-headers 来确保生成的后端头文件是最新的。这在可能“独立”构建的子目录中有用。", "title": "提供构建所有生成头文件的 Makefile 目标", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "624cbaafb8a2c925b7e032e756c52b99ac862b4b8a4787bf07620311fbe5e665", "section_path": ["源代码"], "commit_groups": [["548af97fc"]], "identity_text": "Provide a Makefile target to build all generated headers (Michael Paquier, Tom Lane) submake-generated-headers can now be invoked to ensure that generated backend header files are up-to-date. This is useful in subdirectories that might be built standalone.", "commit_aliases": ["548af97fc"], "source_commits": ["548af97fc"], "source_entry_id": "9.6.0/changes/180", "db_id": "5b4ade27f0ef0a08c277ab723f310771", "patch_ids": ["cea045616009fd960036b2a8701d9616"], "statement_hash": "6631fe620be07727bc3472242af365f8c9fd202288e337f0a14752d88f7b6c05", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-1cc57f2c59f1c876", "cves": [], "html": "<p>支持 OpenSSL 1.1.0（Andreas Karlsson、Heikki Linnakangas）</p>", "text": "支持 OpenSSL 1.1.0（Andreas Karlsson、Heikki Linnakangas）", "title": "支持 OpenSSL 1.1.0", "commits": [], "section": "源代码", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.14", "source_hash": "aae14e8214682c258b795d091b979c239c3d2607e09df0d0da53bdaaf846c50b", "section_path": ["源代码"], "commit_groups": [["48e5ba61e", "5c6df67e0", "9895818d5"], ["593d4e47d", "e2838c580", "fcd93e4af"]], "identity_text": "Support OpenSSL 1.1.0 (Andreas Karlsson, Heikki Linnakangas)", "commit_aliases": ["48e5ba61e", "593d4e47d", "5c6df67e0", "9895818d5", "e2838c580", "fcd93e4af"], "source_commits": ["9895818d5", "fcd93e4af"], "source_entry_id": "9.6.0/changes/181", "db_id": "1a80e2e675e7c7b2d0a3739f9f395847", "patch_ids": ["813c160b660e56598913c89f61f6441c", "948071a17cc9115c9e78919eb24aaf97"], "statement_hash": "2f6c3be6933f9f3776c1b170f7f68d87e0e8b65fd75697dd5933193df53961a7", "relations": [{"rule": 2, "type": "related", "target": "ca6c798db2f25b8f7b187a9a21f3ff72", "evidence": {"same_day": false, "patch_ids": ["813c160b660e56598913c89f61f6441c", "948071a17cc9115c9e78919eb24aaf97"]}}], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": [{"db_id": "ca6c798db2f25b8f7b187a9a21f3ff72", "kind": "related", "version": "9.5.5", "label": "9.5.5", "title": "支持 OpenSSL 1.1.0", "evidence": {"same_day": false, "patch_ids": ["813c160b660e56598913c89f61f6441c", "948071a17cc9115c9e78919eb24aaf97"]}, "url": "/docs/compare/?release=9.5.5#9.5.5-60b35a8586b4893d", "source_url": "/docs/release/9.5.5/#id-1.11.6.25.5"}]}, {"id": "9.6.0-8c9ea528b2afed03", "cves": [], "html": "<p>添加配置参数 <code>auto_explain.sample_rate</code>，允许 <a href=\"/docs/9.6/auto-explain.html\" title=\"F.3. auto_explain\"><code>contrib/auto_explain</code></a> 只捕获所有查询的可配置比例（Craig Ringer、Julien Rouhaud）</p>\n<p>这允许减少重查询流量的开销，同时仍平均获得有用信息。</p>", "text": "添加配置参数 auto_explain.sample_rate，允许 contrib/auto_explain 只捕获所有查询的可配置比例（Craig Ringer、Julien Rouhaud） 这允许减少重查询流量的开销，同时仍平均获得有用信息。", "title": "添加配置参数 auto_explain.sample_rate，允许 contrib/auto_explain 只捕获所有查询的可配置比例", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "407844b578b4591e346942b5816a1a2e6797d95b120fa3add2b1677b5f93353f", "section_path": ["附加模块"], "commit_groups": [["7a8d87483"], ["92f03fe76"]], "identity_text": "Add configuration parameter auto_explain.sample_rate to allow contrib/auto_explain to capture just a configurable fraction of all queries (Craig Ringer, Julien Rouhaud) This allows reduction of overhead for heavy query traffic, while still getting useful information on average.", "commit_aliases": ["7a8d87483", "92f03fe76"], "source_commits": ["7a8d87483", "92f03fe76"], "source_entry_id": "9.6.0/changes/182", "db_id": "658c4dbc38b4ccb163dc1948337896e6", "patch_ids": ["0ab1a3fb26ed2246ad8d2f746ae69b0a", "144d048ac844d38ab75f7d2067fafe06"], "statement_hash": "21ff6ff49eca967bd8b2542c03c64b62b78bc25f36bc0656fc1f79a036356368", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a811e1d4e87d3e24", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/bloom.html\" title=\"F.4. bloom\"><code>contrib/bloom</code></a> 模块，实现基于 Bloom 过滤的索引访问方法（Teodor Sigaev、Alexander Korotkov）</p>\n<p>这主要是非核心索引访问方法的概念验证，但对搜索许多列的查询本身也可能有用。</p>", "text": "添加 contrib/bloom 模块，实现基于 Bloom 过滤的索引访问方法（Teodor Sigaev、Alexander Korotkov） 这主要是非核心索引访问方法的概念验证，但对搜索许多列的查询本身也可能有用。", "title": "添加 contrib/bloom 模块，实现基于 Bloom 过滤的索引访问方法", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "5f4c3aae6f4e36cb28fa148a9faadf1eeb79e44dfb32343c068239fee23ca4e4", "section_path": ["附加模块"], "commit_groups": [["9ee014fc8"]], "identity_text": "Add contrib/bloom module that implements an index access method based on Bloom filtering (Teodor Sigaev, Alexander Korotkov) This is primarily a proof-of-concept for non-core index access methods, but it could be useful in its own right for queries that search many columns.", "commit_aliases": ["9ee014fc8"], "source_commits": ["9ee014fc8"], "source_entry_id": "9.6.0/changes/183", "db_id": "65d3e99617aabd4167fc8f44c2613740", "patch_ids": ["63fc5d022dbd6c52a9e14ec180de1a76"], "statement_hash": "955a00b729a495dfc0ea02f925a00e1c9b2c06d1aadbc9eae2f2b3882df84faf", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-204cfec2d2651e58", "cves": [], "html": "<p>在 <a href=\"/docs/9.6/cube.html\" title=\"F.9. cube — 多维立方体数据类型\"><code>contrib/cube</code></a> 中，为 cube 引入距离操作符，并支持 cube 列上 GiST 索引中的 kNN 式搜索（Stas Kelvich）</p>", "text": "在 contrib/cube 中，为 cube 引入距离操作符，并支持 cube 列上 GiST 索引中的 kNN 式搜索（Stas Kelvich）", "title": "在 contrib/cube 中，为 cube 引入距离操作符，并支持 cube 列上 GiST 索引中的 kNN 式搜索", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "90c2db43c4ae778c745f9f83fd95334601665a52a16b1f55e56a2104403f670c", "section_path": ["附加模块"], "commit_groups": [["33bd250f6"], ["81ee726d8"]], "identity_text": "In contrib/cube, introduce distance operators for cubes, and support kNN-style searches in GiST indexes on cube columns (Stas Kelvich)", "commit_aliases": ["33bd250f6", "81ee726d8"], "source_commits": ["33bd250f6", "81ee726d8"], "source_entry_id": "9.6.0/changes/184", "db_id": "66ae3002f2fcfcf78afe0e47d2ff83ae", "patch_ids": ["abda0d72dd32515553dfdeea0460e850", "be291ea04e1df8209337d1e93d59379e"], "statement_hash": "8095eb7581a4e970636676b9d22892e582df5070cff9980d549fb9e7e5e65963", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-8b1df5080ef0bb40", "cves": [], "html": "<p>使 <code>contrib/hstore</code> 的 <a href=\"/docs/9.6/hstore.html#HSTORE-FUNC-TABLE\" title=\"表 F.9. hstore 函数\"><code>hstore_to_jsonb_loose()</code></a> 和 <code>hstore_to_json_loose()</code> 函数对什么算数字达成一致（Tom Lane）</p>\n<p>以前 <code>hstore_to_jsonb_loose()</code> 会把数字样子的字符串转换为 <acronym>JSON</acronym> 数字而不是字符串，即使它们不完全匹配 <acronym>JSON</acronym> 的数字语法规范。这与 <code>hstore_to_json_loose()</code> 不一致，因此收紧测试以匹配 <acronym>JSON</acronym> 语法。</p>", "text": "使 contrib/hstore 的 hstore_to_jsonb_loose() 和 hstore_to_json_loose() 函数对什么算数字达成一致（Tom Lane） 以前 hstore_to_jsonb_loose() 会把数字样子的字符串转换为 JSON 数字而不是字符串，即使它们不完全匹配 JSON 的数字语法规范。这与 hstore_to_json_loose() 不一致，因此收紧测试以匹配 JSON 语法。", "title": "使 contrib/hstore 的 hstore_to_jsonb_loose() 和 hstore_to_json_loose() 函数对什么算数字达成一致", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "811fbb98557f511292bfa8f3ec0a11f745452678c2606b54c060f9c69c18bdec", "section_path": ["附加模块"], "commit_groups": [["41d2c081c"]], "identity_text": "Make contrib/hstore's hstore_to_jsonb_loose() and hstore_to_json_loose() functions agree on what is a number (Tom Lane) Previously, hstore_to_jsonb_loose() would convert numeric-looking strings to JSON numbers, rather than strings, even if they did not exactly match the JSON syntax specification for numbers. This was inconsistent with hstore_to_json_loose(), so tighten the test to match the JSON syntax.", "commit_aliases": ["41d2c081c"], "source_commits": ["41d2c081c"], "source_entry_id": "9.6.0/changes/185", "db_id": "57c3a955a88e6877a353e1792c0577eb", "patch_ids": ["3abd1162b7839e777d20cb5a75b9d512"], "statement_hash": "a37df2459c960d844c32224a744a1e4ab246ee6ad55e135b80847235435b7442", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-2b0115fdd1ff0cbc", "cves": [], "html": "<p>为 <a href=\"/docs/9.6/intarray.html\" title=\"F.18. intarray\"><code>contrib/intarray</code></a> 操作符添加选择率估计函数，以改进使用这些操作符的查询的计划（Yury Zhuravlev、Alexander Korotkov）</p>", "text": "为 contrib/intarray 操作符添加选择率估计函数，以改进使用这些操作符的查询的计划（Yury Zhuravlev、Alexander Korotkov）", "title": "为 contrib/intarray 操作符添加选择率估计函数，以改进使用这些操作符的查询的计划", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "62d2098a1d2f86661f5fe67558291a688fc1ef14496322652fbfe425dda46a47", "section_path": ["附加模块"], "commit_groups": [["c6fbe6d6f"]], "identity_text": "Add selectivity estimation functions for contrib/intarray operators to improve plans for queries using those operators (Yury Zhuravlev, Alexander Korotkov)", "commit_aliases": ["c6fbe6d6f"], "source_commits": ["c6fbe6d6f"], "source_entry_id": "9.6.0/changes/186", "db_id": "044ac34156a69bdfd93e35cb76242eaf", "patch_ids": ["0a6fc130b97da48a5e866442c2e04e76"], "statement_hash": "83d7c8366173fa5443a54952a842ca077a8b9eea69169d53ee664a9427fffa51", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-ed244332e9031552", "cves": [], "html": "<p>使 <a href=\"/docs/9.6/pageinspect.html\" title=\"F.22. pageinspect\"><code>contrib/pageinspect</code></a> 的 <code>heap_page_items()</code> 函数显示每个元组中的原始数据，并添加新函数 <code>tuple_data_split()</code> 和 <code>heap_page_item_attrs()</code> 用于检查单个元组字段（Nikolay Shaplov）</p>", "text": "使 contrib/pageinspect 的 heap_page_items() 函数显示每个元组中的原始数据，并添加新函数 tuple_data_split() 和 heap_page_item_attrs() 用于检查单个元组字段（Nikolay Shaplov）", "title": "使 contrib/pageinspect 的 heap_page_items() 函数显示每个元组中的原始数据，并添加新函数 tuple_data_split() 和 heap_page_item_attrs() 用于检查单个元组字段", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "ebfcd2d7a8a1e0067250064b22b03fc7d913831b9aa94d8574c240f7f98e15a9", "section_path": ["附加模块"], "commit_groups": [["d6061f83a"]], "identity_text": "Make contrib/pageinspect's heap_page_items() function show the raw data in each tuple, and add new functions tuple_data_split() and heap_page_item_attrs() for inspection of individual tuple fields (Nikolay Shaplov)", "commit_aliases": ["d6061f83a"], "source_commits": ["d6061f83a"], "source_entry_id": "9.6.0/changes/187", "db_id": "a6d1f16df69322e0864665568d1fb874", "patch_ids": ["78cccc68e779f9c26e41978ca66243f5"], "statement_hash": "f65f031bab977d1598da60b3b95cfb70d7e9bba618d02b6defc25112178aaf77", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e924e5ffce133d91", "cves": [], "html": "<p>为 <a href=\"/docs/9.6/pgcrypto.html\" title=\"F.25. pgcrypto\"><code>contrib/pgcrypto</code></a> 的 <code>pgp_sym_encrypt()</code> 函数添加可选的 <code>S2K</code> 迭代计数参数（Jeff Janes）</p>", "text": "为 contrib/pgcrypto 的 pgp_sym_encrypt() 函数添加可选的 S2K 迭代计数参数（Jeff Janes）", "title": "为 contrib/pgcrypto 的 pgp_sym_encrypt() 函数添加可选的 S2K 迭代计数参数", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "0177a2adeb95f27f2721acffc2cb77720e23d4ec83a5c23143933ea3cfe7c52d", "section_path": ["附加模块"], "commit_groups": [["188f359d3"]], "identity_text": "Add an optional S2K iteration count parameter to contrib/pgcrypto's pgp_sym_encrypt() function (Jeff Janes)", "commit_aliases": ["188f359d3"], "source_commits": ["188f359d3"], "source_entry_id": "9.6.0/changes/188", "db_id": "4a4d5bf2c07734a0d48d2cc70b375983", "patch_ids": ["c8515b907b155f5ec30921ad87d74e68"], "statement_hash": "f96db440de34704fa1a5331bbed92840083dd3d099758bc66372a693d5bb5f0d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-7160e4dffb543bd5", "cves": [], "html": "<p>为 <a href=\"/docs/9.6/pgtrgm.html\" title=\"F.31. pg_trgm\"><code>contrib/pg_trgm</code></a> 添加对<span>“<span>单词相似度</span>”</span>的支持（Alexander Korotkov、Artur Zakirov）</p>\n<p>这些函数和操作符度量一个字符串与另一个字符串中最相似的单个单词之间的相似度。</p>", "text": "为 contrib/pg_trgm 添加对“单词相似度”的支持（Alexander Korotkov、Artur Zakirov） 这些函数和操作符度量一个字符串与另一个字符串中最相似的单个单词之间的相似度。", "title": "为 contrib/pg_trgm 添加对“单词相似度”的支持", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "000b39304c9cbffcacbe29c24c2c6ae7e11d5a8316eceea240628562a94bc8b2", "section_path": ["附加模块"], "commit_groups": [["f576b17cd"]], "identity_text": "Add support for word similarity to contrib/pg_trgm (Alexander Korotkov, Artur Zakirov) These functions and operators measure the similarity between one string and the most similar single word of another string.", "commit_aliases": ["f576b17cd"], "source_commits": ["f576b17cd"], "source_entry_id": "9.6.0/changes/189", "db_id": "54aa6514cbcbcbe19e92837484e396d1", "patch_ids": ["0cfbebe3029becafa3dbbe3b51222afb"], "statement_hash": "9ce20de072488369887b3dde0362a5b8412b3f514dc196593fb3d217a01e372d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-56f49b095fa93f21", "cves": [], "html": "<p>为 <code>contrib/pg_trgm</code> 的相似度阈值添加配置参数 <code>pg_trgm.similarity_threshold</code>（Artur Zakirov）</p>\n<p>此阈值一直可配置，但以前由特殊用途函数 <code>set_limit()</code> 和 <code>show_limit()</code> 控制。它们现在被弃用。</p>", "text": "为 contrib/pg_trgm 的相似度阈值添加配置参数 pg_trgm.similarity_threshold（Artur Zakirov） 此阈值一直可配置，但以前由特殊用途函数 set_limit() 和 show_limit() 控制。它们现在被弃用。", "title": "为 contrib/pg_trgm 的相似度阈值添加配置参数 pg_trgm.similarity_threshold", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "6781fb02ef7b4ad10385aab37fb450793b1ff2fe20238d939304a30ae777a770", "section_path": ["附加模块"], "commit_groups": [["5871b8848"], ["9c852566a"]], "identity_text": "Add configuration parameter pg_trgm.similarity_threshold for contrib/pg_trgm's similarity threshold (Artur Zakirov) This threshold has always been configurable, but formerly it was controlled by special-purpose functions set_limit() and show_limit(). Those are now deprecated.", "commit_aliases": ["5871b8848", "9c852566a"], "source_commits": ["5871b8848", "9c852566a"], "source_entry_id": "9.6.0/changes/190", "db_id": "df31380e0834580ee6e9887bf5ed6441", "patch_ids": ["14364d9be2444094922a5a95c4e38f37", "26443f9474de4ba89162182d3d56d6ba"], "statement_hash": "09248a2e70492ae6a9158656837dced0620ad2aaa9da34d36dad493f2af13269", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-f103ec25e5ee282d", "cves": [], "html": "<p>改进 <code>contrib/pg_trgm</code> 的 GIN 操作符类，加速同时出现常见和罕见键的索引搜索（Jeff Janes）</p>", "text": "改进 contrib/pg_trgm 的 GIN 操作符类，加速同时出现常见和罕见键的索引搜索（Jeff Janes）", "title": "改进 contrib/pg_trgm 的 GIN 操作符类，加速同时出现常见和罕见键的索引搜索", "commits": [], "section": "附加模块", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "8689b470ab4b4e72e88cec37416db94b73e5f6ca3f7b3233028ae0ba0a0acfea", "section_path": ["附加模块"], "commit_groups": [["97f301464"]], "identity_text": "Improve contrib/pg_trgm's GIN operator class to speed up index searches in which both common and rare keys appear (Jeff Janes)", "commit_aliases": ["97f301464"], "source_commits": ["97f301464"], "source_entry_id": "9.6.0/changes/191", "db_id": "5b9591df28114970a4a283e1e18b762f", "patch_ids": ["2f05bd90a9f26ab7dcce4c612795dc23"], "statement_hash": "dfe3d6bada677d71d7874dfcc5ea1c72ddd1913cea5f45256b0e54cf8b275e85", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-d9d6f17d9e1e1ac5", "cves": [], "html": "<p>改进 <code>contrib/pg_trgm</code> GIN 索引中相似度搜索的性能（Christophe Fornaroli）</p>", "text": "改进 contrib/pg_trgm GIN 索引中相似度搜索的性能（Christophe Fornaroli）", "title": "改进 contrib/pg_trgm GIN 索引中相似度搜索的性能", "commits": [], "section": "附加模块", "category": "performance", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "74750d55a901ea9a67e341061492cb8f11997775c14dd7cb991b30b54879a676", "section_path": ["附加模块"], "commit_groups": [["25bfa7efd"]], "identity_text": "Improve performance of similarity searches in contrib/pg_trgm GIN indexes (Christophe Fornaroli)", "commit_aliases": ["25bfa7efd"], "source_commits": ["25bfa7efd"], "source_entry_id": "9.6.0/changes/192", "db_id": "250c55da93b3bdf976b686df8452a2a7", "patch_ids": ["0075cd5dbe01c0bf3da8fceb6e57e1b8"], "statement_hash": "ff1f82439ff10a091b0827b181bf114b7c4269f30d725eca926e06a666b7ccab", "relations": [], "version": "9.6.0", "category_label": "性能改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4a3de36dc89037c3", "cves": [], "html": "<p>添加 <a href=\"/docs/9.6/pgvisibility.html\" title=\"F.32. pg_visibility\"><code>contrib/pg_visibility</code></a> 模块以允许检查表可见性映射（Robert Haas）</p>", "text": "添加 contrib/pg_visibility 模块以允许检查表可见性映射（Robert Haas）", "title": "添加 contrib/pg_visibility 模块以允许检查表可见性映射", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "875523bd9dc3248c5131b63810ada8bf8279631ce8f9812b3d4759381bf58707", "section_path": ["附加模块"], "commit_groups": [["71d05a2c7"], ["ba0a198fb"]], "identity_text": "Add contrib/pg_visibility module to allow examining table visibility maps (Robert Haas)", "commit_aliases": ["71d05a2c7", "ba0a198fb"], "source_commits": ["71d05a2c7", "ba0a198fb"], "source_entry_id": "9.6.0/changes/193", "db_id": "ffda91e9a6d67fbe5e29d1753cbf18cc", "patch_ids": ["a30ebd5ad3eb4a7e604ba7e017d5ecb7", "d7fb4d7edbabfe2836847f45396326c4"], "statement_hash": "0480605e49ef4aaa1aea6d562fc5e10b150cccdc59ed6efb3712a92fd2f6c57f", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4cbc7cccbf207d07", "cves": [], "html": "<p>向 <code>contrib/sslinfo</code> 添加 <a href=\"/docs/9.6/sslinfo.html\" title=\"F.37. sslinfo\"><code>ssl_extension_info()</code></a> 函数，打印当前连接所用 <code>X509</code> 证书中存在的 <acronym>SSL</acronym> 扩展信息（Dmitry Voronin）</p>", "text": "向 contrib/sslinfo 添加 ssl_extension_info() 函数，打印当前连接所用 X509 证书中存在的 SSL 扩展信息（Dmitry Voronin）", "title": "向 contrib/sslinfo 添加 ssl_extension_info() 函数，打印当前连接所用 X509 证书中存在的 SSL 扩展信息", "commits": [], "section": "附加模块", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15", "source_hash": "f23cc3e35949d17f4140c38e8a6ef67515d8109b1e2b2f418b8c06d258b451d8", "section_path": ["附加模块"], "commit_groups": [["49124613f"]], "identity_text": "Add ssl_extension_info() function to contrib/sslinfo, to print information about SSL extensions present in the X509 certificate used for the current connection (Dmitry Voronin)", "commit_aliases": ["49124613f"], "source_commits": ["49124613f"], "source_entry_id": "9.6.0/changes/194", "db_id": "cb60565363bd377b713b647cdd3693f6", "patch_ids": ["4c6a14d6416551a086c462622f28077a"], "statement_hash": "b66cbe28782ca2c984df612f6bd17dd9273e2e066b3ad4d6d3216e07d7313666", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-7234158e39b5c6ff", "cves": [], "html": "<p>如果扩展在外部服务器的选项中被列入白名单，允许扩展提供的操作符和函数被发送到远程执行（Paul Ramsey）</p>\n<p>当已知远程数据库中存在兼容版本的扩展时，用户可以启用此特性。它允许更高效地执行涉及扩展操作符的查询。</p>", "text": "如果扩展在外部服务器的选项中被列入白名单，允许扩展提供的操作符和函数被发送到远程执行（Paul Ramsey） 当已知远程数据库中存在兼容版本的扩展时，用户可以启用此特性。它允许更高效地执行涉及扩展操作符的查询。", "title": "如果扩展在外部服务器的选项中被列入白名单，允许扩展提供的操作符和函数被发送到远程执行", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "b1750b6d0c3360193337c032c6c8580e4f2e5f9844b53124af76b270748717ce", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["d89494166"]], "identity_text": "Allow extension-provided operators and functions to be sent for remote execution, if the extension is whitelisted in the foreign server's options (Paul Ramsey) Users can enable this feature when the extension is known to exist in a compatible version in the remote database. It allows more efficient execution of queries involving extension operators.", "commit_aliases": ["d89494166"], "source_commits": ["d89494166"], "source_entry_id": "9.6.0/changes/195", "db_id": "c4578d22874d856fa735e46928c4b5e5", "patch_ids": ["4fd7f051487035c59aa72d2bf40c825d"], "statement_hash": "17acb721c1c3ef618040a116de6cfa05d7955473edb37995e6bcf684d0dadb4d", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-a409185d42636fcd", "cves": [], "html": "<p>考虑在远程服务器上执行排序（Ashutosh Bapat）</p>", "text": "考虑在远程服务器上执行排序（Ashutosh Bapat）", "title": "考虑在远程服务器上执行排序", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "dd4b256c6ba805d8c6da38120a0daaa527baf1606e4eb90b9bda0733fb637033", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["ccd8f9792"], ["f18c944b6"]], "identity_text": "Consider performing sorts on the remote server (Ashutosh Bapat)", "commit_aliases": ["ccd8f9792", "f18c944b6"], "source_commits": ["ccd8f9792", "f18c944b6"], "source_entry_id": "9.6.0/changes/196", "db_id": "055434100a08ae79566cc1e36ce69ba0", "patch_ids": ["8e0521b5877c9d27c9dca0d4d0741a2c", "908026520dd9f586b7806956bc3591be"], "statement_hash": "988446c69735d5b5dc09ea5e6a624d1d53b079dd9194e87e07c1ed3dcc7f4579", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-810b7099b3f190bd", "cves": [], "html": "<p>考虑在远程服务器上执行连接（Shigeru Hanada、Ashutosh Bapat）</p>", "text": "考虑在远程服务器上执行连接（Shigeru Hanada、Ashutosh Bapat）", "title": "考虑在远程服务器上执行连接", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "59f667f12e6717bed803fa6b31cd61ecb6e22d947d419c668389cfc96cee59d8", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["aa09cd242"], ["e4106b252"]], "identity_text": "Consider performing joins on the remote server (Shigeru Hanada, Ashutosh Bapat)", "commit_aliases": ["aa09cd242", "e4106b252"], "source_commits": ["aa09cd242", "e4106b252"], "source_entry_id": "9.6.0/changes/197", "db_id": "285c761df9e21f4aa666447f243c7bd4", "patch_ids": ["a37a45b3cc21f731a9a72b873bf142a2", "dc4a8a80ab6e1c396a3e33ee665833d4"], "statement_hash": "694b8e7bcbb79087e060ef3970d1729a3855e87df47c8ef214ea85f484bd2147", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-4cd528f015128bfb", "cves": [], "html": "<p>在可行之处完全在远程服务器上执行 <code>UPDATE</code> 或 <code>DELETE</code>（Etsuro Fujita）</p>\n<p>以前远程更新涉及发送 <code>SELECT FOR UPDATE</code> 命令然后逐个更新或删除选中的行。虽然如果操作需要任何本地处理那仍然必要，但如果查询的所有元素都可以安全地发送到远程服务器，现在可以远程完成。</p>", "text": "在可行之处完全在远程服务器上执行 UPDATE 或 DELETE（Etsuro Fujita） 以前远程更新涉及发送 SELECT FOR UPDATE 命令然后逐个更新或删除选中的行。虽然如果操作需要任何本地处理那仍然必要，但如果查询的所有元素都可以安全地发送到远程服务器，现在可以远程完成。", "title": "在可行之处完全在远程服务器上执行 UPDATE 或 DELETE", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "24bda9ac6b14791ad633b118b10c514e94b46092f3f4289d003c9e3d0d1fd4fb", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["0bf3ae88a"]], "identity_text": "When feasible, perform UPDATE or DELETE entirely on the remote server (Etsuro Fujita) Formerly, remote updates involved sending a SELECT FOR UPDATE command and then updating or deleting the selected rows one-by-one. While that is still necessary if the operation requires any local processing, it can now be done remotely if all elements of the query are safe to send to the remote server.", "commit_aliases": ["0bf3ae88a"], "source_commits": ["0bf3ae88a"], "source_entry_id": "9.6.0/changes/198", "db_id": "2e0973867acfeef348a599189a8bb3c7", "patch_ids": ["5a36e5a15b72a1bc2d2fb282cc577866"], "statement_hash": "9b0a0578bf7894edfcbb587a8b24b2e5efe9bc9793b8e2510e2fe7699bd9122b", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e58b22dfd46850d7", "cves": [], "html": "<p>允许把获取大小设置为服务器或表选项（Corey Huinker）</p>\n<p>以前 <code>postgres_fdw</code> 总是从远程查询每次获取 100 行；现在该行为可配置。</p>", "text": "允许把获取大小设置为服务器或表选项（Corey Huinker） 以前 postgres_fdw 总是从远程查询每次获取 100 行；现在该行为可配置。", "title": "允许把获取大小设置为服务器或表选项", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "8ed489b492c73014a599ab54f050dd76b6090dce31146b512a59794a1cede28e", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["dc203dc3a"]], "identity_text": "Allow the fetch size to be set as a server or table option (Corey Huinker) Formerly, postgres_fdw always fetched 100 rows at a time from remote queries; now that behavior is configurable.", "commit_aliases": ["dc203dc3a"], "source_commits": ["dc203dc3a"], "source_entry_id": "9.6.0/changes/199", "db_id": "2e3bfde72456761fa2ebb7176e1627d6", "patch_ids": ["262a25a954c7547f16b2dacfe69244f3"], "statement_hash": "20265f2813b207c9b6a2410d6328b9c16bd84d80ba5b56f32d6ce8fde0dc5681", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-e20905eb6140cbc7", "cves": [], "html": "<p>对全部映射到同一远程用户的本地用户 ID 使用单一外部服务器连接（Ashutosh Bapat）</p>", "text": "对全部映射到同一远程用户的本地用户 ID 使用单一外部服务器连接（Ashutosh Bapat）", "title": "对全部映射到同一远程用户的本地用户 ID 使用单一外部服务器连接", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "e780f8183c29ebe897416b3626e1c461ae805afb56de256dd6fb25adffbe085e", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["96198d94c"]], "identity_text": "Use a single foreign-server connection for local user IDs that all map to the same remote user (Ashutosh Bapat)", "commit_aliases": ["96198d94c"], "source_commits": ["96198d94c"], "source_entry_id": "9.6.0/changes/200", "db_id": "bafce85fbfd2335329267f50f58f9b2f", "patch_ids": ["69469ab5d59e3664c3232f3b0c5cf159"], "statement_hash": "17013ec01cb413274c6c392dce1411285dcb92e8bb4a4f7659114bba83a1a429", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.6.0-c23a72f51cadfedd", "cves": [], "html": "<p>把查询取消请求传输到远程服务器（Michael Paquier、Etsuro Fujita）</p>\n<p>以前本地查询取消请求不会导致已发送的远程查询提前终止。</p>", "text": "把查询取消请求传输到远程服务器（Michael Paquier、Etsuro Fujita） 以前本地查询取消请求不会导致已发送的远程查询提前终止。", "title": "把查询取消请求传输到远程服务器", "commits": [], "section": "附加模块 / postgres_fdw", "category": "feature", "source_url": "/docs/release/9.6.0/#id-1.11.6.29.5.15.3", "source_hash": "b25f6b4665aa366bf5bc9bcceffa59327d9aef8b16922a41a6ec5fbe7bcfebf2", "section_path": ["附加模块", "postgres_fdw"], "commit_groups": [["1b812afb0"], ["f039eaac7"]], "identity_text": "Transmit query cancellation requests to the remote server (Michael Paquier, Etsuro Fujita) Previously, a local query cancellation request did not cause an already-sent remote query to terminate early.", "commit_aliases": ["1b812afb0", "f039eaac7"], "source_commits": ["1b812afb0", "f039eaac7"], "source_entry_id": "9.6.0/changes/201", "db_id": "19c853c7088a13ef89a354c426345338", "patch_ids": ["229d1d438509a06e397393fe78e485c6", "e261523b424157961096e123edcafc40"], "statement_hash": "2a2a12fdbd0cb4fc80ad03bb0acae36ea6c02112b00958ff6624b12d8e8b141e", "relations": [], "version": "9.6.0", "category_label": "新功能", "also_in": [], "variants": [], "related_changes": []}]}], "stats": [{"key": "all", "label": "全部变更", "count": 214}, {"key": "feature", "label": "新功能", "count": 169}, {"key": "bugfix", "label": "BUG 修复", "count": 6}, {"key": "security", "label": "安全相关", "count": 0}, {"key": "performance", "label": "性能改进", "count": 26}, {"key": "compatibility", "label": "兼容性变化", "count": 13}, {"key": "improvement", "label": "其他改进", "count": 0}], "total": 214, "release_count": 1, "cross_major": false, "cve_count": 0, "cves": [], "cve_available": true, "remaining_cves": [], "security_regressions": [], "warnings": [], "candidate_count": 214, "already_in_source_count": 0, "duplicate_count": 0, "excluded_count": 0, "exclusions": [], "source_as_of": "2026-09-26", "security_as_of": "2026-09-26"}