{"format": 1, "mode": "release", "from_release": null, "to_release": {"date": "2011-01-31", "build": "9.0.3", "major": "9.0", "minor": 3, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.3", "eol_date": "2015-10-08", "date_text": "2011-01-31", "supported": false, "manual_url": "/docs/9.0/release-9-0-3.html", "source_url": "/docs/release/9.0.3/", "entry_count": 12, "placeholder": false, "content_hash": "39a3f380ad2288156155e48d57de79917415780b5ed1b547c0ed6bbffb8372e3", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 12, "doc_loaded_at": "2026-09-26T02:56:48.570247", "migration_html": "<p>对于运行 9.0.X 的用户，不需要进行转储/恢复。</p>", "compatibility_count": 0, "label": "9.0.3", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5721, "support_days": -4010}, "groups": [{"date": "2011-01-31", "build": "9.0.3", "major": "9.0", "minor": 3, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.3", "eol_date": "2015-10-08", "date_text": "2011-01-31", "supported": false, "manual_url": "/docs/9.0/release-9-0-3.html", "source_url": "/docs/release/9.0.3/", "entry_count": 12, "placeholder": false, "content_hash": "39a3f380ad2288156155e48d57de79917415780b5ed1b547c0ed6bbffb8372e3", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 12, "doc_loaded_at": "2026-09-26T02:56:48.570247", "migration_html": "<p>对于运行 9.0.X 的用户，不需要进行转储/恢复。</p>", "compatibility_count": 0, "label": "9.0.3", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5721, "support_days": -4010, "entries": [{"id": "9.0.3-85ae0fb6d1dd0d86", "cves": [], "html": "<p>在退出 <span>walreceiver</span> 之前，确保所有已接收的 WAL 都已 fsync 到磁盘（Heikki Linnakangas）</p>\n<p>否则备库服务器可能重放一些未同步的 WAL，如果系统恰好在那时崩溃，可想而知会导致数据损坏。</p>", "text": "在退出 walreceiver 之前，确保所有已接收的 WAL 都已 fsync 到磁盘（Heikki Linnakangas） 否则备库服务器可能重放一些未同步的 WAL，如果系统恰好在那时崩溃，可想而知会导致数据损坏。", "title": "在退出 walreceiver 之前，确保所有已接收的 WAL 都已 fsync 到磁盘", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "2fcc5cac7be8ad659460b6a6d798ac822d0aff66052b3118c0cf4d5130392d6f", "section_path": ["变更"], "commit_groups": [], "identity_text": "Before exiting walreceiver, ensure all the received WAL is fsync'd to disk (Heikki Linnakangas) Otherwise the standby server could replay some un-synced WAL, conceivably leading to data corruption if the system crashes just at that point.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/001", "db_id": "7e7155379559a7f1c447a65d02ccc82e", "patch_ids": [], "statement_hash": "397c6730bf5209b0dfc1aa679dbac3b0b02597fae92c4bec05be3124e45cdd24", "relations": [], "version": "9.0.3", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-bb4e29d8af349856", "cves": [], "html": "<p>避免 <span>walreceiver</span> 中过多的 fsync 活动（Heikki Linnakangas）</p>", "text": "避免 walreceiver 中过多的 fsync 活动（Heikki Linnakangas）", "title": "避免 walreceiver 中过多的 fsync 活动", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "4ea483cf291ecfb8d34aea1b941ebcb64fbb6ba902e0859c63d8cdd7672ac459", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid excess fsync activity in walreceiver (Heikki Linnakangas)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/002", "db_id": "7dafb36b6aa0313d4219382bd13f0b24", "patch_ids": [], "statement_hash": "6a1ad358fd6c61a0fcf8590ec367698d4950692089a72ab8ed4fe0f8717a4ce9", "relations": [], "version": "9.0.3", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-4007c265d297085d", "cves": [], "html": "<p>让 <code>ALTER TABLE</code> 在需要时重新验证唯一性和排他约束（Noah Misch）</p>\n<p>这在 9.0 中被一个本意是抑制 <code>VACUUM FULL</code> 和 <code>CLUSTER</code> 期间重新验证的变更破坏，但该变更无意中也影响了 <code>ALTER TABLE</code>。</p>", "text": "让 ALTER TABLE 在需要时重新验证唯一性和排他约束（Noah Misch） 这在 9.0 中被一个本意是抑制 VACUUM FULL 和 CLUSTER 期间重新验证的变更破坏，但该变更无意中也影响了 ALTER TABLE。", "title": "让 ALTER TABLE 在需要时重新验证唯一性和排他约束", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "eb6921e9302fbce38ee5181b5d2a69587fb4a244e62d35a29562306849c29b92", "section_path": ["变更"], "commit_groups": [], "identity_text": "Make ALTER TABLE revalidate uniqueness and exclusion constraints when needed (Noah Misch) This was broken in 9.0 by a change that was intended to suppress revalidation during VACUUM FULL and CLUSTER, but unintentionally affected ALTER TABLE as well.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/003", "db_id": "942e9a7402e967cca0308a1ec872e559", "patch_ids": [], "statement_hash": "31259e5e7494560182328ce5c3d2925885f8c74a9931faf1e5663c07f4c5820e", "relations": [], "version": "9.0.3", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-8275dbec302fca4f", "cves": [], "html": "<p>修复对表不完全相同的继承树执行 <code>UPDATE</code> 时 EvalPlanQual 的问题（Tom Lane）</p>\n<p>表行类型的任何变化（包括只存在于部分子表中的已删除列）都会混淆 EvalPlanQual 代码，导致行为异常甚至崩溃。由于 EvalPlanQual 只在同一行的并发更新期间执行，该问题只是间歇性出现。</p>", "text": "修复对表不完全相同的继承树执行 UPDATE 时 EvalPlanQual 的问题（Tom Lane） 表行类型的任何变化（包括只存在于部分子表中的已删除列）都会混淆 EvalPlanQual 代码，导致行为异常甚至崩溃。由于 EvalPlanQual 只在同一行的并发更新期间执行，该问题只是间歇性出现。", "title": "修复对表不完全相同的继承树执行 UPDATE 时 EvalPlanQual 的问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "ae96037d8b75beff929f8bcc66cae40993da893c31e7aaee525ec5c8fa0790d5", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix EvalPlanQual for UPDATE of an inheritance tree in which the tables are not all alike (Tom Lane) Any variation in the table row types (including dropped columns present in only some child tables) would confuse the EvalPlanQual code, leading to misbehavior or even crashes. Since EvalPlanQual is only executed during concurrent updates to the same row, the problem was only seen intermittently.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/004", "db_id": "4e1ffa32ef4dac3c6a4af365e68fb2df", "patch_ids": [], "statement_hash": "b6f6ead7ecd54f59f079ed477a72e6b8bd76710fc4f4bb78a4056bcf2eecb65d", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-b828a7a1255bc6e6", "cves": [], "html": "<p>避免 <code>EXPLAIN</code> 尝试显示简单形式 <code>CASE</code> 表达式时的失败（Tom Lane）</p>\n<p>如果 <code>CASE</code> 的测试表达式是常量，规划器可能把 <code>CASE</code> 简化为令表达式显示代码困惑的形式，导致 <span>“<span>unexpected CASE WHEN clause</span>”</span> 错误。</p>", "text": "避免 EXPLAIN 尝试显示简单形式 CASE 表达式时的失败（Tom Lane） 如果 CASE 的测试表达式是常量，规划器可能把 CASE 简化为令表达式显示代码困惑的形式，导致 “unexpected CASE WHEN clause” 错误。", "title": "避免 EXPLAIN 尝试显示简单形式 CASE 表达式时的失败", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "42751c177ce908f2a4c257d39911b415f1de3b3ebc50b728a5405db71f5260cb", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid failures when EXPLAIN tries to display a simple-form CASE expression (Tom Lane) If the CASE's test expression was a constant, the planner could simplify the CASE into a form that confused the expression-display code, resulting in unexpected CASE WHEN clause errors.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/005", "db_id": "18dd39df075f5d797233c42bcde360d0", "patch_ids": [], "statement_hash": "64e4b9dab016f19f5da866f3983aa3b9d74aa00338a65ecd1ba23f1008530fbe", "relations": [], "version": "9.0.3", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-6f44b7bedcc3cc47", "cves": [], "html": "<p>修复对现有下标范围之前的数组切片赋值的问题（Tom Lane）</p>\n<p>如果新增下标与第一个既有下标之间存在间隙，代码会错误计算需要从旧数组的空值位图复制多少条目，可能导致数据损坏或崩溃。</p>", "text": "修复对现有下标范围之前的数组切片赋值的问题（Tom Lane） 如果新增下标与第一个既有下标之间存在间隙，代码会错误计算需要从旧数组的空值位图复制多少条目，可能导致数据损坏或崩溃。", "title": "修复对现有下标范围之前的数组切片赋值的问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "4c499e8d8a55dc4933d6706bc39a395aa34af769c37241390c8cb3b4b3bde101", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix assignment to an array slice that is before the existing range of subscripts (Tom Lane) If there was a gap between the newly added subscripts and the first pre-existing subscript, the code miscalculated how many entries needed to be copied from the old array's null bitmap, potentially leading to data corruption or crash.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/006", "db_id": "cdabba62d615c81f1033c708da04b293", "patch_ids": [], "statement_hash": "f2b786b0e272789fba06de82c5b33a86327dd7880ff08d742d5708fc3c0ab211", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-24fe4bee96c2f7fd", "cves": [], "html": "<p>避免规划器对非常久远的日期值出现意外的转换溢出（Tom Lane）</p>\n<p><code>date</code> 类型支持的日期范围比 <code>timestamp</code> 类型能表示的更宽，但规划器假定它总是可以不受惩罚地把 date 转换为 timestamp。</p>", "text": "避免规划器对非常久远的日期值出现意外的转换溢出（Tom Lane） date 类型支持的日期范围比 timestamp 类型能表示的更宽，但规划器假定它总是可以不受惩罚地把 date 转换为 timestamp。", "title": "避免规划器对非常久远的日期值出现意外的转换溢出", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "01b5ac904f39efdc0a4ae20cb919286dcc273a4de143ab481f32d12bef5809af", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid unexpected conversion overflow in planner for very distant date values (Tom Lane) The date type supports a wider range of dates than can be represented by the timestamp types, but the planner assumed it could always convert a date to timestamp with impunity.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/007", "db_id": "9332b1bab72f0712de06ca69deca066d", "patch_ids": [], "statement_hash": "8cc0e904e8004cf167c1399d6fff52129de7999bb72f100b7a8e26743562bd3e", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-178895b0572f9c5a", "cves": [], "html": "<p>修复数组包含空条目时 PL/Python 的崩溃（Alex Hunsaker）</p>", "text": "修复数组包含空条目时 PL/Python 的崩溃（Alex Hunsaker）", "title": "修复数组包含空条目时 PL/Python 的崩溃", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "6e295d1b6c79eb6be85a8b67d97f19d8458d1f77b8a940d991172ff284efe52b", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix PL/Python crash when an array contains null entries (Alex Hunsaker)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/008", "db_id": "2ce45f2cb69204aaf44ac7ee7685703d", "patch_ids": [], "statement_hash": "c3680f0b4f1075c46c08a473fc9e4d385cc76e0f286d4868342c8f429640535e", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-cea0dd6e0ea53aa2", "cves": [], "html": "<p>移除 <span>ecpg</span> 对定义数组维度的常量的固定长度限制（Michael Meskes）</p>", "text": "移除 ecpg 对定义数组维度的常量的固定长度限制（Michael Meskes）", "title": "移除 ecpg 对定义数组维度的常量的固定长度限制", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "fb783cefde913595076a47009583827a9d93bb6ced0989ef398fb568afc27adc", "section_path": ["变更"], "commit_groups": [], "identity_text": "Remove ecpg's fixed length limit for constants defining an array dimension (Michael Meskes)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/009", "db_id": "d478e35a648edf0a03c0cc6dce1a21be", "patch_ids": [], "statement_hash": "c0654b9f9c0887e330cae94313fa413b390680376a47f0c84a4c83c2c7a80a09", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-9cb4845d08b192bf", "cves": [], "html": "<p>修复对包含 <code>... &amp; !(subexpression) | ...</code> 的 <code>tsquery</code> 值的错误解析（Tom Lane）</p>\n<p>包含这种操作符组合的查询没有被正确执行。同样的错误也存在于 <code>contrib/intarray</code> 的 <code>query_int</code> 类型和 <code>contrib/ltree</code> 的 <code>ltxtquery</code> 类型中。</p>", "text": "修复对包含 ... & !(subexpression) | ... 的 tsquery 值的错误解析（Tom Lane） 包含这种操作符组合的查询没有被正确执行。同样的错误也存在于 contrib/intarray 的 query_int 类型和 contrib/ltree 的 ltxtquery 类型中。", "title": "修复对包含 ... & !(subexpression) | ... 的 tsquery 值的错误解析", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "4c99c2c70c2fc834e3434a68f89a3cf134fbd912409d2482cc9855d0c2f5757b", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix erroneous parsing of tsquery values containing ... & !(subexpression) | ... (Tom Lane) Queries containing this combination of operators were not executed correctly. The same error existed in contrib/intarray's query_int type and contrib/ltree's ltxtquery type.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/010", "db_id": "812fa2e09419b8e7957c05c322e6be8a", "patch_ids": [], "statement_hash": "735159116ab0efe8b4dece1dd72a060181e9faa1e68a5348ea89434c47f2d927", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-196f3e6ff4041a0c", "cves": ["CVE-2010-4015"], "html": "<p>修复 <code>contrib/intarray</code> 的 <code>query_int</code> 类型输入函数中的缓冲区越界（Apple）</p>\n<p>该缺陷构成安全风险，因为函数的返回地址可能被覆写。感谢 Apple Inc 的安全团队报告此问题并提供修复。（CVE-2010-4015）</p>", "text": "修复 contrib/intarray 的 query_int 类型输入函数中的缓冲区越界（Apple） 该缺陷构成安全风险，因为函数的返回地址可能被覆写。感谢 Apple Inc 的安全团队报告此问题并提供修复。（CVE-2010-4015）", "title": "修复 contrib/intarray 的 query_int 类型输入函数中的缓冲区越界", "commits": [], "section": "变更", "category": "security", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "da0b7f67213b50ef8a13392aa5b947880183e937786213ad4a277e4931b25072", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix buffer overrun in contrib/intarray's input function for the query_int type (Apple) This bug is a security risk since the function's return address could be overwritten. Thanks to Apple Inc's security team for reporting this issue and supplying the fix. (CVE-2010-4015)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/011", "db_id": "c74da74892f5ffdef0d6a846e1a0fbcf", "patch_ids": [], "statement_hash": "2fbff1202393f6ec346462183144d5fb1d154cd8fdb0e9f0e9936ef849043d26", "relations": [], "version": "9.0.3", "category_label": "安全相关", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.3-f6aa9843565db508", "cves": [], "html": "<p>修复 <code>contrib/seg</code> 的 GiST picksplit 算法中的缺陷（Alexander Korotkov）</p>\n<p>这可能导致 <code>seg</code> 列上的 GiST 索引相当低效，尽管答案并非真正错误。如果你有这样的索引，考虑在安装此更新后对其执行 <code>REINDEX</code>。（这与上一次更新中在 <code>contrib/cube</code> 中修复的缺陷相同。）</p>", "text": "修复 contrib/seg 的 GiST picksplit 算法中的缺陷（Alexander Korotkov） 这可能导致 seg 列上的 GiST 索引相当低效，尽管答案并非真正错误。如果你有这样的索引，考虑在安装此更新后对其执行 REINDEX。（这与上一次更新中在 contrib/cube 中修复的缺陷相同。）", "title": "修复 contrib/seg 的 GiST picksplit 算法中的缺陷", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.3/#id-1.11.6.25.5", "source_hash": "2fc074a5f14ac149ab4cfe9e483ee2d8e73cd6fbda0f78d7c8950d45b2810e62", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix bug in contrib/seg's GiST picksplit algorithm (Alexander Korotkov) This could result in considerable inefficiency, though not actually incorrect answers, in a GiST index on a seg column. If you have such an index, consider REINDEXing it after installing this update. (This is identical to the bug that was fixed in contrib/cube in the previous update.)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.3/changes/012", "db_id": "33159fa5704c01ad0135843bea6fbd0a", "patch_ids": [], "statement_hash": "0c68b7d7de17a6dada0c32a3a4becfd88ef1610693b02a2780653e06a6e8c288", "relations": [], "version": "9.0.3", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}]}], "stats": [{"key": "all", "label": "全部变更", "count": 12}, {"key": "feature", "label": "新功能", "count": 0}, {"key": "bugfix", "label": "BUG 修复", "count": 7}, {"key": "security", "label": "安全相关", "count": 1}, {"key": "performance", "label": "性能改进", "count": 0}, {"key": "compatibility", "label": "兼容性变化", "count": 0}, {"key": "improvement", "label": "其他改进", "count": 4}], "total": 12, "release_count": 1, "cross_major": false, "cve_count": 1, "cves": [{"id": "CVE-2010-4015", "url": "https://www.postgresql.org/support/security/CVE-2010-4015/", "fixed": {"8.2": "8.2.20", "8.3": "8.3.14", "8.4": "8.4.7", "9.0": "9.0.3"}, "score": null, "title": "修复 contrib/intarray 的 query_int 类型输入函数中的缓冲区越界", "vector": "", "affected": {"8.2": "8.2", "8.3": "8.3", "8.4": "8.4", "9.0": "9.0"}, "component": "", "published": {}, "introduced": {}, "cvss_version": "", "description_en": "", "first_published": null, "fixed_version": "9.0.3"}], "cve_available": true, "remaining_cves": [], "security_regressions": [], "warnings": [], "candidate_count": 12, "already_in_source_count": 0, "duplicate_count": 0, "excluded_count": 0, "exclusions": [], "source_as_of": "2026-09-26", "security_as_of": "2026-09-26"}