{"format": 1, "mode": "release", "from_release": null, "to_release": {"date": "2012-08-17", "build": "9.0.9", "major": "9.0", "minor": 9, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.9", "eol_date": "2015-10-08", "date_text": "2012-08-17", "supported": false, "manual_url": "/docs/9.0/release-9-0-9.html", "source_url": "/docs/release/9.0.9/", "entry_count": 23, "placeholder": false, "content_hash": "fd2d6646357f5f0e069bcd4b7951c4d84618222e8804d0ef3ea5eda5725c303d", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 23, "doc_loaded_at": "2026-09-26T02:56:48.570247", "migration_html": "<p>对于运行 9.0.X 的用户，不需要进行转储/恢复。</p>\n<p>不过，如果你是从早于 9.0.6 的版本升级，请参见<a href=\"/docs/9.0/release-9-0-6.html\" title=\"E.18. 版本 9.0.6\">第 E.18 节</a>。</p>", "compatibility_count": 0, "label": "9.0.9", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5157, "support_days": -4010}, "groups": [{"date": "2012-08-17", "build": "9.0.9", "major": "9.0", "minor": 9, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.9", "eol_date": "2015-10-08", "date_text": "2012-08-17", "supported": false, "manual_url": "/docs/9.0/release-9-0-9.html", "source_url": "/docs/release/9.0.9/", "entry_count": 23, "placeholder": false, "content_hash": "fd2d6646357f5f0e069bcd4b7951c4d84618222e8804d0ef3ea5eda5725c303d", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 23, "doc_loaded_at": "2026-09-26T02:56:48.570247", "migration_html": "<p>对于运行 9.0.X 的用户，不需要进行转储/恢复。</p>\n<p>不过，如果你是从早于 9.0.6 的版本升级，请参见<a href=\"/docs/9.0/release-9-0-6.html\" title=\"E.18. 版本 9.0.6\">第 E.18 节</a>。</p>", "compatibility_count": 0, "label": "9.0.9", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5157, "support_days": -4010, "entries": [{"id": "9.0.9-f89140ac431117c2", "cves": ["CVE-2012-3489"], "html": "<p>防止通过 XML 实体引用访问外部文件/URL（Noah Misch、Tom Lane）</p>\n<p><code>xml_parse()</code> 会尝试按需获取外部文件或 URL 来解析 XML 值中的 DTD 和实体引用，从而使无特权数据库用户能够尝试以数据库服务器的权限获取数据。虽然外部数据不会直接返回给用户，但如果数据不能解析为有效 XML，其部分内容可能暴露在错误消息中；而且无论如何，仅仅能够检查文件是否存在对攻击者就可能有用。（CVE-2012-3489）</p>", "text": "防止通过 XML 实体引用访问外部文件/URL（Noah Misch、Tom Lane） xml_parse() 会尝试按需获取外部文件或 URL 来解析 XML 值中的 DTD 和实体引用，从而使无特权数据库用户能够尝试以数据库服务器的权限获取数据。虽然外部数据不会直接返回给用户，但如果数据不能解析为有效 XML，其部分内容可能暴露在错误消息中；而且无论如何，仅仅能够检查文件是否存在对攻击者就可能有用。（CVE-2012-3489）", "title": "防止通过 XML 实体引用访问外部文件/URL", "commits": [], "section": "变更", "category": "security", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "a6c80934ce24d340fa0afa4985a35e24dfe0625644701cc4bf2f28e61b7a9e14", "section_path": ["变更"], "commit_groups": [], "identity_text": "Prevent access to external files/URLs via XML entity references (Noah Misch, Tom Lane) xml_parse() would attempt to fetch external files or URLs as needed to resolve DTD and entity references in an XML value, thus allowing unprivileged database users to attempt to fetch data with the privileges of the database server. While the external data wouldn't get returned directly to the user, portions of it could be exposed in error messages if the data didn't parse as valid XML; and in any case the mere ability to check existence of a file might be useful to an attacker. (CVE-2012-3489)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/001", "db_id": "35d8516b9dd2bd8b383f3f832cd004f1", "patch_ids": [], "statement_hash": "04398600497e62c9494bc7b13d05c6dcca70d384363854edf5bbb21657a2deee", "relations": [{"rule": 2, "type": "equivalent", "target": "4992796939ce63770dd3b50b3db0a635", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "04398600497e62c9494bc7b13d05c6dcca70d384363854edf5bbb21657a2deee"}}], "version": "9.0.9", "category_label": "安全相关", "also_in": [], "variants": [], "related_changes": [{"db_id": "4992796939ce63770dd3b50b3db0a635", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "防止通过 XML 实体引用访问外部文件/URL", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "04398600497e62c9494bc7b13d05c6dcca70d384363854edf5bbb21657a2deee"}, "url": "/docs/compare/?release=9.1.5#9.1.5-f89140ac431117c2", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-2be6b2938ecf24c1", "cves": ["CVE-2012-3488", "CVE-2012-3489"], "html": "<p>防止通过 <code>contrib/xml2</code> 的 <code>xslt_process()</code> 访问外部文件/URL（Peter Eisentraut）</p>\n<p><span>libxslt</span> 提供通过样式表命令读写文件和 URL 的能力，从而使无特权数据库用户能够以数据库服务器的权限读写数据。现通过正确使用 <span>libxslt</span> 的安全选项禁用该能力。（CVE-2012-3488）</p>\n<p>此外，移除了 <code>xslt_process()</code> 从外部文件/URL 获取文档和样式表的能力。虽然这是一个有记载的<span>“<span>特性</span>”</span>，但长期以来被认为是个坏主意。CVE-2012-3489 的修复破坏了该能力，与其花费精力修复它，我们干脆将其移除。</p>", "text": "防止通过 contrib/xml2 的 xslt_process() 访问外部文件/URL（Peter Eisentraut） libxslt 提供通过样式表命令读写文件和 URL 的能力，从而使无特权数据库用户能够以数据库服务器的权限读写数据。现通过正确使用 libxslt 的安全选项禁用该能力。（CVE-2012-3488） 此外，移除了 xslt_process() 从外部文件/URL 获取文档和样式表的能力。虽然这是一个有记载的“特性”，但长期以来被认为是个坏主意。CVE-2012-3489 的修复破坏了该能力，与其花费精力修复它，我们干脆将其移除。", "title": "防止通过 contrib/xml2 的 xslt_process() 访问外部文件/URL", "commits": [], "section": "变更", "category": "security", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "bf62fb83633cffb656c67c988ca561e6aa2d7c996d09e09d62706d1dc95c2d57", "section_path": ["变更"], "commit_groups": [], "identity_text": "Prevent access to external files/URLs via contrib/xml2's xslt_process() (Peter Eisentraut) libxslt offers the ability to read and write both files and URLs through stylesheet commands, thus allowing unprivileged database users to both read and write data with the privileges of the database server. Disable that through proper use of libxslt's security options. (CVE-2012-3488) Also, remove xslt_process()'s ability to fetch documents and stylesheets from external files/URLs. While this was a documented feature, it was long regarded as a bad idea. The fix for CVE-2012-3489 broke that capability, and rather than expend effort on trying to fix it, we're just going to summarily remove it.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/002", "db_id": "abcad5d463e33ed3276c542686c82a47", "patch_ids": [], "statement_hash": "3e0ae43c5a564e90459affb1a9add04e838de33ca4528012361ac3d08d63c72b", "relations": [{"rule": 2, "type": "equivalent", "target": "887d3d76bac74df3f027be31bd7a07b3", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3e0ae43c5a564e90459affb1a9add04e838de33ca4528012361ac3d08d63c72b"}}], "version": "9.0.9", "category_label": "安全相关", "also_in": [], "variants": [], "related_changes": [{"db_id": "887d3d76bac74df3f027be31bd7a07b3", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "防止通过 contrib/xml2 的 xslt_process() 访问外部文件/URL", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3e0ae43c5a564e90459affb1a9add04e838de33ca4528012361ac3d08d63c72b"}, "url": "/docs/compare/?release=9.1.5#9.1.5-2be6b2938ecf24c1", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-4df4c0850b2d0206", "cves": [], "html": "<p>防止 btree 索引页被过早回收（Noah Misch）</p>\n<p>当我们允许只读事务跳过分配 XID 时，引入了已删除 btree 页在只读事务仍在访问它时就被回收的可能性。这会导致错误的索引搜索结果。由于时序要求，这种错误在实际中发生的概率似乎很低，但仍应修复。</p>", "text": "防止 btree 索引页被过早回收（Noah Misch） 当我们允许只读事务跳过分配 XID 时，引入了已删除 btree 页在只读事务仍在访问它时就被回收的可能性。这会导致错误的索引搜索结果。由于时序要求，这种错误在实际中发生的概率似乎很低，但仍应修复。", "title": "防止 btree 索引页被过早回收", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "143bd3621f8904490904efdc96eea5620bf4242c01017e726244d289400995de", "section_path": ["变更"], "commit_groups": [], "identity_text": "Prevent too-early recycling of btree index pages (Noah Misch) When we allowed read-only transactions to skip assigning XIDs, we introduced the possibility that a deleted btree page could be recycled while a read-only transaction was still in flight to it. This would result in incorrect index search results. The probability of such an error occurring in the field seems very low because of the timing requirements, but nonetheless it should be fixed.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/003", "db_id": "b153a4cf63fb975902cfb36655588ab0", "patch_ids": [], "statement_hash": "9376e2480687801694aeb8b7494f7b1ca6a24bd8923ae61b9d76bfcfff194d7d", "relations": [{"rule": 2, "type": "equivalent", "target": "07ead3a6bded50621943d455566a3a9c", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "9376e2480687801694aeb8b7494f7b1ca6a24bd8923ae61b9d76bfcfff194d7d"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "07ead3a6bded50621943d455566a3a9c", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "防止 btree 索引页被过早回收", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "9376e2480687801694aeb8b7494f7b1ca6a24bd8923ae61b9d76bfcfff194d7d"}, "url": "/docs/compare/?release=9.1.5#9.1.5-4df4c0850b2d0206", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-93756539a5c962ac", "cves": [], "html": "<p>修复新创建或重置序列的崩溃安全缺陷（Tom Lane）</p>\n<p>如果在新创建或重置的序列上执行了 <code>ALTER SEQUENCE</code>，然后恰好对它调用了一次 <code>nextval()</code>，随后服务器崩溃，WAL 重放会把序列恢复到看起来没有执行过 <code>nextval()</code> 的状态，从而使下一个 <code>nextval()</code> 调用再次返回第一个序列值。这种情况尤其可能出现在 <code>serial</code> 列上，因为创建 serial 列的序列包含一个 <code>ALTER SEQUENCE OWNED BY</code> 步骤。</p>", "text": "修复新创建或重置序列的崩溃安全缺陷（Tom Lane） 如果在新创建或重置的序列上执行了 ALTER SEQUENCE，然后恰好对它调用了一次 nextval()，随后服务器崩溃，WAL 重放会把序列恢复到看起来没有执行过 nextval() 的状态，从而使下一个 nextval() 调用再次返回第一个序列值。这种情况尤其可能出现在 serial 列上，因为创建 serial 列的序列包含一个 ALTER SEQUENCE OWNED BY 步骤。", "title": "修复新创建或重置序列的崩溃安全缺陷", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "0c9d564d3a42581cfe9aa32142c3d26fe9447b357092bd462a6ef14545d0b128", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix crash-safety bug with newly-created-or-reset sequences (Tom Lane) If ALTER SEQUENCE was executed on a freshly created or reset sequence, and then precisely one nextval() call was made on it, and then the server crashed, WAL replay would restore the sequence to a state in which it appeared that no nextval() had been done, thus allowing the first sequence value to be returned again by the next nextval() call. In particular this could manifest for serial columns, since creation of a serial column's sequence includes an ALTER SEQUENCE OWNED BY step.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/004", "db_id": "4589a7aaec7c7e391d33db5142a4ef24", "patch_ids": [], "statement_hash": "6e14802e83a411f58c11ff7310b4f0c6b9e38de1debf6276765865b3d5801efa", "relations": [{"rule": 2, "type": "equivalent", "target": "cb046f0275d94be401cc40dfc75c9b22", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6e14802e83a411f58c11ff7310b4f0c6b9e38de1debf6276765865b3d5801efa"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "cb046f0275d94be401cc40dfc75c9b22", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复新创建或重置序列的崩溃安全缺陷", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6e14802e83a411f58c11ff7310b4f0c6b9e38de1debf6276765865b3d5801efa"}, "url": "/docs/compare/?release=9.1.5#9.1.5-93756539a5c962ac", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-6e29409d8a139529", "cves": [], "html": "<p>修复 <code>txid_current()</code>，使其在非热备下报告正确的纪元（epoch）（Heikki Linnakangas）</p>\n<p>这修复了上一个小版本引入的退化。</p>", "text": "修复 txid_current()，使其在非热备下报告正确的纪元（epoch）（Heikki Linnakangas） 这修复了上一个小版本引入的退化。", "title": "修复 txid_current()，使其在非热备下报告正确的纪元（epoch）", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "76cdacdf5c3f091e33d76201bd37bf4870512fb9765f59654f6aa4aa219ba678", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix txid_current() to report the correct epoch when not in hot standby (Heikki Linnakangas) This fixes a regression introduced in the previous minor release.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/005", "db_id": "9041f612b14ba62621d965c6e2f631a2", "patch_ids": [], "statement_hash": "36cabc451de4fa9e1bfcc97cc24fd968191aa13fcd67c5bab1dd18059e9ad3bf", "relations": [{"rule": 2, "type": "equivalent", "target": "a067552706629f50b1c9e991d724f6b1", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "36cabc451de4fa9e1bfcc97cc24fd968191aa13fcd67c5bab1dd18059e9ad3bf"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "a067552706629f50b1c9e991d724f6b1", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复 txid_current()，使其在非热备下报告正确的纪元（epoch）", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "36cabc451de4fa9e1bfcc97cc24fd968191aa13fcd67c5bab1dd18059e9ad3bf"}, "url": "/docs/compare/?release=9.1.5#9.1.5-6e29409d8a139529", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-b1024964475d5c38", "cves": [], "html": "<p>修复主库事务有大量子事务时热备启动的缺陷（Andres Freund）</p>\n<p>这一失误导致报告为 <span>“<span>out-of-order XID insertion in KnownAssignedXids</span>”</span> 的失败。</p>", "text": "修复主库事务有大量子事务时热备启动的缺陷（Andres Freund） 这一失误导致报告为 “out-of-order XID insertion in KnownAssignedXids” 的失败。", "title": "修复主库事务有大量子事务时热备启动的缺陷", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "670702f64ada41d7bc53e87ded43a60a8c4ef243b26c9f11f5ac73bbee0c2e70", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix bug in startup of Hot Standby when a master transaction has many subtransactions (Andres Freund) This mistake led to failures reported as out-of-order XID insertion in KnownAssignedXids.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/006", "db_id": "80bcd213614b69d13571b755eaeb9ab9", "patch_ids": [], "statement_hash": "328c792f75844b3385c7fab8976ad00ebdf7ded73058b0124e6a6c34be38ddde", "relations": [{"rule": 2, "type": "equivalent", "target": "d74cd45279f701529aa637d37cd4d856", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "328c792f75844b3385c7fab8976ad00ebdf7ded73058b0124e6a6c34be38ddde"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "d74cd45279f701529aa637d37cd4d856", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复主库事务有大量子事务时热备启动的缺陷", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "328c792f75844b3385c7fab8976ad00ebdf7ded73058b0124e6a6c34be38ddde"}, "url": "/docs/compare/?release=9.1.5#9.1.5-b1024964475d5c38", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-e11d47416dcf56cd", "cves": [], "html": "<p>确保 <code>pg_start_backup()</code> 之后对 <code>backup_label</code> 文件执行 fsync（Dave Kerr）</p>", "text": "确保 pg_start_backup() 之后对 backup_label 文件执行 fsync（Dave Kerr）", "title": "确保 pg_start_backup() 之后对 backup_label 文件执行 fsync", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "34b812ba86d602b58d79286ac89386f3ecf3c02d870d30cd21d315c1497189e7", "section_path": ["变更"], "commit_groups": [], "identity_text": "Ensure the backup_label file is fsync'd after pg_start_backup() (Dave Kerr)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/007", "db_id": "012fd0aa470a4c7b91229a732ccb6a2f", "patch_ids": [], "statement_hash": "57441490bb924e29d31fb5c8020e544ecd25c8594dba69bc38344d1adfaa530c", "relations": [{"rule": 2, "type": "equivalent", "target": "48a9d35f9db305fa37dc33287d6b8957", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "57441490bb924e29d31fb5c8020e544ecd25c8594dba69bc38344d1adfaa530c"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "48a9d35f9db305fa37dc33287d6b8957", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "确保 pg_start_backup() 之后对 backup_label 文件执行 fsync", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "57441490bb924e29d31fb5c8020e544ecd25c8594dba69bc38344d1adfaa530c"}, "url": "/docs/compare/?release=9.1.5#9.1.5-e11d47416dcf56cd", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-e7772098aee6da6b", "cves": [], "html": "<p>修复 walsender 进程中的超时处理（Tom Lane）</p>\n<p>WAL 发送端后台进程疏于建立 <span>SIGALRM</span> 处理程序，这意味着在某些应发生超时的极端情况下它们会永远等待。</p>", "text": "修复 walsender 进程中的超时处理（Tom Lane） WAL 发送端后台进程疏于建立 SIGALRM 处理程序，这意味着在某些应发生超时的极端情况下它们会永远等待。", "title": "修复 walsender 进程中的超时处理", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "b33ca10e6ae8f6bb58111050c8ef4cb3f888f0a8c068cd2c9444e0854b113de1", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix timeout handling in walsender processes (Tom Lane) WAL sender background processes neglected to establish a SIGALRM handler, meaning they would wait forever in some corner cases where a timeout ought to happen.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/008", "db_id": "2023e5354e16641f20d57c327ece2f71", "patch_ids": [], "statement_hash": "1c415476b1fad6885e0d64939e780f43b405489c8ba3711e85f9e0bec1ebb5ce", "relations": [{"rule": 2, "type": "equivalent", "target": "b5635c171f4a52e8f6126a150f3dce44", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "1c415476b1fad6885e0d64939e780f43b405489c8ba3711e85f9e0bec1ebb5ce"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "b5635c171f4a52e8f6126a150f3dce44", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复 walsender 进程中的超时处理", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "1c415476b1fad6885e0d64939e780f43b405489c8ba3711e85f9e0bec1ebb5ce"}, "url": "/docs/compare/?release=9.1.5#9.1.5-e7772098aee6da6b", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-35ce3c86be5945c1", "cves": [], "html": "<p>回移植压缩 fsync 请求队列的 9.1 改进（Robert Haas）</p>\n<p>这改进了检查点期间的性能。9.1 的变更已经过足够的实际测试，看起来可以安全回移植。</p>", "text": "回移植压缩 fsync 请求队列的 9.1 改进（Robert Haas） 这改进了检查点期间的性能。9.1 的变更已经过足够的实际测试，看起来可以安全回移植。", "title": "回移植压缩 fsync 请求队列的 9.1 改进", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "e0c588137e071135eae04967274983516ac4fb77f599823b900434804894fd8a", "section_path": ["变更"], "commit_groups": [], "identity_text": "Back-patch 9.1 improvement to compress the fsync request queue (Robert Haas) This improves performance during checkpoints. The 9.1 change has now seen enough field testing to seem safe to back-patch.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/009", "db_id": "fe50abc813f8460e858235da3371ad25", "patch_ids": [], "statement_hash": "9a8aa52a3fe78daa834a26c4c0f96a10c2f01bfc17e7d98902936ca75a507990", "relations": [], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.9-dc2a0cc84cf2f56b", "cves": [], "html": "<p>修复 <code>LISTEN</code>/<code>NOTIFY</code>，使其更好地应对 I/O 问题（例如磁盘空间耗尽）（Tom Lane）</p>\n<p>写入失败之后，所有后续发送更多 <code>NOTIFY</code> 消息的尝试都会失败，并显示诸如 <span>“<span>Could not read from file \"pg_notify/<em><code>nnnn</code></em>\" at offset <em><code>nnnnn</code></em>: Success</span>”</span> 的消息。</p>", "text": "修复 LISTEN/NOTIFY，使其更好地应对 I/O 问题（例如磁盘空间耗尽）（Tom Lane） 写入失败之后，所有后续发送更多 NOTIFY 消息的尝试都会失败，并显示诸如 “Could not read from file \"pg_notify/nnnn\" at offset nnnnn: Success” 的消息。", "title": "修复 LISTEN/NOTIFY，使其更好地应对 I/O 问题（例如磁盘空间耗尽）", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "9aed13cd301571f58956bf797589bdf41a56438bfe537b1256fe6d766d35888b", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix LISTEN/NOTIFY to cope better with I/O problems, such as out of disk space (Tom Lane) After a write failure, all subsequent attempts to send more NOTIFY messages would fail with messages like Could not read from file \"pg_notify/nnnn\" at offset nnnnn: Success.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/010", "db_id": "3158a61fbdea6a04314ac47c9bf7f620", "patch_ids": [], "statement_hash": "2d2020798c1edede37e5f28fe629fe1d824aedda9d228b85e75a95e4c22ddfe5", "relations": [{"rule": 2, "type": "equivalent", "target": "5f21a6ef115d600e1e7ba8cc06b62d8f", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "2d2020798c1edede37e5f28fe629fe1d824aedda9d228b85e75a95e4c22ddfe5"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "5f21a6ef115d600e1e7ba8cc06b62d8f", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复 LISTEN/NOTIFY，使其更好地应对 I/O 问题（例如磁盘空间耗尽）", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "2d2020798c1edede37e5f28fe629fe1d824aedda9d228b85e75a95e4c22ddfe5"}, "url": "/docs/compare/?release=9.1.5#9.1.5-dc2a0cc84cf2f56b", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-a102fcf87dd6d77b", "cves": [], "html": "<p>只允许被直接阻塞的进程自动取消自动清理（Tom Lane）</p>\n<p>原始编码在某些情况下可能允许不一致的行为；特别是自动清理可能在不足 <code>deadlock_timeout</code> 宽限期之后就被取消。</p>", "text": "只允许被直接阻塞的进程自动取消自动清理（Tom Lane） 原始编码在某些情况下可能允许不一致的行为；特别是自动清理可能在不足 deadlock_timeout 宽限期之后就被取消。", "title": "只允许被直接阻塞的进程自动取消自动清理", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "404e89d8455e25494afb6c3e13169cba227dfa2025350fe23aff4ca1dc142a0e", "section_path": ["变更"], "commit_groups": [], "identity_text": "Only allow autovacuum to be auto-canceled by a directly blocked process (Tom Lane) The original coding could allow inconsistent behavior in some cases; in particular, an autovacuum could get canceled after less than deadlock_timeout grace period.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/011", "db_id": "103446aac3e3f017add1249c1e455767", "patch_ids": [], "statement_hash": "6e1539dc1dba826d8f8080f236fcdefe4d67d6d75b7e2107a8088d4915efa718", "relations": [{"rule": 2, "type": "equivalent", "target": "c8c37fa6986136f15a3210d8d923724c", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6e1539dc1dba826d8f8080f236fcdefe4d67d6d75b7e2107a8088d4915efa718"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "c8c37fa6986136f15a3210d8d923724c", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "只允许被直接阻塞的进程自动取消自动清理", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6e1539dc1dba826d8f8080f236fcdefe4d67d6d75b7e2107a8088d4915efa718"}, "url": "/docs/compare/?release=9.1.5#9.1.5-a102fcf87dd6d77b", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-d6848965f05bea10", "cves": [], "html": "<p>改进自动清理取消的日志记录（Robert Haas）</p>", "text": "改进自动清理取消的日志记录（Robert Haas）", "title": "改进自动清理取消的日志记录", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "6e597de1ea2ef8a8fe3bb6373b26a8eca0add4add863aadabe30886dbeed83fa", "section_path": ["变更"], "commit_groups": [], "identity_text": "Improve logging of autovacuum cancels (Robert Haas)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/012", "db_id": "b6ce52c9d02da958e2e4c990d4e85c30", "patch_ids": [], "statement_hash": "f0a7a1e4f1d2143bb0d016bbe28b789cc8c48b97b31ad90e3e24f9bb4e70affd", "relations": [{"rule": 2, "type": "equivalent", "target": "fcca657b594088becba32ddbc6599af7", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "f0a7a1e4f1d2143bb0d016bbe28b789cc8c48b97b31ad90e3e24f9bb4e70affd"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "fcca657b594088becba32ddbc6599af7", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "改进自动清理取消的日志记录", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "f0a7a1e4f1d2143bb0d016bbe28b789cc8c48b97b31ad90e3e24f9bb4e70affd"}, "url": "/docs/compare/?release=9.1.5#9.1.5-d6848965f05bea10", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-761f57bcfc82f22c", "cves": [], "html": "<p>修复日志收集器，使 <code>log_truncate_on_rotation</code> 在服务器启动后的第一次日志轮转期间就能工作（Tom Lane）</p>", "text": "修复日志收集器，使 log_truncate_on_rotation 在服务器启动后的第一次日志轮转期间就能工作（Tom Lane）", "title": "修复日志收集器，使 log_truncate_on_rotation 在服务器启动后的第一次日志轮转期间就能工作", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "176f36a3bd115c5866897aa8192c7de1e9474f7fe58b4c1f6e65ba56bfebbedf", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix log collector so that log_truncate_on_rotation works during the very first log rotation after server start (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/013", "db_id": "95da9af1253fc1ff9b3608f5f1118524", "patch_ids": [], "statement_hash": "4b1e5979dbb78cbb7f0e96362c68ffbeb53cbe186b4032bc6d6b7a8178cc9950", "relations": [{"rule": 2, "type": "equivalent", "target": "2e8994b7650c6b40c025f6fc4431e2eb", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "4b1e5979dbb78cbb7f0e96362c68ffbeb53cbe186b4032bc6d6b7a8178cc9950"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "2e8994b7650c6b40c025f6fc4431e2eb", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复日志收集器，使 log_truncate_on_rotation 在服务器启动后的第一次日志轮转期间就能工作", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "4b1e5979dbb78cbb7f0e96362c68ffbeb53cbe186b4032bc6d6b7a8178cc9950"}, "url": "/docs/compare/?release=9.1.5#9.1.5-761f57bcfc82f22c", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-a74dfdc74b9b6fce", "cves": [], "html": "<p>修复附加到嵌套集合操作（<code>UNION</code>/<code>INTERSECT</code>/<code>EXCEPT</code>）上的 <code>WITH</code>（Tom Lane）</p>", "text": "修复附加到嵌套集合操作（UNION/INTERSECT/EXCEPT）上的 WITH（Tom Lane）", "title": "修复附加到嵌套集合操作（UNION/INTERSECT/EXCEPT）上的 WITH", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "b9b4a64a60c3e3d47029f174be2033f9f2a92582a350746a9d12415518ab460c", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix WITH attached to a nested set operation (UNION/INTERSECT/EXCEPT) (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/014", "db_id": "4877db670c9074b96cbae24d05e366c8", "patch_ids": [], "statement_hash": "09d03806a9c5fbed69e9547ebb836ecdcd0622c3367925257a167ba820d33b03", "relations": [{"rule": 2, "type": "equivalent", "target": "1e782338af3c3d32b9f7a47ca4e5a376", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "09d03806a9c5fbed69e9547ebb836ecdcd0622c3367925257a167ba820d33b03"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "1e782338af3c3d32b9f7a47ca4e5a376", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复附加到嵌套集合操作（UNION/INTERSECT/EXCEPT）上的 WITH", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "09d03806a9c5fbed69e9547ebb836ecdcd0622c3367925257a167ba820d33b03"}, "url": "/docs/compare/?release=9.1.5#9.1.5-a74dfdc74b9b6fce", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-5ede50f89754fae0", "cves": [], "html": "<p>确保对子查询的整行引用不包含任何多余的 <code>GROUP BY</code> 或 <code>ORDER BY</code> 列（Tom Lane）</p>", "text": "确保对子查询的整行引用不包含任何多余的 GROUP BY 或 ORDER BY 列（Tom Lane）", "title": "确保对子查询的整行引用不包含任何多余的 GROUP BY 或 ORDER BY 列", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "f8a8c23c7c58fef85057be84d3794dc4c594188e4a7d0410fefa7b260f48d1f4", "section_path": ["变更"], "commit_groups": [], "identity_text": "Ensure that a whole-row reference to a subquery doesn't include any extra GROUP BY or ORDER BY columns (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/015", "db_id": "084e32d63dd0f51e2402832e8e54b800", "patch_ids": [], "statement_hash": "1c6c1bcb7872536f154baec2aefc7b530bae344cb4e47f50f69d12dea264ee7e", "relations": [{"rule": 2, "type": "equivalent", "target": "04efb7bc8ae944f6440c85f2ab909df0", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "1c6c1bcb7872536f154baec2aefc7b530bae344cb4e47f50f69d12dea264ee7e"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "04efb7bc8ae944f6440c85f2ab909df0", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "确保对子查询的整行引用不包含任何多余的 GROUP BY 或 ORDER BY 列", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "1c6c1bcb7872536f154baec2aefc7b530bae344cb4e47f50f69d12dea264ee7e"}, "url": "/docs/compare/?release=9.1.5#9.1.5-5ede50f89754fae0", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-33d578c13f916c63", "cves": [], "html": "<p>禁止在 <code>CREATE TABLE</code> 期间复制 <code>CHECK</code> 约束和索引定义中的整行引用（Tom Lane）</p>\n<p>这种情况可能出现在带 <code>LIKE</code> 或 <code>INHERITS</code> 的 <code>CREATE TABLE</code> 中。被复制的整行变量被错误地标记为原表而不是新表的行类型。对 <code>LIKE</code> 拒绝这种情况似乎是合理的，因为行类型之后很可能分化。对 <code>INHERITS</code>，理想情况下应该允许它，并隐式强制转换为父表的行类型；但这需要的工作量超出了回移植的安全范围。</p>", "text": "禁止在 CREATE TABLE 期间复制 CHECK 约束和索引定义中的整行引用（Tom Lane） 这种情况可能出现在带 LIKE 或 INHERITS 的 CREATE TABLE 中。被复制的整行变量被错误地标记为原表而不是新表的行类型。对 LIKE 拒绝这种情况似乎是合理的，因为行类型之后很可能分化。对 INHERITS，理想情况下应该允许它，并隐式强制转换为父表的行类型；但这需要的工作量超出了回移植的安全范围。", "title": "禁止在 CREATE TABLE 期间复制 CHECK 约束和索引定义中的整行引用", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "9ae5291d6827bd39f49c4e62f764cef9998817dac0312b2a62318fedac7f2286", "section_path": ["变更"], "commit_groups": [], "identity_text": "Disallow copying whole-row references in CHECK constraints and index definitions during CREATE TABLE (Tom Lane) This situation can arise in CREATE TABLE with LIKE or INHERITS. The copied whole-row variable was incorrectly labeled with the row type of the original table not the new one. Rejecting the case seems reasonable for LIKE, since the row types might well diverge later. For INHERITS we should ideally allow it, with an implicit coercion to the parent table's row type; but that will require more work than seems safe to back-patch.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/016", "db_id": "1b38b3af136078a8f8f3663ba18fae6a", "patch_ids": [], "statement_hash": "760c794d9ebc06dac889c171a706fec128d4fe6a44721becf2e740e55539ef5f", "relations": [{"rule": 2, "type": "equivalent", "target": "1d48425a12e4c18b7735438ddaf2be07", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "760c794d9ebc06dac889c171a706fec128d4fe6a44721becf2e740e55539ef5f"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "1d48425a12e4c18b7735438ddaf2be07", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "禁止在 CREATE TABLE 期间复制 CHECK 约束和索引定义中的整行引用", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "760c794d9ebc06dac889c171a706fec128d4fe6a44721becf2e740e55539ef5f"}, "url": "/docs/compare/?release=9.1.5#9.1.5-33d578c13f916c63", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-1a080ecb5e725df1", "cves": [], "html": "<p>修复 <code>ARRAY(SELECT ...)</code> 子查询中的内存泄漏（Heikki Linnakangas、Tom Lane）</p>", "text": "修复 ARRAY(SELECT ...) 子查询中的内存泄漏（Heikki Linnakangas、Tom Lane）", "title": "修复 ARRAY(SELECT ...) 子查询中的内存泄漏", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "fe0194bf066c7b2b59cc7ade1ecded6768a7ae83dedbf0bee1e01d4dab5cfacf", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix memory leak in ARRAY(SELECT ...) subqueries (Heikki Linnakangas, Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/017", "db_id": "8688b0cd63e3f818379de112cad2fe14", "patch_ids": [], "statement_hash": "b0d6f65f080ca13202d5e83941c4f07444966f866265bcc67f221d5751bfaf80", "relations": [{"rule": 2, "type": "equivalent", "target": "bc012ad4f39a0f0c66d998f6cfb9924a", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "b0d6f65f080ca13202d5e83941c4f07444966f866265bcc67f221d5751bfaf80"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "bc012ad4f39a0f0c66d998f6cfb9924a", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复 ARRAY(SELECT ...) 子查询中的内存泄漏", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "b0d6f65f080ca13202d5e83941c4f07444966f866265bcc67f221d5751bfaf80"}, "url": "/docs/compare/?release=9.1.5#9.1.5-1a080ecb5e725df1", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-ca2093f260838874", "cves": [], "html": "<p>修复从正则表达式中提取公共前缀的问题（Tom Lane）</p>\n<p>代码可能被带量词的带括号子表达式（例如 <code>^(foo)?bar</code>）混淆。这会导致对此类模式搜索的索引优化不正确。</p>", "text": "修复从正则表达式中提取公共前缀的问题（Tom Lane） 代码可能被带量词的带括号子表达式（例如 ^(foo)?bar）混淆。这会导致对此类模式搜索的索引优化不正确。", "title": "修复从正则表达式中提取公共前缀的问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "91aa9d89dfff5af83b926ccf0d2a1909dd6f67d77dce4e49c9c58f3c4cb52e76", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix extraction of common prefixes from regular expressions (Tom Lane) The code could get confused by quantified parenthesized subexpressions, such as ^(foo)?bar. This would lead to incorrect index optimization of searches for such patterns.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/018", "db_id": "4cf52b135c67668937aef0b58593e73f", "patch_ids": [], "statement_hash": "0c5726403215cf31b228491b9a70b7b0ef786d8a7f1c8e4af8ba23116db3eaf0", "relations": [{"rule": 2, "type": "equivalent", "target": "f36203443c0f711654b57a1754b54226", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "0c5726403215cf31b228491b9a70b7b0ef786d8a7f1c8e4af8ba23116db3eaf0"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "f36203443c0f711654b57a1754b54226", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复从正则表达式中提取公共前缀的问题", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "0c5726403215cf31b228491b9a70b7b0ef786d8a7f1c8e4af8ba23116db3eaf0"}, "url": "/docs/compare/?release=9.1.5#9.1.5-ca2093f260838874", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-b427a1bafaace4ef", "cves": [], "html": "<p>修复解析 <code>interval</code> 常量中带符号的 <em><code>hh</code></em><code>:</code><em><code>mm</code></em> 和 <em><code>hh</code></em><code>:</code><em><code>mm</code></em><code>:</code><em><code>ss</code></em> 字段的缺陷（Amit Kapila、Tom Lane）</p>", "text": "修复解析 interval 常量中带符号的 hh:mm 和 hh:mm:ss 字段的缺陷（Amit Kapila、Tom Lane）", "title": "修复解析 interval 常量中带符号的 hh:mm 和 hh:mm:ss 字段的缺陷", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "de3a806c880eaa8ea44e49fcc32f0ac887c29f42b41bbe510e754eba924e3a30", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix bugs with parsing signed hh:mm and hh:mm:ss fields in interval constants (Amit Kapila, Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/019", "db_id": "bfa675853a121630a60adeb448c34056", "patch_ids": [], "statement_hash": "ebfa4fc3096bea13425e775272a3d504a945d295a14de8d7adb314bde5e53000", "relations": [{"rule": 2, "type": "equivalent", "target": "de4a1dd86dfe959c200ccee30e81d45a", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "ebfa4fc3096bea13425e775272a3d504a945d295a14de8d7adb314bde5e53000"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "de4a1dd86dfe959c200ccee30e81d45a", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复解析 interval 常量中带符号的 hh:mm 和 hh:mm:ss 字段的缺陷", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "ebfa4fc3096bea13425e775272a3d504a945d295a14de8d7adb314bde5e53000"}, "url": "/docs/compare/?release=9.1.5#9.1.5-b427a1bafaace4ef", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-5022bc6aeb89efa5", "cves": [], "html": "<p>在 PL/Python 中把 Python Unicode 字符串转换为服务器编码时，使用 Postgres 而不是 Python 的编码转换函数（Jan Urbanski）</p>\n<p>这避免了一些极端情况的问题，尤其是 Python 并不支持 Postgres 的所有编码。一个显著的功能变化是：如果服务器编码是 SQL_ASCII，你将得到该字符串的 UTF-8 表示；此前字符串中的任何非 ASCII 字符都会导致错误。</p>", "text": "在 PL/Python 中把 Python Unicode 字符串转换为服务器编码时，使用 Postgres 而不是 Python 的编码转换函数（Jan Urbanski） 这避免了一些极端情况的问题，尤其是 Python 并不支持 Postgres 的所有编码。一个显著的功能变化是：如果服务器编码是 SQL_ASCII，你将得到该字符串的 UTF-8 表示；此前字符串中的任何非 ASCII 字符都会导致错误。", "title": "在 PL/Python 中把 Python Unicode 字符串转换为服务器编码时，使用 Postgres 而不是 Python 的编码转换函数", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "f8a1873a8c5b059de10f9e021cf231ad49926729f56d6f867c03d047e2032b52", "section_path": ["变更"], "commit_groups": [], "identity_text": "Use Postgres' encoding conversion functions, not Python's, when converting a Python Unicode string to the server encoding in PL/Python (Jan Urbanski) This avoids some corner-case problems, notably that Python doesn't support all the encodings Postgres does. A notable functional change is that if the server encoding is SQL_ASCII, you will get the UTF-8 representation of the string; formerly, any non-ASCII characters in the string would result in an error.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/020", "db_id": "6e3c410cefd90131da3b37322b3bbe5a", "patch_ids": [], "statement_hash": "8ceccafb05d6ac158c35a27524065fe41865bc2631064c70104865c5910b62db", "relations": [{"rule": 2, "type": "equivalent", "target": "080bec2ed777ebf87d524bfc43d7b08d", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "8ceccafb05d6ac158c35a27524065fe41865bc2631064c70104865c5910b62db"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "080bec2ed777ebf87d524bfc43d7b08d", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "在 PL/Python 中把 Python Unicode 字符串转换为服务器编码时，使用 Postgres 而不是 Python 的编码转换函数", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "8ceccafb05d6ac158c35a27524065fe41865bc2631064c70104865c5910b62db"}, "url": "/docs/compare/?release=9.1.5#9.1.5-5022bc6aeb89efa5", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-9ebcea96c345aae8", "cves": [], "html": "<p>修复 PL/Python 中 PostgreSQL 编码到 Python 编码的映射（Jan Urbanski）</p>", "text": "修复 PL/Python 中 PostgreSQL 编码到 Python 编码的映射（Jan Urbanski）", "title": "修复 PL/Python 中 PostgreSQL 编码到 Python 编码的映射", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "4d57cd52b5215efba928214ee8ff119883b8c030f048f6769d83477970600911", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix mapping of PostgreSQL encodings to Python encodings in PL/Python (Jan Urbanski)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/021", "db_id": "e2e684e26dbec7497ecfa8c5b1db9dce", "patch_ids": [], "statement_hash": "984566dfa271b9b7ce8d0c32011370101ec8cbe789ec8245b87a383bc41a0c8b", "relations": [{"rule": 2, "type": "equivalent", "target": "362f6953d5e4e7330ca4d3113c432e3a", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "984566dfa271b9b7ce8d0c32011370101ec8cbe789ec8245b87a383bc41a0c8b"}}], "version": "9.0.9", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "362f6953d5e4e7330ca4d3113c432e3a", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复 PL/Python 中 PostgreSQL 编码到 Python 编码的映射", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "984566dfa271b9b7ce8d0c32011370101ec8cbe789ec8245b87a383bc41a0c8b"}, "url": "/docs/compare/?release=9.1.5#9.1.5-9ebcea96c345aae8", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-490c6cd0accc655d", "cves": [], "html": "<p>修复 <code>contrib/xml2</code> 的 <code>xslt_process()</code> 中的错误报告（Tom Lane）</p>", "text": "修复 contrib/xml2 的 xslt_process() 中的错误报告（Tom Lane）", "title": "修复 contrib/xml2 的 xslt_process() 中的错误报告", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "e66e36f850107277e161186fc736e9527298817877163d338e200d265aaad648", "section_path": ["变更"], "commit_groups": [], "identity_text": "Report errors properly in contrib/xml2's xslt_process() (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/022", "db_id": "9f413c585b61969835ca84bd1afb2a8c", "patch_ids": [], "statement_hash": "20d136cac7ffaba9cf395726b84ed40c596693a435f3ca4cbcc1b8d234adcea6", "relations": [{"rule": 2, "type": "equivalent", "target": "411222a3858a803e20ad822d6fe7650b", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "20d136cac7ffaba9cf395726b84ed40c596693a435f3ca4cbcc1b8d234adcea6"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "411222a3858a803e20ad822d6fe7650b", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "修复 contrib/xml2 的 xslt_process() 中的错误报告", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "20d136cac7ffaba9cf395726b84ed40c596693a435f3ca4cbcc1b8d234adcea6"}, "url": "/docs/compare/?release=9.1.5#9.1.5-490c6cd0accc655d", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}, {"id": "9.0.9-166d178e81b06f0b", "cves": [], "html": "<p>把时区数据文件更新为 <span>tzdata</span> 版本 2012e，以反映摩洛哥和托克劳的夏令时法规变更</p>", "text": "把时区数据文件更新为 tzdata 版本 2012e，以反映摩洛哥和托克劳的夏令时法规变更", "title": "把时区数据文件更新为 tzdata 版本 2012e，以反映摩洛哥和托克劳的夏令时法规变更", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.9/#id-1.11.6.19.5", "source_hash": "f5570407bce72d3d472401fd7367b1a6cd5fd2255ad3365d1b4024158f921227", "section_path": ["变更"], "commit_groups": [], "identity_text": "Update time zone data files to tzdata release 2012e for DST law changes in Morocco and Tokelau", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.9/changes/023", "db_id": "82cfac29d68a0457b1ed7275ed7063ca", "patch_ids": [], "statement_hash": "24e4fb24a20b5a0a02a7a687ec3fd980ed28ec71ed34d52fc874f8970a222b98", "relations": [{"rule": 2, "type": "equivalent", "target": "dedf0acf047dd2b04189342a4bde3417", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "24e4fb24a20b5a0a02a7a687ec3fd980ed28ec71ed34d52fc874f8970a222b98"}}], "version": "9.0.9", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "dedf0acf047dd2b04189342a4bde3417", "kind": "equivalent", "version": "9.1.5", "label": "9.1.5", "title": "把时区数据文件更新为 tzdata 版本 2012e，以反映摩洛哥和托克劳的夏令时法规变更", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "24e4fb24a20b5a0a02a7a687ec3fd980ed28ec71ed34d52fc874f8970a222b98"}, "url": "/docs/compare/?release=9.1.5#9.1.5-166d178e81b06f0b", "source_url": "/docs/release/9.1.5/#id-1.11.6.24.5"}]}]}], "stats": [{"key": "all", "label": "全部变更", "count": 23}, {"key": "feature", "label": "新功能", "count": 0}, {"key": "bugfix", "label": "BUG 修复", "count": 11}, {"key": "security", "label": "安全相关", "count": 2}, {"key": "performance", "label": "性能改进", "count": 0}, {"key": "compatibility", "label": "兼容性变化", "count": 0}, {"key": "improvement", "label": "其他改进", "count": 10}], "total": 23, "release_count": 1, "cross_major": false, "cve_count": 2, "cves": [{"id": "CVE-2012-3489", "url": "https://www.postgresql.org/support/security/CVE-2012-3489/", "fixed": {"8.3": "8.3.20", "8.4": "8.4.13", "9.0": "9.0.9", "9.1": "9.1.5"}, "score": null, "title": "防止通过 XML 实体引用访问外部文件/URL", "vector": "", "affected": {"8.3": "8.3", "8.4": "8.4", "9.0": "9.0", "9.1": "9.1"}, "component": "", "published": {}, "introduced": {}, "cvss_version": "", "description_en": "", "first_published": null, "fixed_version": "9.0.9"}, {"id": "CVE-2012-3488", "url": "https://www.postgresql.org/support/security/CVE-2012-3488/", "fixed": {"8.3": "8.3.20", "8.4": "8.4.13", "9.0": "9.0.9", "9.1": "9.1.5"}, "score": null, "title": "防止通过 contrib/xml2 的 xslt_process() 访问外部文件/URL", "vector": "", "affected": {"8.3": "8.3", "8.4": "8.4", "9.0": "9.0", "9.1": "9.1"}, "component": "", "published": {}, "introduced": {}, "cvss_version": "", "description_en": "", "first_published": null, "fixed_version": "9.0.9"}], "cve_available": true, "remaining_cves": [], "security_regressions": [], "warnings": [], "candidate_count": 23, "already_in_source_count": 0, "duplicate_count": 0, "excluded_count": 0, "exclusions": [], "source_as_of": "2026-09-26", "security_as_of": "2026-09-26"}