{"format": 1, "mode": "release", "from_release": null, "to_release": {"date": "2011-04-18", "build": "9.0.4", "major": "9.0", "minor": 4, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.4", "eol_date": "2015-10-08", "date_text": "2011-04-18", "supported": false, "manual_url": "/docs/9.0/release-9-0-4.html", "source_url": "/docs/release/9.0.4/", "entry_count": 29, "placeholder": false, "content_hash": "7f74c432cc01dd2925cb71a8074bd9c2692b1ebe4094099c2b705f1ff60d5d0a", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 29, "doc_loaded_at": "2026-09-26T02:56:48.570247", "migration_html": "<p>对于运行 9.0.X 的用户，不需要进行转储/恢复。</p>\n<p>不过，如果你的安装是通过运行 <span>pg_upgrade</span> 从前一个大版本升级的，应采取措施防止因 <span>pg_upgrade</span> 一个现已修复的缺陷导致可能的数据丢失。推荐的解决方案是对所有 TOAST 表执行 <code>VACUUM FREEZE</code>。更多信息见 <a href=\"http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix\">http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix</a>。</p>", "compatibility_count": 0, "label": "9.0.4", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5644, "support_days": -4010}, "groups": [{"date": "2011-04-18", "build": "9.0.4", "major": "9.0", "minor": 4, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.4", "eol_date": "2015-10-08", "date_text": "2011-04-18", "supported": false, "manual_url": "/docs/9.0/release-9-0-4.html", "source_url": "/docs/release/9.0.4/", "entry_count": 29, "placeholder": false, "content_hash": "7f74c432cc01dd2925cb71a8074bd9c2692b1ebe4094099c2b705f1ff60d5d0a", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 29, "doc_loaded_at": "2026-09-26T02:56:48.570247", "migration_html": "<p>对于运行 9.0.X 的用户，不需要进行转储/恢复。</p>\n<p>不过，如果你的安装是通过运行 <span>pg_upgrade</span> 从前一个大版本升级的，应采取措施防止因 <span>pg_upgrade</span> 一个现已修复的缺陷导致可能的数据丢失。推荐的解决方案是对所有 TOAST 表执行 <code>VACUUM FREEZE</code>。更多信息见 <a href=\"http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix\">http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix</a>。</p>", "compatibility_count": 0, "label": "9.0.4", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5644, "support_days": -4010, "entries": [{"id": "9.0.4-78db56164a4fe2cd", "cves": [], "html": "<p>修复 <span>pg_upgrade</span> 对 TOAST 表的处理（Bruce Momjian）</p>\n<p>在 <span>pg_upgrade</span> 期间，TOAST 表的 <code>pg_class</code>.<code>relfrozenxid</code> 值未被正确复制到新安装。这之后可能导致 <code>pg_clog</code> 文件在仍被需要用于验证 TOAST 表中的元组时被丢弃，导致 <span>“<span>could not access status of transaction</span>”</span> 失败。</p>\n<p>这一错误对曾用 <span>pg_upgrade</span> 升级的安装构成显著的数据丢失风险。此补丁纠正了未来使用 <span>pg_upgrade</span> 时的问题，但本身不能治愈已用带缺陷版本的 <span>pg_upgrade</span> 处理过的安装中的问题。</p>", "text": "修复 pg_upgrade 对 TOAST 表的处理（Bruce Momjian） 在 pg_upgrade 期间，TOAST 表的 pg_class.relfrozenxid 值未被正确复制到新安装。这之后可能导致 pg_clog 文件在仍被需要用于验证 TOAST 表中的元组时被丢弃，导致 “could not access status of transaction” 失败。 这一错误对曾用 pg_upgrade 升级的安装构成显著的数据丢失风险。此补丁纠正了未来使用 pg_upgrade 时的问题，但本身不能治愈已用带缺陷版本的 pg_upgrade 处理过的安装中的问题。", "title": "修复 pg_upgrade 对 TOAST 表的处理", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "0807076979c47bdafbee3a16da50f18829c446ec53e143a7f084ddbd214883c1", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix pg_upgrade's handling of TOAST tables (Bruce Momjian) The pg_class.relfrozenxid value for TOAST tables was not correctly copied into the new installation during pg_upgrade. This could later result in pg_clog files being discarded while they were still needed to validate tuples in the TOAST tables, leading to could not access status of transaction failures. This error poses a significant risk of data loss for installations that have been upgraded with pg_upgrade. This patch corrects the problem for future uses of pg_upgrade, but does not in itself cure the issue in installations that have been processed with a buggy version of pg_upgrade.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/001", "db_id": "b1b600505eb94600a25d8e45fd752eed", "patch_ids": [], "statement_hash": "163dd42244d988e02239ef1d998a1951e653f2162d6652a6a81aed8ef8983a7f", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-443c8b6a1cfc346d", "cves": [], "html": "<p>抑制错误的 <span>“<span>PD_ALL_VISIBLE flag was incorrectly set</span>”</span> 警告（Heikki Linnakangas）</p>\n<p><code>VACUUM</code> 有时会在实际有效的情况下发出此警告。</p>", "text": "抑制错误的 “PD_ALL_VISIBLE flag was incorrectly set” 警告（Heikki Linnakangas） VACUUM 有时会在实际有效的情况下发出此警告。", "title": "抑制错误的 “PD_ALL_VISIBLE flag was incorrectly set” 警告", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "2d3d9900b78b20b7a37370c1db7c8ebee3cb32ef0a8cf11f07cab7fdbe56631b", "section_path": ["变更"], "commit_groups": [], "identity_text": "Suppress incorrect PD_ALL_VISIBLE flag was incorrectly set warning (Heikki Linnakangas) VACUUM would sometimes issue this warning in cases that are actually valid.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/002", "db_id": "f4d439f2d0f2e45c2ac1956c5d68c24f", "patch_ids": [], "statement_hash": "0b41750e055e079830c8a467d29839f457722aef966fc4b71a6717042f4b8708", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-56daa98e4f12fd49", "cves": [], "html": "<p>为热备冲突情况使用更好的 SQLSTATE 错误码（Tatsuo Ishii、Simon Riggs）</p>\n<p>所有可重试的冲突错误现在都具有指示可以重试的错误码。此外，因主库上数据库被删除而关闭会话现在报告为 <code>ERRCODE_DATABASE_DROPPED</code> 而不是 <code>ERRCODE_ADMIN_SHUTDOWN</code>，使连接池能够正确处理这种情况。</p>", "text": "为热备冲突情况使用更好的 SQLSTATE 错误码（Tatsuo Ishii、Simon Riggs） 所有可重试的冲突错误现在都具有指示可以重试的错误码。此外，因主库上数据库被删除而关闭会话现在报告为 ERRCODE_DATABASE_DROPPED 而不是 ERRCODE_ADMIN_SHUTDOWN，使连接池能够正确处理这种情况。", "title": "为热备冲突情况使用更好的 SQLSTATE 错误码", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "2f2ed815489f65286f90efe70273ab12c3a727c9fa649f3d8210518b89990e65", "section_path": ["变更"], "commit_groups": [], "identity_text": "Use better SQLSTATE error codes for hot standby conflict cases (Tatsuo Ishii and Simon Riggs) All retryable conflict errors now have an error code that indicates that a retry is possible. Also, session closure due to the database being dropped on the master is now reported as ERRCODE_DATABASE_DROPPED, rather than ERRCODE_ADMIN_SHUTDOWN, so that connection poolers can handle the situation correctly.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/003", "db_id": "8220a13fac37af3ca3bb25082bdf96ef", "patch_ids": [], "statement_hash": "f13dbed18551240d780d4c3d3f90f88a60bdb03c950c9d307733b093c658b2c3", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-1a31386f69713309", "cves": [], "html": "<p>防止启动进程与 bgwriter 进程交互时的间歇性挂起（Simon Riggs）</p>\n<p>这影响非热备情况下的恢复。</p>", "text": "防止启动进程与 bgwriter 进程交互时的间歇性挂起（Simon Riggs） 这影响非热备情况下的恢复。", "title": "防止启动进程与 bgwriter 进程交互时的间歇性挂起", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "6f7e0c44d76105ad0ab9dff6345e007b584f6e95deed466b2afb2e9ec6224d30", "section_path": ["变更"], "commit_groups": [], "identity_text": "Prevent intermittent hang in interactions of startup process with bgwriter process (Simon Riggs) This affected recovery in non-hot-standby cases.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/004", "db_id": "1f5f96cb9f4cca288ec82b374cd785c1", "patch_ids": [], "statement_hash": "7ae172bd47912f8d87ea14870bd7d24dd110f6649f0d63ac969ea59e1f42aba7", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-169ecddc81b7318d", "cves": [], "html": "<p>禁止在组合类型中包含其自身（Tom Lane）</p>\n<p>这防止了服务器在处理该组合类型时无限递归的场景。虽然这种结构有一些可能的用途，但它们似乎不足以抵消确保其始终安全工作所需的努力。</p>", "text": "禁止在组合类型中包含其自身（Tom Lane） 这防止了服务器在处理该组合类型时无限递归的场景。虽然这种结构有一些可能的用途，但它们似乎不足以抵消确保其始终安全工作所需的努力。", "title": "禁止在组合类型中包含其自身", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "af3f6dd660975aadcc10c2d57259faefd45362a26b37a31cf70527799b17753f", "section_path": ["变更"], "commit_groups": [], "identity_text": "Disallow including a composite type in itself (Tom Lane) This prevents scenarios wherein the server could recurse infinitely while processing the composite type. While there are some possible uses for such a structure, they don't seem compelling enough to justify the effort required to make sure it always works safely.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/005", "db_id": "1b15660d65d4bb5789f07d23a6f9d027", "patch_ids": [], "statement_hash": "77451f7459f24c81415626c2b9388caa2e9a4230c84083788716727002e28991", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-82beb1227b6f3fcb", "cves": [], "html": "<p>避免目录缓存初始化期间的潜在死锁（Nikhil Sontakke）</p>\n<p>某些情况下，缓存加载代码会在锁定索引的目录之前获取系统索引上的共享锁。这可能与尝试以另一种更标准的顺序获取排他锁的进程死锁。</p>", "text": "避免目录缓存初始化期间的潜在死锁（Nikhil Sontakke） 某些情况下，缓存加载代码会在锁定索引的目录之前获取系统索引上的共享锁。这可能与尝试以另一种更标准的顺序获取排他锁的进程死锁。", "title": "避免目录缓存初始化期间的潜在死锁", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "84fe0a235d3c412b19744bd753b445471c45bbe91a6d4fd144b3d96e31497ef6", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid potential deadlock during catalog cache initialization (Nikhil Sontakke) In some cases the cache loading code would acquire share lock on a system index before locking the index's catalog. This could deadlock against processes trying to acquire exclusive locks in the other, more standard order.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/006", "db_id": "0c32e76719a592d9b833b5d6471d8d51", "patch_ids": [], "statement_hash": "2227a3d53c2738c645e8ae4e27d257d89f29dda4c166eb297df555233b58ed79", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-24a20175cb7a6659", "cves": [], "html": "<p>修复当目标元组存在并发更新时 <code>BEFORE ROW UPDATE</code> 触发器处理中的悬空指针问题（Tom Lane）</p>\n<p>已观察到该缺陷在尝试执行 <code>UPDATE RETURNING ctid</code> 时导致间歇性的 <span>“<span>cannot extract system attribute from virtual tuple</span>”</span> 失败。发生更严重错误（例如为更新后的元组生成错误索引项）的概率非常小。</p>", "text": "修复当目标元组存在并发更新时 BEFORE ROW UPDATE 触发器处理中的悬空指针问题（Tom Lane） 已观察到该缺陷在尝试执行 UPDATE RETURNING ctid 时导致间歇性的 “cannot extract system attribute from virtual tuple” 失败。发生更严重错误（例如为更新后的元组生成错误索引项）的概率非常小。", "title": "修复当目标元组存在并发更新时 BEFORE ROW UPDATE 触发器处理中的悬空指针问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "c69b7ccbd7e1c8aecaf72232cea71743d48328eead13f51955e667ea2d11ea15", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix dangling-pointer problem in BEFORE ROW UPDATE trigger handling when there was a concurrent update to the target tuple (Tom Lane) This bug has been observed to result in intermittent cannot extract system attribute from virtual tuple failures while trying to do UPDATE RETURNING ctid. There is a very small probability of more serious errors, such as generating incorrect index entries for the updated tuple.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/007", "db_id": "e03b5f827b0ab8103318fdd692417122", "patch_ids": [], "statement_hash": "0d70aae5956d25f3e90c5e1875303c24c51a0f866c44daa4bbc4218706231e34", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-05891a7627f40e60", "cves": [], "html": "<p>当表存在未决的延迟触发器事件时禁止 <code>DROP TABLE</code>（Tom Lane）</p>\n<p>此前 <code>DROP</code> 会照常执行，导致触发器最终触发时报 <span>“<span>could not open relation with OID nnn</span>”</span> 错误。</p>", "text": "当表存在未决的延迟触发器事件时禁止 DROP TABLE（Tom Lane） 此前 DROP 会照常执行，导致触发器最终触发时报 “could not open relation with OID nnn” 错误。", "title": "当表存在未决的延迟触发器事件时禁止 DROP TABLE", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "03f5099b235965e4d5c96c52ed2a551b484626371075c8c8276f3add335290eb", "section_path": ["变更"], "commit_groups": [], "identity_text": "Disallow DROP TABLE when there are pending deferred trigger events for the table (Tom Lane) Formerly the DROP would go through, leading to could not open relation with OID nnn errors when the triggers were eventually fired.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/008", "db_id": "b0cb6fbf7af9b318ae7d05c0b294a3d8", "patch_ids": [], "statement_hash": "cb9593ebf0e2718245281388b0d55c872898f34e18bfb0c647e756e5210d641b", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-4269f0280e798b34", "cves": [], "html": "<p>允许 <span>“<span>replication</span>”</span> 作为 <code>pg_hba.conf</code> 中的用户名（Andrew Dunstan）</p>\n<p><span>“<span>replication</span>”</span> 在数据库名列中是特殊的，但它被误认为在用户名列中也是特殊的。</p>", "text": "允许 “replication” 作为 pg_hba.conf 中的用户名（Andrew Dunstan） “replication” 在数据库名列中是特殊的，但它被误认为在用户名列中也是特殊的。", "title": "允许 “replication” 作为 pg_hba.conf 中的用户名", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "6e633da8e0b1aadcf523d6a6c621b13b1e7b46fce688d81da582ca793280c88d", "section_path": ["变更"], "commit_groups": [], "identity_text": "Allow replication as a user name in pg_hba.conf (Andrew Dunstan) replication is special in the database name column, but it was mistakenly also treated as special in the user name column.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/009", "db_id": "cfb5f7eb1d87f25f1ca160d1dabdae7a", "patch_ids": [], "statement_hash": "d7fc64af5994afe4645f77a000a93724885abe72463b5726bdf90b783b4ab5dc", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-7321f7e9727e655d", "cves": [], "html": "<p>防止 GEQO 优化期间由恒假 WHERE 条件触发的崩溃（Tom Lane）</p>", "text": "防止 GEQO 优化期间由恒假 WHERE 条件触发的崩溃（Tom Lane）", "title": "防止 GEQO 优化期间由恒假 WHERE 条件触发的崩溃", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "44da9facad43ea6af96b50ec4d3d7a27b4cb32ccfd0b7fe07d732a5a30ae544e", "section_path": ["变更"], "commit_groups": [], "identity_text": "Prevent crash triggered by constant-false WHERE conditions during GEQO optimization (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/010", "db_id": "6c86b2023b03102d513e1260a5bb969e", "patch_ids": [], "statement_hash": "8b251c042a225147a415fcd7d274bdb8606a7d05bcd34c636613f4d89051e0be", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-09b62430183b3c0e", "cves": [], "html": "<p>改进规划器对半连接和反连接情况的处理（Tom Lane）</p>", "text": "改进规划器对半连接和反连接情况的处理（Tom Lane）", "title": "改进规划器对半连接和反连接情况的处理", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "adf85ba19f1aa4a96f1724469d2600cf4b5246f9fb823fdda9404992a0e07582", "section_path": ["变更"], "commit_groups": [], "identity_text": "Improve planner's handling of semi-join and anti-join cases (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/011", "db_id": "3d814fa565e4e7e7e32e5b591de2c7fc", "patch_ids": [], "statement_hash": "fd2a37dcbfa4e51cf5621a7d29f342ea3512757f9f44d46b10640268f85c6b6f", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-1e07ca1b711def6e", "cves": [], "html": "<p>修复子 SELECT 中 <code>SELECT FOR UPDATE</code> 的处理（Tom Lane）</p>\n<p>该缺陷通常导致 <span>“<span>cannot extract system attribute from virtual tuple</span>”</span> 错误。</p>", "text": "修复子 SELECT 中 SELECT FOR UPDATE 的处理（Tom Lane） 该缺陷通常导致 “cannot extract system attribute from virtual tuple” 错误。", "title": "修复子 SELECT 中 SELECT FOR UPDATE 的处理", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "27b8dc6518bb71dc8f14f6e553ea1007ba769da73b72c91c514d3ddcf0e79962", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix handling of SELECT FOR UPDATE in a sub-SELECT (Tom Lane) This bug typically led to cannot extract system attribute from virtual tuple errors.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/012", "db_id": "80b9ae54784f656384ff164b7936008e", "patch_ids": [], "statement_hash": "5db979c38cbb37a5e92bb384dde39ad8560d2fa3afd39ae67548a71f1ed50c5d", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-3f5650e0b10c7cde", "cves": [], "html": "<p>修复文本搜索的选择率估计，使其考虑 NULL（Jesper Krogh）</p>", "text": "修复文本搜索的选择率估计，使其考虑 NULL（Jesper Krogh）", "title": "修复文本搜索的选择率估计，使其考虑 NULL", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "51f506a7bf178ffb69f8b776f75d8538de82be3941c87aa32a9c62111e21b2f5", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix selectivity estimation for text search to account for NULLs (Jesper Krogh)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/013", "db_id": "133e7755b96c9f6a6140796f74e9f527", "patch_ids": [], "statement_hash": "2a19038b32c431b83b7c43f8bdd3281b2a383718c7487c51e57c23cc40128799", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-7a510cacd99ca342", "cves": [], "html": "<p>修复 get_actual_variable_range()，使其支持由索引顾问插件注入的假设索引（Gurjeet Singh）</p>", "text": "修复 get_actual_variable_range()，使其支持由索引顾问插件注入的假设索引（Gurjeet Singh）", "title": "修复 get_actual_variable_range()，使其支持由索引顾问插件注入的假设索引", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "63db42bbbb14a242301b09f120b4fa965df3e3cf4e1691ea5b4451735192df19", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix get_actual_variable_range() to support hypothetical indexes injected by an index adviser plugin (Gurjeet Singh)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/014", "db_id": "b1bb92b407ed05a843f7fc18b7be147a", "patch_ids": [], "statement_hash": "3c51065a91c2722079ce49516e9ad815a846ebcad6db70021494e51197dc6ee3", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-4ade43490e3ce501", "cves": [], "html": "<p>修复涉及数组切片的 PL/Python 内存泄漏（Daniel Popowich）</p>", "text": "修复涉及数组切片的 PL/Python 内存泄漏（Daniel Popowich）", "title": "修复涉及数组切片的 PL/Python 内存泄漏", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "50dbb56f624b49729298114f784dc64b1f787d37ad3e3bd0f26470c6b93a477a", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix PL/Python memory leak involving array slices (Daniel Popowich)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/015", "db_id": "84ccba5a2d024c455fc7c17b3d3e8dc9", "patch_ids": [], "statement_hash": "6ebc58549db8d13da5424a7f01fec4fb1b234a4a6855074f8be25abc54c8cd45", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-ed0b4d9913f59d50", "cves": [], "html": "<p>允许 <span>libpq</span> 的 SSL 初始化在用户主目录不可用时成功（Tom Lane）</p>\n<p>如果 SSL 模式不要求根证书文件，就没有必要失败。此变更将行为恢复为 9.0 之前的样子。</p>", "text": "允许 libpq 的 SSL 初始化在用户主目录不可用时成功（Tom Lane） 如果 SSL 模式不要求根证书文件，就没有必要失败。此变更将行为恢复为 9.0 之前的样子。", "title": "允许 libpq 的 SSL 初始化在用户主目录不可用时成功", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "2a240b89fb126aabef0c453ceabbc7fc4f855f87e712157234c886b19b162d88", "section_path": ["变更"], "commit_groups": [], "identity_text": "Allow libpq's SSL initialization to succeed when user's home directory is unavailable (Tom Lane) If the SSL mode is such that a root certificate file is not required, there is no need to fail. This change restores the behavior to what it was in pre-9.0 releases.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/016", "db_id": "033a3bc251996f3179427576e2d779fe", "patch_ids": [], "statement_hash": "b2c1d85c0a432cad8785a98416d7d4fb78d9d16db749b27e5e9d10a474f786bd", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-a598a2824af8dde8", "cves": [], "html": "<p>修复 <span>libpq</span>，使其对 <code>conninfo_array_parse</code> 中检测到的错误返回有用的错误消息（Joseph Adams）</p>\n<p>一个笔误导致库向应用返回 NULL 而不是包含错误消息的 <code>PGconn</code> 结构。</p>", "text": "修复 libpq，使其对 conninfo_array_parse 中检测到的错误返回有用的错误消息（Joseph Adams） 一个笔误导致库向应用返回 NULL 而不是包含错误消息的 PGconn 结构。", "title": "修复 libpq，使其对 conninfo_array_parse 中检测到的错误返回有用的错误消息", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "6d23ac6a65fa42a30ed305833b9b3f6f793c7caba4a49447302bb42662fd6cb0", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix libpq to return a useful error message for errors detected in conninfo_array_parse (Joseph Adams) A typo caused the library to return NULL, rather than the PGconn structure containing the error message, to the application.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/017", "db_id": "91f4724332b736e84ee33d2dcf943558", "patch_ids": [], "statement_hash": "b05b329fcd8dc386e5de4c6408538f563d6b463d3a10fe3341e423a9ac0b406d", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-cc13e044bdcebf73", "cves": [], "html": "<p>修复 <span>ecpg</span> 预处理器对 float 常量的处理（Heikki Linnakangas）</p>", "text": "修复 ecpg 预处理器对 float 常量的处理（Heikki Linnakangas）", "title": "修复 ecpg 预处理器对 float 常量的处理", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "526454c397303096b2c446fa4772da4f5aeedb7ecc58bb35acde698c784f33b5", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix ecpg preprocessor's handling of float constants (Heikki Linnakangas)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/018", "db_id": "01b1a4bcaefe01d8f7b7c24754c7b449", "patch_ids": [], "statement_hash": "c549ba58b0f3d7f27ba9249ccd2dfdf99ed7c3c5f3e803082ee4b74a5c7e025d", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-efc8123e7f4ef14c", "cves": [], "html": "<p>修复并行 <span>pg_restore</span>，使其正确处理 POST_DATA 项上的注释（Arnd Hannemann）</p>", "text": "修复并行 pg_restore，使其正确处理 POST_DATA 项上的注释（Arnd Hannemann）", "title": "修复并行 pg_restore，使其正确处理 POST_DATA 项上的注释", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "605f158ae7eb46f145349c3a1b0235ad4c44a1aa6c19f4d6289e3a2dd45f6aa7", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix parallel pg_restore to handle comments on POST_DATA items correctly (Arnd Hannemann)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/019", "db_id": "e38ef3008a42b292f0d50e3b027e788e", "patch_ids": [], "statement_hash": "02f41bcc4a89bf5cd2c0d85cb423da48773d6951bfecc489e1c85ba808508db0", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-788087257ecf9d60", "cves": [], "html": "<p>修复 <span>pg_restore</span>，使其能处理 TOC 文件中的长行（超过 1KB）（Tom Lane）</p>", "text": "修复 pg_restore，使其能处理 TOC 文件中的长行（超过 1KB）（Tom Lane）", "title": "修复 pg_restore，使其能处理 TOC 文件中的长行（超过 1KB）", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "16ac887a32bec712d9e4cfdba5dc203fd448dc6f1df716a1d95151fcda2b1707", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix pg_restore to cope with long lines (over 1KB) in TOC files (Tom Lane)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/020", "db_id": "56adc1a0ee434e8bce28979ac784724d", "patch_ids": [], "statement_hash": "2af305e781716fe06a5a11cdb53ba7be87351fefe28c85161450383cf0f25e5e", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-a312ef0d58312044", "cves": [], "html": "<p>加入更多防护，防止因过于激进的编译器优化导致的除零崩溃（Aurelien Jarno）</p>", "text": "加入更多防护，防止因过于激进的编译器优化导致的除零崩溃（Aurelien Jarno）", "title": "加入更多防护，防止因过于激进的编译器优化导致的除零崩溃", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "48b652773d8d12366e4764a7b1dc89c38ce0f5d0087d2c738b1ec902d0206d80", "section_path": ["变更"], "commit_groups": [], "identity_text": "Put in more safeguards against crashing due to division-by-zero with overly enthusiastic compiler optimization (Aurelien Jarno)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/021", "db_id": "88e839fb33f1629abca5377bfea3de2d", "patch_ids": [], "statement_hash": "b444102450ff663ecd6dad93758048325d6ad44023307641b8db512364523ef9", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-d8daead6c8d6686b", "cves": [], "html": "<p>支持在 FreeBSD 和 OpenBSD 的 MIPS 上使用 dlopen()（Tom Lane）</p>\n<p>此前有一个硬编码的假设：该系统函数在这些系统的 MIPS 硬件上不可用。现在改用编译期测试，因为较新的版本已经有了它。</p>", "text": "支持在 FreeBSD 和 OpenBSD 的 MIPS 上使用 dlopen()（Tom Lane） 此前有一个硬编码的假设：该系统函数在这些系统的 MIPS 硬件上不可用。现在改用编译期测试，因为较新的版本已经有了它。", "title": "支持在 FreeBSD 和 OpenBSD 的 MIPS 上使用 dlopen()", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "7c4d359441d9e28659ef252eb8eb7bb19c9e551c68f2f80fc98b5c4487908a09", "section_path": ["变更"], "commit_groups": [], "identity_text": "Support use of dlopen() in FreeBSD and OpenBSD on MIPS (Tom Lane) There was a hard-wired assumption that this system function was not available on MIPS hardware on these systems. Use a compile-time test instead, since more recent versions have it.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/022", "db_id": "6881dfb99a098293e41faaab89c52f7e", "patch_ids": [], "statement_hash": "00cca5410e8113acf236f2ddc400aed251b457a355160e0a30e1b2e1c6449ce9", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-ef8f00bfe5a00f5b", "cves": [], "html": "<p>修复 HP-UX 上的编译失败（Heikki Linnakangas）</p>", "text": "修复 HP-UX 上的编译失败（Heikki Linnakangas）", "title": "修复 HP-UX 上的编译失败", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "f8df688ba2b89488160aa173c4ccf57346a1c72514ab9e55940436062bd7a08e", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix compilation failures on HP-UX (Heikki Linnakangas)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/023", "db_id": "616c00f1fea9a080d20f865115ce4f29", "patch_ids": [], "statement_hash": "6c3e0189705c9b678d4b58a83349c20338df9fd6a7208f653ec341d526784c62", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-a882040c0f2a10eb", "cves": [], "html": "<p>避免在进程启动极早期尝试写入 Windows 控制台时崩溃（Rushabh Lathia）</p>", "text": "避免在进程启动极早期尝试写入 Windows 控制台时崩溃（Rushabh Lathia）", "title": "避免在进程启动极早期尝试写入 Windows 控制台时崩溃", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "f2a86888c28f76b9923828bf6e285d15e918366e1ab02e5cbe3ee9b1501c2bc4", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid crash when trying to write to the Windows console very early in process startup (Rushabh Lathia)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/024", "db_id": "bf8efc53caf1574d95c32df561f86569", "patch_ids": [], "statement_hash": "e802271dcfe590a1c4cdc8059a926dc03bee180403f2bf4f2f1c7ec884884a7f", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-9a8fb24bd2a1d2b2", "cves": [], "html": "<p>支持使用 MinGW 64 位编译器为 Windows 构建（Andrew Dunstan）</p>", "text": "支持使用 MinGW 64 位编译器为 Windows 构建（Andrew Dunstan）", "title": "支持使用 MinGW 64 位编译器为 Windows 构建", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "e8e52806552c442ef98792964a68f5bb92d67e2fb40ca425a0cac85325456204", "section_path": ["变更"], "commit_groups": [], "identity_text": "Support building with MinGW 64 bit compiler for Windows (Andrew Dunstan)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/025", "db_id": "925dc1cb9ee564b1cb5ca8575b15a6a5", "patch_ids": [], "statement_hash": "24c1d446b374bbd890a982c1385c783244d821719f7ae0dfea566f6c7e9791df", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-104cb81fffcba80b", "cves": [], "html": "<p>修复 Windows 上 <span>libintl</span> 的版本不兼容问题（Hiroshi Inoue）</p>", "text": "修复 Windows 上 libintl 的版本不兼容问题（Hiroshi Inoue）", "title": "修复 Windows 上 libintl 的版本不兼容问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "ce3b752b3636974f10f6d1821e16738aa3711afbea973c7d3a90f2c8f1090d2e", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix version-incompatibility problem with libintl on Windows (Hiroshi Inoue)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/026", "db_id": "ecf30c2e17fc6cd1580536f7ed21253c", "patch_ids": [], "statement_hash": "4be8c709b51d8b9c035e8cd97c5e3248d5ab437c5a178178c376295f3e120e1f", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-98f2ea86678e9fb2", "cves": [], "html": "<p>修复 Windows 构建脚本中 <span>xcopy</span> 的用法，使其在 Windows 7 下正确工作（Andrew Dunstan）</p>\n<p>这只影响构建脚本，不影响安装或使用。</p>", "text": "修复 Windows 构建脚本中 xcopy 的用法，使其在 Windows 7 下正确工作（Andrew Dunstan） 这只影响构建脚本，不影响安装或使用。", "title": "修复 Windows 构建脚本中 xcopy 的用法，使其在 Windows 7 下正确工作", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "2df3226f7ad8b11960b232dc74a532805dd4f2140eac7a7e335802ea4b2627f8", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix usage of xcopy in Windows build scripts to work correctly under Windows 7 (Andrew Dunstan) This affects the build scripts only, not installation or usage.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/027", "db_id": "4d00478d9c47a06ca9f3d543f3898af3", "patch_ids": [], "statement_hash": "da231355ed59baeb6c660d03fba0ac58347d07f981fd64bbba7848bbcb939838", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-513af748539113b8", "cves": [], "html": "<p>修复 <span>pg_regress</span> 在 Cygwin 上使用的路径分隔符（Andrew Dunstan）</p>", "text": "修复 pg_regress 在 Cygwin 上使用的路径分隔符（Andrew Dunstan）", "title": "修复 pg_regress 在 Cygwin 上使用的路径分隔符", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "7531dfb226bf67b3efa6c38b5e0fb46742ec4b14b8b49369fb0d1920ce121a91", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix path separator used by pg_regress on Cygwin (Andrew Dunstan)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/028", "db_id": "f4e80b21d5f3019b09475b8c029a8968", "patch_ids": [], "statement_hash": "b1b7150d36e2116b85876d15b701e33fc9c8a8675aa75d8b3c0abf18ba34d14f", "relations": [], "version": "9.0.4", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": []}, {"id": "9.0.4-d3482a0d6a3b3126", "cves": [], "html": "<p>把时区数据文件更新为 <span>tzdata</span> 版本 2011f for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa, and Turkey; also historical corrections for South Australia, Alaska, and Hawaii。</p>", "text": "把时区数据文件更新为 tzdata 版本 2011f for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa, and Turkey; also historical corrections for South Australia, Alaska, and Hawaii。", "title": "把时区数据文件更新为 tzdata 版本 2011f for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa, and Turkey; also historical corrections for South Australia, Alaska, and Hawaii。", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.4/#id-1.11.6.24.5", "source_hash": "98ee97102389b6e247391cfda294d637234faac13615706d444e5a91349049a5", "section_path": ["变更"], "commit_groups": [], "identity_text": "Update time zone data files to tzdata release 2011f for DST law changes in Chile, Cuba, Falkland Islands, Morocco, Samoa, and Turkey; also historical corrections for South Australia, Alaska, and Hawaii.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.4/changes/029", "db_id": "302e2571da954235705734850ff42ef5", "patch_ids": [], "statement_hash": "760bae1b2eb7fa504f70224a404551ef62f6fad32fa3bdff2951b014de01c8bf", "relations": [], "version": "9.0.4", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": []}]}], "stats": [{"key": "all", "label": "全部变更", "count": 29}, {"key": "feature", "label": "新功能", "count": 0}, {"key": "bugfix", "label": "BUG 修复", "count": 18}, {"key": "security", "label": "安全相关", "count": 0}, {"key": "performance", "label": "性能改进", "count": 0}, {"key": "compatibility", "label": "兼容性变化", "count": 0}, {"key": "improvement", "label": "其他改进", "count": 11}], "total": 29, "release_count": 1, "cross_major": false, "cve_count": 0, "cves": [], "cve_available": true, "remaining_cves": [], "security_regressions": [], "warnings": [], "candidate_count": 29, "already_in_source_count": 0, "duplicate_count": 0, "excluded_count": 0, "exclusions": [], "source_as_of": "2026-09-26", "security_as_of": "2026-09-26"}