{"format": 1, "mode": "release", "from_release": null, "to_release": {"date": "2012-02-27", "build": "9.0.7", "major": "9.0", "minor": 7, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.7", "eol_date": "2015-10-08", "date_text": "2012-02-27", "supported": false, "manual_url": "/docs/9.0/release-9-0-7.html", "source_url": "/docs/release/9.0.7/", "entry_count": 35, "placeholder": false, "content_hash": "57969d045c73fd4a8d20ee04b0236e7734d0ab8c10ba6062cf9d73c5fdebb613", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 35, "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.7", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5329, "support_days": -4010}, "groups": [{"date": "2012-02-27", "build": "9.0.7", "major": "9.0", "minor": 7, "manual": "9.0", "status": "stable", "doc_git": "", "version": "9.0.7", "eol_date": "2015-10-08", "date_text": "2012-02-27", "supported": false, "manual_url": "/docs/9.0/release-9-0-7.html", "source_url": "/docs/release/9.0.7/", "entry_count": 35, "placeholder": false, "content_hash": "57969d045c73fd4a8d20ee04b0236e7734d0ab8c10ba6062cf9d73c5fdebb613", "manual_build": "9.0.23", "source_as_of": "", "changes_count": 35, "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.7", "status_label": "历史版本", "eol": "2015-10-08", "age_days": 5329, "support_days": -4010, "entries": [{"id": "9.0.7-f083a5a6d2ce0179", "cves": ["CVE-2012-0866"], "html": "<p>让 <code>CREATE TRIGGER</code> 要求对触发器函数有执行权限（Robert Haas）</p>\n<p>这一缺失的检查可能允许另一用户通过把触发器函数安装到自己拥有的表上，以伪造的输入数据执行该触发器函数。这只对标记为 <code>SECURITY DEFINER</code> 的触发器函数有影响，因为其他情况下触发器函数本来就以表所有者身份运行。（CVE-2012-0866）</p>", "text": "让 CREATE TRIGGER 要求对触发器函数有执行权限（Robert Haas） 这一缺失的检查可能允许另一用户通过把触发器函数安装到自己拥有的表上，以伪造的输入数据执行该触发器函数。这只对标记为 SECURITY DEFINER 的触发器函数有影响，因为其他情况下触发器函数本来就以表所有者身份运行。（CVE-2012-0866）", "title": "让 CREATE TRIGGER 要求对触发器函数有执行权限", "commits": [], "section": "变更", "category": "security", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "f185c98c9271cbedf976f32c3ae8420689685928240a9782e2334da90d417ea7", "section_path": ["变更"], "commit_groups": [], "identity_text": "Require execute permission on the trigger function for CREATE TRIGGER (Robert Haas) This missing check could allow another user to execute a trigger function with forged input data, by installing it on a table he owns. This is only of significance for trigger functions marked SECURITY DEFINER, since otherwise trigger functions run as the table owner anyway. (CVE-2012-0866)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/001", "db_id": "26b02113f452aaaf624bf2520ac53149", "patch_ids": [], "statement_hash": "19f57d30fbe16a8863a49850917ed4d43cb2f8009b070386942c582390d4a83b", "relations": [{"rule": 2, "type": "equivalent", "target": "680e859597132b24c2d158d94fb28370", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "19f57d30fbe16a8863a49850917ed4d43cb2f8009b070386942c582390d4a83b"}}], "version": "9.0.7", "category_label": "安全相关", "also_in": [], "variants": [], "related_changes": [{"db_id": "680e859597132b24c2d158d94fb28370", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "让 CREATE TRIGGER 要求对触发器函数有执行权限", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "19f57d30fbe16a8863a49850917ed4d43cb2f8009b070386942c582390d4a83b"}, "url": "/docs/compare/?release=9.1.3#9.1.3-f083a5a6d2ce0179", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-df1d463a920aaa1e", "cves": ["CVE-2012-0867"], "html": "<p>移除 SSL 证书中通用名长度的任意限制（Heikki Linnakangas）</p>\n<p><span>libpq</span> 和服务器此前都会把从 SSL 证书提取的通用名截断到 32 字节。通常这最坏只会造成意外的验证失败，但在一些相当难以置信的场景下，它可能允许一个证书持有者冒充另一个。受害者必须恰好有 32 字节长的通用名，而攻击者必须说服受信任的 CA 颁发一个通用名以该字符串为前缀的证书。冒充服务器还需要额外的攻击手段来重定向客户端连接。（CVE-2012-0867）</p>", "text": "移除 SSL 证书中通用名长度的任意限制（Heikki Linnakangas） libpq 和服务器此前都会把从 SSL 证书提取的通用名截断到 32 字节。通常这最坏只会造成意外的验证失败，但在一些相当难以置信的场景下，它可能允许一个证书持有者冒充另一个。受害者必须恰好有 32 字节长的通用名，而攻击者必须说服受信任的 CA 颁发一个通用名以该字符串为前缀的证书。冒充服务器还需要额外的攻击手段来重定向客户端连接。（CVE-2012-0867）", "title": "移除 SSL 证书中通用名长度的任意限制", "commits": [], "section": "变更", "category": "security", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "534e4e83a825e240a1ba001c9324d2e088842ad9d972e5cf07a115324d8b7c93", "section_path": ["变更"], "commit_groups": [], "identity_text": "Remove arbitrary limitation on length of common name in SSL certificates (Heikki Linnakangas) Both libpq and the server truncated the common name extracted from an SSL certificate at 32 bytes. Normally this would cause nothing worse than an unexpected verification failure, but there are some rather-implausible scenarios in which it might allow one certificate holder to impersonate another. The victim would have to have a common name exactly 32 bytes long, and the attacker would have to persuade a trusted CA to issue a certificate in which the common name has that string as a prefix. Impersonating a server would also require some additional exploit to redirect client connections. (CVE-2012-0867)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/002", "db_id": "54d6b75ce33ca34c85740d0964067e06", "patch_ids": [], "statement_hash": "1f6119daf181f5172be4537e26fa9333ca8a7e6116f75eb15c40500d68e5bb08", "relations": [{"rule": 2, "type": "equivalent", "target": "609aa3e3f09561d954d9de731da005a9", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "1f6119daf181f5172be4537e26fa9333ca8a7e6116f75eb15c40500d68e5bb08"}}], "version": "9.0.7", "category_label": "安全相关", "also_in": [], "variants": [], "related_changes": [{"db_id": "609aa3e3f09561d954d9de731da005a9", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "移除 SSL 证书中通用名长度的任意限制", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "1f6119daf181f5172be4537e26fa9333ca8a7e6116f75eb15c40500d68e5bb08"}, "url": "/docs/compare/?release=9.1.3#9.1.3-df1d463a920aaa1e", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-ad3fba8fa05ed7c5", "cves": ["CVE-2012-0868"], "html": "<p>把 <span>pg_dump</span> 注释中写入的名称里的换行符转换为空格（Robert Haas）</p>\n<p><span>pg_dump</span> 此前对其输出脚本中 SQL 注释内写出的对象名清理不慎。包含换行符的名称至少会使脚本语法错误。恶意构造的对象名可能在脚本重载时构成 SQL 注入风险。（CVE-2012-0868）</p>", "text": "把 pg_dump 注释中写入的名称里的换行符转换为空格（Robert Haas） pg_dump 此前对其输出脚本中 SQL 注释内写出的对象名清理不慎。包含换行符的名称至少会使脚本语法错误。恶意构造的对象名可能在脚本重载时构成 SQL 注入风险。（CVE-2012-0868）", "title": "把 pg_dump 注释中写入的名称里的换行符转换为空格", "commits": [], "section": "变更", "category": "security", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "4a8938e378199e03db0bf2d07aadb973d24a59c4fd9281d164b000d208727b7a", "section_path": ["变更"], "commit_groups": [], "identity_text": "Convert newlines to spaces in names written in pg_dump comments (Robert Haas) pg_dump was incautious about sanitizing object names that are emitted within SQL comments in its output script. A name containing a newline would at least render the script syntactically incorrect. Maliciously crafted object names could present a SQL injection risk when the script is reloaded. (CVE-2012-0868)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/003", "db_id": "bd58f457a1fa901a54216b90cd88d6f9", "patch_ids": [], "statement_hash": "8ee87ada79326bd22269ee74be7442cb685114eb3498acd94ed9c1d4c73a8cc9", "relations": [{"rule": 2, "type": "equivalent", "target": "4bd5cdda7438441a9815ce950f8c7201", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "8ee87ada79326bd22269ee74be7442cb685114eb3498acd94ed9c1d4c73a8cc9"}}], "version": "9.0.7", "category_label": "安全相关", "also_in": [], "variants": [], "related_changes": [{"db_id": "4bd5cdda7438441a9815ce950f8c7201", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "把 pg_dump 注释中写入的名称里的换行符转换为空格", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "8ee87ada79326bd22269ee74be7442cb685114eb3498acd94ed9c1d4c73a8cc9"}, "url": "/docs/compare/?release=9.1.3#9.1.3-ad3fba8fa05ed7c5", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-e0533db610f7ca11", "cves": [], "html": "<p>修复插入与清理并发导致 btree 索引损坏的问题（Tom Lane）</p>\n<p>插入导致的索引页分裂有时会使并发运行的 <code>VACUUM</code> 漏删本应删除的索引项。在相应的表行被删除后，悬空的索引项会导致错误（例如 <span>“<span>could not read block N in file ...</span>”</span>），或者更糟：当不相关的行被重新插入到现已空闲的表位置后，查询会静默地得到错误结果。该缺陷自 8.2 起就存在，但发生频率极低，直到现在才被诊断出来。如果你有理由怀疑它曾在你的数据库中发生，对受影响的索引重建索引即可修复。</p>", "text": "修复插入与清理并发导致 btree 索引损坏的问题（Tom Lane） 插入导致的索引页分裂有时会使并发运行的 VACUUM 漏删本应删除的索引项。在相应的表行被删除后，悬空的索引项会导致错误（例如 “could not read block N in file ...”），或者更糟：当不相关的行被重新插入到现已空闲的表位置后，查询会静默地得到错误结果。该缺陷自 8.2 起就存在，但发生频率极低，直到现在才被诊断出来。如果你有理由怀疑它曾在你的数据库中发生，对受影响的索引重建索引即可修复。", "title": "修复插入与清理并发导致 btree 索引损坏的问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "8ee5c3c06ab2298247401d4b53c84b1996c08a75f037496d39e220cf334be864", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix btree index corruption from insertions concurrent with vacuuming (Tom Lane) An index page split caused by an insertion could sometimes cause a concurrently-running VACUUM to miss removing index entries that it should remove. After the corresponding table rows are removed, the dangling index entries would cause errors (such as could not read block N in file ...) or worse, silently wrong query results after unrelated rows are re-inserted at the now-free table locations. This bug has been present since release 8.2, but occurs so infrequently that it was not diagnosed until now. If you have reason to suspect that it has happened in your database, reindexing the affected index will fix things.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/004", "db_id": "f7ac8a299522ac33b856b0ecece0dc73", "patch_ids": [], "statement_hash": "3643ac225f7f4bab62b8312d1ff0a3076206add00fc40bf2b3cad2c3f8ada5bd", "relations": [{"rule": 2, "type": "equivalent", "target": "ec8bc47e3a27c09da3ad5fcb19702699", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3643ac225f7f4bab62b8312d1ff0a3076206add00fc40bf2b3cad2c3f8ada5bd"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "ec8bc47e3a27c09da3ad5fcb19702699", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复插入与清理并发导致 btree 索引损坏的问题", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3643ac225f7f4bab62b8312d1ff0a3076206add00fc40bf2b3cad2c3f8ada5bd"}, "url": "/docs/compare/?release=9.1.3#9.1.3-e0533db610f7ca11", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-0ba85772db2d9970", "cves": [], "html": "<p>修复 WAL 重放期间共享缓冲区的瞬时清零（Tom Lane）</p>\n<p>重放逻辑有时会把一个共享缓冲区清零再重新填充，使其内容瞬时无效。在热备模式下，这可能导致并行执行的查询看到垃圾数据。这可能引发各种症状，但最常见的好像是 <span>“<span>invalid memory alloc request size</span>”</span>。</p>", "text": "修复 WAL 重放期间共享缓冲区的瞬时清零（Tom Lane） 重放逻辑有时会把一个共享缓冲区清零再重新填充，使其内容瞬时无效。在热备模式下，这可能导致并行执行的查询看到垃圾数据。这可能引发各种症状，但最常见的好像是 “invalid memory alloc request size”。", "title": "修复 WAL 重放期间共享缓冲区的瞬时清零", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "2a82b508f0f0910117c0364ddeab358dfd30d393d984c207ca99c8c9754ddc07", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix transient zeroing of shared buffers during WAL replay (Tom Lane) The replay logic would sometimes zero and refill a shared buffer, so that the contents were transiently invalid. In hot standby mode this can result in a query that's executing in parallel seeing garbage data. Various symptoms could result from that, but the most common one seems to be invalid memory alloc request size.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/005", "db_id": "b3c5285a82bee94642b1e78ca2cc1b48", "patch_ids": [], "statement_hash": "090fc8d3b10c7340835a3115b64147fac0ff48e28091a7f81cbd3f634be1cc25", "relations": [{"rule": 2, "type": "equivalent", "target": "96c35f4e4282161ae5e4d0c45c634a76", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "090fc8d3b10c7340835a3115b64147fac0ff48e28091a7f81cbd3f634be1cc25"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "96c35f4e4282161ae5e4d0c45c634a76", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 WAL 重放期间共享缓冲区的瞬时清零", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "090fc8d3b10c7340835a3115b64147fac0ff48e28091a7f81cbd3f634be1cc25"}, "url": "/docs/compare/?release=9.1.3#9.1.3-0ba85772db2d9970", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-ec849f62a0661a97", "cves": [], "html": "<p>修复 postmaster，使其在热备崩溃后尝试重启（Tom Lane）</p>\n<p>一个逻辑错误导致：如果有后端进程在热备模式下运行时崩溃，postmaster 会终止而不是尝试重启集簇。</p>", "text": "修复 postmaster，使其在热备崩溃后尝试重启（Tom Lane） 一个逻辑错误导致：如果有后端进程在热备模式下运行时崩溃，postmaster 会终止而不是尝试重启集簇。", "title": "修复 postmaster，使其在热备崩溃后尝试重启", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "d8a3e132e26fa2824c24f62aa160c54fadacad8bb9d694b7694b500230a43ab4", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix postmaster to attempt restart after a hot-standby crash (Tom Lane) A logic error caused the postmaster to terminate, rather than attempt to restart the cluster, if any backend process crashed while operating in hot standby mode.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/006", "db_id": "f994282056023c0e0d9fea5ca06dd491", "patch_ids": [], "statement_hash": "2d81200d6fc3ee5821f25b45f09d430d9adb7b9e29fb30097017d8804c9b708c", "relations": [{"rule": 2, "type": "equivalent", "target": "cfa701801201c939ec4e83f8c9e4e7b9", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "2d81200d6fc3ee5821f25b45f09d430d9adb7b9e29fb30097017d8804c9b708c"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "cfa701801201c939ec4e83f8c9e4e7b9", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 postmaster，使其在热备崩溃后尝试重启", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "2d81200d6fc3ee5821f25b45f09d430d9adb7b9e29fb30097017d8804c9b708c"}, "url": "/docs/compare/?release=9.1.3#9.1.3-ec849f62a0661a97", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-6896362fe11bd211", "cves": [], "html": "<p>修复 <code>CLUSTER</code>/<code>VACUUM FULL</code> 对最近更新的行所拥有的 toast 值的处理（Tom Lane）</p>\n<p>这一疏忽可能导致在这些命令之一执行期间，toast 表的索引报 <span>“<span>duplicate key value violates unique constraint</span>”</span> 错误。</p>", "text": "修复 CLUSTER/VACUUM FULL 对最近更新的行所拥有的 toast 值的处理（Tom Lane） 这一疏忽可能导致在这些命令之一执行期间，toast 表的索引报 “duplicate key value violates unique constraint” 错误。", "title": "修复 CLUSTER/VACUUM FULL 对最近更新的行所拥有的 toast 值的处理", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "ce96eac0a4fb494dedc44b7e84c28b89abb0ff2d15656e8dfbaf4446e2afa017", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix CLUSTER/VACUUM FULL handling of toast values owned by recently-updated rows (Tom Lane) This oversight could lead to duplicate key value violates unique constraint errors being reported against the toast table's index during one of these commands.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/007", "db_id": "b8f1ea8e66a4638bdb76dc28bee9625a", "patch_ids": [], "statement_hash": "53cd09b11d1808b31e43a6d20983dee50115f3d5b2c1490d23c7e118b0d26f8e", "relations": [{"rule": 2, "type": "equivalent", "target": "730e06b0bc38bccf6a6c0f0d9b2e3c5d", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "53cd09b11d1808b31e43a6d20983dee50115f3d5b2c1490d23c7e118b0d26f8e"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "730e06b0bc38bccf6a6c0f0d9b2e3c5d", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 CLUSTER/VACUUM FULL 对最近更新的行所拥有的 toast 值的处理", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "53cd09b11d1808b31e43a6d20983dee50115f3d5b2c1490d23c7e118b0d26f8e"}, "url": "/docs/compare/?release=9.1.3#9.1.3-6896362fe11bd211", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-8c8e7746cdf57aaa", "cves": [], "html": "<p>更改表所有者时，不仅更新表级权限，也更新逐列权限（Tom Lane）</p>\n<p>未做到这一点意味着，此前授予的所有列权限仍显示为由旧所有者授予。这导致新所有者和超级用户都无法撤销这些现在无法追溯到表所有者的权限。</p>", "text": "更改表所有者时，不仅更新表级权限，也更新逐列权限（Tom Lane） 未做到这一点意味着，此前授予的所有列权限仍显示为由旧所有者授予。这导致新所有者和超级用户都无法撤销这些现在无法追溯到表所有者的权限。", "title": "更改表所有者时，不仅更新表级权限，也更新逐列权限", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "e002ec23afbaa600fcbc50e95c448435169fe1936c0269a682a498b4ecc826c3", "section_path": ["变更"], "commit_groups": [], "identity_text": "Update per-column permissions, not only per-table permissions, when changing table owner (Tom Lane) Failure to do this meant that any previously granted column permissions were still shown as having been granted by the old owner. This meant that neither the new owner nor a superuser could revoke the now-untraceable-to-table-owner permissions.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/008", "db_id": "d89ff54da92bdae6c96e370f9ddc51fc", "patch_ids": [], "statement_hash": "93cf15145a719354196c33610e3d4f572dc9d86e3351b2a8bd6464ad4c28c922", "relations": [{"rule": 2, "type": "equivalent", "target": "3045b0625786e25e788c78b16b9efabd", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "93cf15145a719354196c33610e3d4f572dc9d86e3351b2a8bd6464ad4c28c922"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "3045b0625786e25e788c78b16b9efabd", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "更改表所有者时，不仅更新表级权限，也更新逐列权限", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "93cf15145a719354196c33610e3d4f572dc9d86e3351b2a8bd6464ad4c28c922"}, "url": "/docs/compare/?release=9.1.3#9.1.3-8c8e7746cdf57aaa", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-b2c482552241f084", "cves": [], "html": "<p>在 <code>REASSIGN OWNED</code> 中支持外部数据包装器和外部服务器（Alvaro Herrera）</p>\n<p>如果该命令需要更改任何这类对象的所有权，会报 <span>“<span>unexpected classid</span>”</span> 错误。</p>", "text": "在 REASSIGN OWNED 中支持外部数据包装器和外部服务器（Alvaro Herrera） 如果该命令需要更改任何这类对象的所有权，会报 “unexpected classid” 错误。", "title": "在 REASSIGN OWNED 中支持外部数据包装器和外部服务器", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "1c0087ccfd39a0e2284fe81a6be82c0a7720f8577153f0ae65fc76b259e57076", "section_path": ["变更"], "commit_groups": [], "identity_text": "Support foreign data wrappers and foreign servers in REASSIGN OWNED (Alvaro Herrera) This command failed with unexpected classid errors if it needed to change the ownership of any such objects.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/009", "db_id": "1bd76939a626e129bc8e63ab53648b06", "patch_ids": [], "statement_hash": "c92e0cee2c2e73610943fbecb08dfc69cd047c37016f63f382f8be6803afa9eb", "relations": [{"rule": 2, "type": "equivalent", "target": "703cc5614f37d7592e45176e3bc45ae9", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "c92e0cee2c2e73610943fbecb08dfc69cd047c37016f63f382f8be6803afa9eb"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "703cc5614f37d7592e45176e3bc45ae9", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "在 REASSIGN OWNED 中支持外部数据包装器和外部服务器", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "c92e0cee2c2e73610943fbecb08dfc69cd047c37016f63f382f8be6803afa9eb"}, "url": "/docs/compare/?release=9.1.3#9.1.3-b2c482552241f084", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-8d8836ef8f7032bb", "cves": [], "html": "<p>允许 <code>ALTER USER/DATABASE SET</code> 中某些设置取不存在的值（Heikki Linnakangas）</p>\n<p>允许把 <code>default_text_search_config</code>、<code>default_tablespace</code> 和 <code>temp_tablespaces</code> 设为未知的名称。这是因为设置要在其中使用的另一个数据库中它们可能是已知的；对表空间的情况，则是因为表空间可能尚未创建。此前 <code>search_path</code> 已被认识到有同样的问题，这些设置现在的行为与它一致。</p>", "text": "允许 ALTER USER/DATABASE SET 中某些设置取不存在的值（Heikki Linnakangas） 允许把 default_text_search_config、default_tablespace 和 temp_tablespaces 设为未知的名称。这是因为设置要在其中使用的另一个数据库中它们可能是已知的；对表空间的情况，则是因为表空间可能尚未创建。此前 search_path 已被认识到有同样的问题，这些设置现在的行为与它一致。", "title": "允许 ALTER USER/DATABASE SET 中某些设置取不存在的值", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "e0d2612d9c74e5f8365d58842d6aaae52178f090efda6615a0d2c57e4237a43e", "section_path": ["变更"], "commit_groups": [], "identity_text": "Allow non-existent values for some settings in ALTER USER/DATABASE SET (Heikki Linnakangas) Allow default_text_search_config, default_tablespace, and temp_tablespaces to be set to names that are not known. This is because they might be known in another database where the setting is intended to be used, or for the tablespace cases because the tablespace might not be created yet. The same issue was previously recognized for search_path, and these settings now act like that one.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/010", "db_id": "f805e469aabaaf4f45b068c452ff07b2", "patch_ids": [], "statement_hash": "b945b45efaa386b8ab42d4639b3ba15ac1f0084e5e4583a0ce90f545e37521ed", "relations": [{"rule": 2, "type": "equivalent", "target": "3604b11f214ac6572537274e583518cc", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "b945b45efaa386b8ab42d4639b3ba15ac1f0084e5e4583a0ce90f545e37521ed"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "3604b11f214ac6572537274e583518cc", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "允许 ALTER USER/DATABASE SET 中某些设置取不存在的值", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "b945b45efaa386b8ab42d4639b3ba15ac1f0084e5e4583a0ce90f545e37521ed"}, "url": "/docs/compare/?release=9.1.3#9.1.3-8d8836ef8f7032bb", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-32d51ef42271fc7b", "cves": [], "html": "<p>避免在提交后删除表文件出现问题时崩溃（Tom Lane）</p>\n<p>删除表应只在事务提交后才删除底层磁盘文件。如果那时失败（例如因为文件权限错误），代码本应只发出警告消息并继续，因为此时中止事务已为时过晚。这一逻辑从 8.4 起被破坏，导致这类情况引发 PANIC 和无法重启的数据库。</p>", "text": "避免在提交后删除表文件出现问题时崩溃（Tom Lane） 删除表应只在事务提交后才删除底层磁盘文件。如果那时失败（例如因为文件权限错误），代码本应只发出警告消息并继续，因为此时中止事务已为时过晚。这一逻辑从 8.4 起被破坏，导致这类情况引发 PANIC 和无法重启的数据库。", "title": "避免在提交后删除表文件出现问题时崩溃", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "7c00c6db05f5ff9d8ffedcd498fd2d744af44e04c55aa4a574c65d609f8c206d", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid crashing when we have problems deleting table files post-commit (Tom Lane) Dropping a table should lead to deleting the underlying disk files only after the transaction commits. In event of failure then (for instance, because of wrong file permissions) the code is supposed to just emit a warning message and go on, since it's too late to abort the transaction. This logic got broken as of release 8.4, causing such situations to result in a PANIC and an unrestartable database.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/011", "db_id": "a1388272176a08fb3acffcbcb9594e1f", "patch_ids": [], "statement_hash": "33275906ebd74a09f4eac93b40b396764580f92662e967a85376ac96bb75abe0", "relations": [{"rule": 2, "type": "equivalent", "target": "d49ff4bb32fd078e37e1f87d3f65af49", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "33275906ebd74a09f4eac93b40b396764580f92662e967a85376ac96bb75abe0"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "d49ff4bb32fd078e37e1f87d3f65af49", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "避免在提交后删除表文件出现问题时崩溃", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "33275906ebd74a09f4eac93b40b396764580f92662e967a85376ac96bb75abe0"}, "url": "/docs/compare/?release=9.1.3#9.1.3-32d51ef42271fc7b", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-07407b6c0f2c4122", "cves": [], "html": "<p>从 <code>DROP TABLESPACE</code> 的 WAL 重放期间的错误中恢复（Tom Lane）</p>\n<p>重放会尝试删除表空间的目录，但这可能因各种原因失败（例如这些目录的所有权或权限不正确）。此前重放代码会 panic，使数据库在没有人工干预的情况下无法重启。记录问题并继续似乎更好，因为删除目录失败唯一后果只是浪费一些磁盘空间。</p>", "text": "从 DROP TABLESPACE 的 WAL 重放期间的错误中恢复（Tom Lane） 重放会尝试删除表空间的目录，但这可能因各种原因失败（例如这些目录的所有权或权限不正确）。此前重放代码会 panic，使数据库在没有人工干预的情况下无法重启。记录问题并继续似乎更好，因为删除目录失败唯一后果只是浪费一些磁盘空间。", "title": "从 DROP TABLESPACE 的 WAL 重放期间的错误中恢复", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "5bcbee6e1f8a04b37d51d94185db2a1140b48110816d70ed2973f2d1e16b3222", "section_path": ["变更"], "commit_groups": [], "identity_text": "Recover from errors occurring during WAL replay of DROP TABLESPACE (Tom Lane) Replay will attempt to remove the tablespace's directories, but there are various reasons why this might fail (for example, incorrect ownership or permissions on those directories). Formerly the replay code would panic, rendering the database unrestartable without manual intervention. It seems better to log the problem and continue, since the only consequence of failure to remove the directories is some wasted disk space.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/012", "db_id": "908b78a5dbe0c616f0dda2e3a98f80db", "patch_ids": [], "statement_hash": "7877bee24a684d4b6640392c42741c6743f335e590f8c5bbe382c83ca9339226", "relations": [{"rule": 2, "type": "equivalent", "target": "45a4ade1a57c75713e646f80e8668fe1", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "7877bee24a684d4b6640392c42741c6743f335e590f8c5bbe382c83ca9339226"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "45a4ade1a57c75713e646f80e8668fe1", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "从 DROP TABLESPACE 的 WAL 重放期间的错误中恢复", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "7877bee24a684d4b6640392c42741c6743f335e590f8c5bbe382c83ca9339226"}, "url": "/docs/compare/?release=9.1.3#9.1.3-07407b6c0f2c4122", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-3e7e45a2db46e982", "cves": [], "html": "<p>修复为热备记录 AccessExclusiveLock 时的竞态条件（Simon Riggs）</p>\n<p>有时锁会被记录为由<span>“<span>事务零</span>”</span>持有。至少已知这会在从库服务器上产生断言失败，还可能是更严重问题的原因。</p>", "text": "修复为热备记录 AccessExclusiveLock 时的竞态条件（Simon Riggs） 有时锁会被记录为由“事务零”持有。至少已知这会在从库服务器上产生断言失败，还可能是更严重问题的原因。", "title": "修复为热备记录 AccessExclusiveLock 时的竞态条件", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "188cc726c414bc29aeea88ebb0330986e8682c75405a0bfde813ee79c3a0d9ef", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix race condition in logging AccessExclusiveLocks for hot standby (Simon Riggs) Sometimes a lock would be logged as being held by transaction zero. This is at least known to produce assertion failures on slave servers, and might be the cause of more serious problems.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/013", "db_id": "78f489ca6fb603bb8b16b274cc3230a7", "patch_ids": [], "statement_hash": "7d2519ddaa4595857e71eadf1b8067b1af6ed49a0983358236d5703da7022146", "relations": [{"rule": 2, "type": "equivalent", "target": "37143f979d46181eb9292e3f1625a663", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "7d2519ddaa4595857e71eadf1b8067b1af6ed49a0983358236d5703da7022146"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "37143f979d46181eb9292e3f1625a663", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复为热备记录 AccessExclusiveLock 时的竞态条件", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "7d2519ddaa4595857e71eadf1b8067b1af6ed49a0983358236d5703da7022146"}, "url": "/docs/compare/?release=9.1.3#9.1.3-3e7e45a2db46e982", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-6eb2d4f77b7db1d9", "cves": [], "html": "<p>在 WAL 重放期间正确跟踪 OID 计数器，即使它发生回卷（Tom Lane）</p>\n<p>此前 OID 计数器会一直停留在高值，直到系统退出重放模式。其实际后果通常为零，但在某些场景下，已提升为主库的备库服务器在需要 OID 值时，可能要很长时间才能把 OID 计数器推进到合理的值。</p>", "text": "在 WAL 重放期间正确跟踪 OID 计数器，即使它发生回卷（Tom Lane） 此前 OID 计数器会一直停留在高值，直到系统退出重放模式。其实际后果通常为零，但在某些场景下，已提升为主库的备库服务器在需要 OID 值时，可能要很长时间才能把 OID 计数器推进到合理的值。", "title": "在 WAL 重放期间正确跟踪 OID 计数器，即使它发生回卷", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "9062bfd4e02214f12e7200f50401beb06f6110abde916304df19f5f33789787b", "section_path": ["变更"], "commit_groups": [], "identity_text": "Track the OID counter correctly during WAL replay, even when it wraps around (Tom Lane) Previously the OID counter would remain stuck at a high value until the system exited replay mode. The practical consequences of that are usually nil, but there are scenarios wherein a standby server that's been promoted to master might take a long time to advance the OID counter to a reasonable value once values are needed.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/014", "db_id": "7c88bc39a1c2c77547b05a411b780977", "patch_ids": [], "statement_hash": "991d6135c75d4274d68b016f26845aead1591748bddf38e3da2eb23085ef5ae6", "relations": [{"rule": 2, "type": "equivalent", "target": "b107080e846200423e9f1e5fc0858c97", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "991d6135c75d4274d68b016f26845aead1591748bddf38e3da2eb23085ef5ae6"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "b107080e846200423e9f1e5fc0858c97", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "在 WAL 重放期间正确跟踪 OID 计数器，即使它发生回卷", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "991d6135c75d4274d68b016f26845aead1591748bddf38e3da2eb23085ef5ae6"}, "url": "/docs/compare/?release=9.1.3#9.1.3-6eb2d4f77b7db1d9", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-840fb2b6366d32fb", "cves": [], "html": "<p>防止在崩溃恢复开始时发出误导性的 <span>“<span>consistent recovery state reached</span>”</span> 日志消息（Heikki Linnakangas）</p>", "text": "防止在崩溃恢复开始时发出误导性的 “consistent recovery state reached” 日志消息（Heikki Linnakangas）", "title": "防止在崩溃恢复开始时发出误导性的 “consistent recovery state reached” 日志消息", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "ae1efc868fd3efa3744e73a0764dda77d1b0ec44ddd1edddaf8ef5e8543f42b1", "section_path": ["变更"], "commit_groups": [], "identity_text": "Prevent emitting misleading consistent recovery state reached log message at the beginning of crash recovery (Heikki Linnakangas)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/015", "db_id": "da68b6a249a4586d59ac0da69852e068", "patch_ids": [], "statement_hash": "3997e9004537d3a05fd28f797f7678ba0ee3de0950c2bacfa99899dbc584fdd6", "relations": [{"rule": 2, "type": "equivalent", "target": "325476af3c77ccef992a95250a47a827", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3997e9004537d3a05fd28f797f7678ba0ee3de0950c2bacfa99899dbc584fdd6"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "325476af3c77ccef992a95250a47a827", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "防止在崩溃恢复开始时发出误导性的 “consistent recovery state reached” 日志消息", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3997e9004537d3a05fd28f797f7678ba0ee3de0950c2bacfa99899dbc584fdd6"}, "url": "/docs/compare/?release=9.1.3#9.1.3-840fb2b6366d32fb", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-6a332cf1c1973570", "cves": [], "html": "<p>修复 <code>pg_stat_replication</code>.<code>replay_location</code> 的初始值（Fujii Masao）</p>\n<p>此前，在至少重放一条 WAL 记录之前，显示的值是错误的。</p>", "text": "修复 pg_stat_replication.replay_location 的初始值（Fujii Masao） 此前，在至少重放一条 WAL 记录之前，显示的值是错误的。", "title": "修复 pg_stat_replication.replay_location 的初始值", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "7394dc519199f7acaf5b4551c5a2e9a7f9fa93d2b829a1c095c035ac55bd3501", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix initial value of pg_stat_replication.replay_location (Fujii Masao) Previously, the value shown would be wrong until at least one WAL record had been replayed.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/016", "db_id": "2c63667e320d63612a8300f028bcbe84", "patch_ids": [], "statement_hash": "631b8cc2971ea5676587d6c0bd66830854e392ba6e0f333ea63dbc67618595a2", "relations": [{"rule": 2, "type": "equivalent", "target": "a882e3aba8b52ba172262ed7aa9329c0", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "631b8cc2971ea5676587d6c0bd66830854e392ba6e0f333ea63dbc67618595a2"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "a882e3aba8b52ba172262ed7aa9329c0", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 pg_stat_replication.replay_location 的初始值", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "631b8cc2971ea5676587d6c0bd66830854e392ba6e0f333ea63dbc67618595a2"}, "url": "/docs/compare/?release=9.1.3#9.1.3-6a332cf1c1973570", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-cae05cd76680812f", "cves": [], "html": "<p>修复带 <code>*</code> 的正则表达式反向引用（Tom Lane）</p>\n<p>代码实际上并不强制精确字符串匹配，而是接受任何满足反向引用符号所引用的模式子表达式的字符串。</p>\n<p>类似问题仍困扰着嵌入在更大带量词表达式中（而非量词直接作用对象）的反向引用。这将在未来的 <span>PostgreSQL</span> 版本中解决。</p>", "text": "修复带 * 的正则表达式反向引用（Tom Lane） 代码实际上并不强制精确字符串匹配，而是接受任何满足反向引用符号所引用的模式子表达式的字符串。 类似问题仍困扰着嵌入在更大带量词表达式中（而非量词直接作用对象）的反向引用。这将在未来的 PostgreSQL 版本中解决。", "title": "修复带 * 的正则表达式反向引用", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "ce52410ddcf3f7dbebbe5d850d9f7b3c47ed5e87b349e5e24bd0c64fa4fa80e0", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix regular expression back-references with * attached (Tom Lane) Rather than enforcing an exact string match, the code would effectively accept any string that satisfies the pattern sub-expression referenced by the back-reference symbol. A similar problem still afflicts back-references that are embedded in a larger quantified expression, rather than being the immediate subject of the quantifier. This will be addressed in a future PostgreSQL release.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/017", "db_id": "7e442e3cb2a23239e845297d4db918d7", "patch_ids": [], "statement_hash": "6d0110b8ac06cfe572b8de35153a57c8a7001379b82707f1053c917f21f7630b", "relations": [{"rule": 2, "type": "equivalent", "target": "a6ec364b24724dec9c036e0aa05c713d", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6d0110b8ac06cfe572b8de35153a57c8a7001379b82707f1053c917f21f7630b"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "a6ec364b24724dec9c036e0aa05c713d", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复带 * 的正则表达式反向引用", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6d0110b8ac06cfe572b8de35153a57c8a7001379b82707f1053c917f21f7630b"}, "url": "/docs/compare/?release=9.1.3#9.1.3-cae05cd76680812f", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-ecec12062949cf50", "cves": [], "html": "<p>修复最近引入的 <code>inet</code>/<code>cidr</code> 值处理中的内存泄漏（Heikki Linnakangas）</p>\n<p><span>PostgreSQL</span> 2011 年 12 月版本中的一个补丁导致这些操作中的内存泄漏，在此类列上构建 btree 索引等场景中可能相当显著。</p>", "text": "修复最近引入的 inet/cidr 值处理中的内存泄漏（Heikki Linnakangas） PostgreSQL 2011 年 12 月版本中的一个补丁导致这些操作中的内存泄漏，在此类列上构建 btree 索引等场景中可能相当显著。", "title": "修复最近引入的 inet/cidr 值处理中的内存泄漏", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "293d39a7abde2093ec7f358909adf7e0bda763b70a2407205ce913e824c4a34c", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix recently-introduced memory leak in processing of inet/cidr values (Heikki Linnakangas) A patch in the December 2011 releases of PostgreSQL caused memory leakage in these operations, which could be significant in scenarios such as building a btree index on such a column.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/018", "db_id": "cd8089e79cb365365b68d08c6392598a", "patch_ids": [], "statement_hash": "f433343748cac74886853901f86a81320e9550f5ea7973e6261f35a4266faef3", "relations": [{"rule": 2, "type": "equivalent", "target": "243f77125011a59f7470f2ff416f1922", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "f433343748cac74886853901f86a81320e9550f5ea7973e6261f35a4266faef3"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "243f77125011a59f7470f2ff416f1922", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复最近引入的 inet/cidr 值处理中的内存泄漏", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "f433343748cac74886853901f86a81320e9550f5ea7973e6261f35a4266faef3"}, "url": "/docs/compare/?release=9.1.3#9.1.3-ecec12062949cf50", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-cf876d2ac3d432d2", "cves": [], "html": "<p>修复 SQL 语言函数中 <code>CREATE TABLE AS</code>/<code>SELECT INTO</code> 之后的悬空指针（Tom Lane）</p>\n<p>大多数情况下这只会在启用断言的构建中导致断言失败，但似乎可能有更糟的后果。</p>", "text": "修复 SQL 语言函数中 CREATE TABLE AS/SELECT INTO 之后的悬空指针（Tom Lane） 大多数情况下这只会在启用断言的构建中导致断言失败，但似乎可能有更糟的后果。", "title": "修复 SQL 语言函数中 CREATE TABLE AS/SELECT INTO 之后的悬空指针", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "f51016b24d19be2c097c117204a0ace6464c9b52cd69c90631c851cee54168d0", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix dangling pointer after CREATE TABLE AS/SELECT INTO in a SQL-language function (Tom Lane) In most cases this only led to an assertion failure in assert-enabled builds, but worse consequences seem possible.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/019", "db_id": "87b9f81b5dd2c16f7d5b13fccbcf8410", "patch_ids": [], "statement_hash": "5a4b4eec0d936566ea518f47908739da90fe403d08f2af9cb986472a2afec861", "relations": [{"rule": 2, "type": "equivalent", "target": "c0d55b2dc7cd18ddddb0f00151e0aa4f", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "5a4b4eec0d936566ea518f47908739da90fe403d08f2af9cb986472a2afec861"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "c0d55b2dc7cd18ddddb0f00151e0aa4f", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 SQL 语言函数中 CREATE TABLE AS/SELECT INTO 之后的悬空指针", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "5a4b4eec0d936566ea518f47908739da90fe403d08f2af9cb986472a2afec861"}, "url": "/docs/compare/?release=9.1.3#9.1.3-cf876d2ac3d432d2", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-065e36ee2eadb088", "cves": [], "html": "<p>避免 Windows 上 syslogger 中文件句柄的双重关闭（MauMau）</p>\n<p>通常这个错误不可见，但在调试版 Windows 上运行时会导致异常。</p>", "text": "避免 Windows 上 syslogger 中文件句柄的双重关闭（MauMau） 通常这个错误不可见，但在调试版 Windows 上运行时会导致异常。", "title": "避免 Windows 上 syslogger 中文件句柄的双重关闭", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "bdfdc4245b9537a81d65f4140c78937d85abb17a7e10ba705f12094a2e5d25fb", "section_path": ["变更"], "commit_groups": [], "identity_text": "Avoid double close of file handle in syslogger on Windows (MauMau) Ordinarily this error was invisible, but it would cause an exception when running on a debug version of Windows.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/020", "db_id": "eeca78a7e0ee66abe8f857d8a4fe437b", "patch_ids": [], "statement_hash": "ef81bb3b29c693d98f75fc9085d70f162f69c783777a838226a4024aa7d2d281", "relations": [{"rule": 2, "type": "equivalent", "target": "210f7430ae5d959f3e6c3abee0f3501c", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "ef81bb3b29c693d98f75fc9085d70f162f69c783777a838226a4024aa7d2d281"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "210f7430ae5d959f3e6c3abee0f3501c", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "避免 Windows 上 syslogger 中文件句柄的双重关闭", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "ef81bb3b29c693d98f75fc9085d70f162f69c783777a838226a4024aa7d2d281"}, "url": "/docs/compare/?release=9.1.3#9.1.3-065e36ee2eadb088", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-49b12ebe0824eef1", "cves": [], "html": "<p>修复 plpgsql 中与 I/O 转换相关的内存泄漏（Andres Freund、Jan Urbanski、Tom Lane）</p>\n<p>某些操作会一直泄漏内存直到当前函数结束。</p>", "text": "修复 plpgsql 中与 I/O 转换相关的内存泄漏（Andres Freund、Jan Urbanski、Tom Lane） 某些操作会一直泄漏内存直到当前函数结束。", "title": "修复 plpgsql 中与 I/O 转换相关的内存泄漏", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "01e26c9ad78e4eb127f850621042255550778884cb839e3a826670c78c649fd5", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix I/O-conversion-related memory leaks in plpgsql (Andres Freund, Jan Urbanski, Tom Lane) Certain operations would leak memory until the end of the current function.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/021", "db_id": "12ef3204431aad0793cc73c57f591029", "patch_ids": [], "statement_hash": "e71dc6b22fc26105e30d2e688f3b25e8f95efbd302045ff758f1515596272511", "relations": [{"rule": 2, "type": "equivalent", "target": "66e206bf04676822f69fc1303fd80554", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "e71dc6b22fc26105e30d2e688f3b25e8f95efbd302045ff758f1515596272511"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "66e206bf04676822f69fc1303fd80554", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 plpgsql 中与 I/O 转换相关的内存泄漏", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "e71dc6b22fc26105e30d2e688f3b25e8f95efbd302045ff758f1515596272511"}, "url": "/docs/compare/?release=9.1.3#9.1.3-49b12ebe0824eef1", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-5f79ec0d30be849f", "cves": [], "html": "<p>改进 <span>pg_dump</span> 对继承表列的处理（Tom Lane）</p>\n<p><span>pg_dump</span> 错误处理了子列与父列默认表达式不同的情况。如果默认值在文本上与父列相同但实际不同（例如因为模式搜索路径差异），它不会被识别为不同，因此转储和恢复后子列会被允许继承父列的默认值。子列为 <code>NOT NULL</code> 而父列不是的情况也可能被微妙地错误恢复。</p>", "text": "改进 pg_dump 对继承表列的处理（Tom Lane） pg_dump 错误处理了子列与父列默认表达式不同的情况。如果默认值在文本上与父列相同但实际不同（例如因为模式搜索路径差异），它不会被识别为不同，因此转储和恢复后子列会被允许继承父列的默认值。子列为 NOT NULL 而父列不是的情况也可能被微妙地错误恢复。", "title": "改进 pg_dump 对继承表列的处理", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "b658f5a3db2474d633ed50169e3954c444b78efdf0ca112d453569cf1df5e636", "section_path": ["变更"], "commit_groups": [], "identity_text": "Improve pg_dump's handling of inherited table columns (Tom Lane) pg_dump mishandled situations where a child column has a different default expression than its parent column. If the default is textually identical to the parent's default, but not actually the same (for instance, because of schema search path differences) it would not be recognized as different, so that after dump and restore the child would be allowed to inherit the parent's default. Child columns that are NOT NULL where their parent is not could also be restored subtly incorrectly.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/022", "db_id": "6f8ed89a79151282bb2858992414a4b2", "patch_ids": [], "statement_hash": "158a537c69db028d923b5c2991e773518e4dd2cfa7c47b23e368d07b2fb717d3", "relations": [{"rule": 2, "type": "equivalent", "target": "be7afd93dc822f0d5ad95e1da48202a7", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "158a537c69db028d923b5c2991e773518e4dd2cfa7c47b23e368d07b2fb717d3"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "be7afd93dc822f0d5ad95e1da48202a7", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "改进 pg_dump 对继承表列的处理", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "158a537c69db028d923b5c2991e773518e4dd2cfa7c47b23e368d07b2fb717d3"}, "url": "/docs/compare/?release=9.1.3#9.1.3-5f79ec0d30be849f", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-1ddf5ea2b03ade76", "cves": [], "html": "<p>修复 <span>pg_restore</span> 直接写数据库模式对 INSERT 式表数据的处理（Tom Lane）</p>\n<p>当使用 2011 年 9 月或 12 月版本的 <span>pg_restore</span> 时，对以 <code>--inserts</code> 或 <code>--column-inserts</code> 选项制作的归档文件直接恢复到数据库会失败，这是对另一个问题的修复中的一个疏忽所致。归档文件本身没有问题，文本模式输出也正常。</p>", "text": "修复 pg_restore 直接写数据库模式对 INSERT 式表数据的处理（Tom Lane） 当使用 2011 年 9 月或 12 月版本的 pg_restore 时，对以 --inserts 或 --column-inserts 选项制作的归档文件直接恢复到数据库会失败，这是对另一个问题的修复中的一个疏忽所致。归档文件本身没有问题，文本模式输出也正常。", "title": "修复 pg_restore 直接写数据库模式对 INSERT 式表数据的处理", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "816c02db9562e24f89860b847dcf51d7c8fe20f30c97b64a44dd8b2a02d9494d", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix pg_restore's direct-to-database mode for INSERT-style table data (Tom Lane) Direct-to-database restores from archive files made with --inserts or --column-inserts options fail when using pg_restore from a release dated September or December 2011, as a result of an oversight in a fix for another problem. The archive file itself is not at fault, and text-mode output is okay.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/023", "db_id": "0970a61a30fd3e0714c7470405969c85", "patch_ids": [], "statement_hash": "6237f99699a3afb2dc3319b805c4e2e0de8fc963d25e0de58c0bf75261479eb3", "relations": [{"rule": 2, "type": "equivalent", "target": "83bed41baed2c47a1c8fb9b454210aa6", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6237f99699a3afb2dc3319b805c4e2e0de8fc963d25e0de58c0bf75261479eb3"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "83bed41baed2c47a1c8fb9b454210aa6", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 pg_restore 直接写数据库模式对 INSERT 式表数据的处理", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "6237f99699a3afb2dc3319b805c4e2e0de8fc963d25e0de58c0bf75261479eb3"}, "url": "/docs/compare/?release=9.1.3#9.1.3-1ddf5ea2b03ade76", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-57e7e1ff5018f68c", "cves": [], "html": "<p>允许 <span>pg_upgrade</span> 处理包含 <code>regclass</code> 列的表（Bruce Momjian）</p>\n<p>由于 <span>pg_upgrade</span> 现在注意保留 <code>pg_class</code> OID，这一限制不再有任何理由存在。</p>", "text": "允许 pg_upgrade 处理包含 regclass 列的表（Bruce Momjian） 由于 pg_upgrade 现在注意保留 pg_class OID，这一限制不再有任何理由存在。", "title": "允许 pg_upgrade 处理包含 regclass 列的表", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "a588ffe1dcef55bd802ee811c5721039edaa16d5516e29548684198df57ddfde", "section_path": ["变更"], "commit_groups": [], "identity_text": "Allow pg_upgrade to process tables containing regclass columns (Bruce Momjian) Since pg_upgrade now takes care to preserve pg_class OIDs, there was no longer any reason for this restriction.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/024", "db_id": "1d8dc46d4a6189c5594be814ed311956", "patch_ids": [], "statement_hash": "fec882118548896820b01bead9de257957251abeacd6ab29a1f5655111291053", "relations": [{"rule": 2, "type": "equivalent", "target": "10573e20bb8af84b76cb4d8321aedeb1", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "fec882118548896820b01bead9de257957251abeacd6ab29a1f5655111291053"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "10573e20bb8af84b76cb4d8321aedeb1", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "允许 pg_upgrade 处理包含 regclass 列的表", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "fec882118548896820b01bead9de257957251abeacd6ab29a1f5655111291053"}, "url": "/docs/compare/?release=9.1.3#9.1.3-57e7e1ff5018f68c", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-d48a735cdaa9cc3f", "cves": [], "html": "<p>让 <span>libpq</span> 在查找 SSL 客户端证书文件时忽略 <code>ENOTDIR</code> 错误（Magnus Hagander）</p>\n<p>即使用户的主目录被设置为 <code>/dev/null</code> 之类，这也能建立 SSL 连接（虽然没有证书）。</p>", "text": "让 libpq 在查找 SSL 客户端证书文件时忽略 ENOTDIR 错误（Magnus Hagander） 即使用户的主目录被设置为 /dev/null 之类，这也能建立 SSL 连接（虽然没有证书）。", "title": "让 libpq 在查找 SSL 客户端证书文件时忽略 ENOTDIR 错误", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "b870db6ba3b1f1b5f7762c8c748320377626a4eb68bcaebca7da4d0943da7333", "section_path": ["变更"], "commit_groups": [], "identity_text": "Make libpq ignore ENOTDIR errors when looking for an SSL client certificate file (Magnus Hagander) This allows SSL connections to be established, though without a certificate, even when the user's home directory is set to something like /dev/null.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/025", "db_id": "14f6084593935bd5f77623e5e6c91e9e", "patch_ids": [], "statement_hash": "9aeeae1ccf345ad8ba77dd38bb88d26e9d3413cbe9b5cb99fcdb307c6cabfb69", "relations": [{"rule": 2, "type": "equivalent", "target": "79789395ce1d453bf402c9fc53f29d1b", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "9aeeae1ccf345ad8ba77dd38bb88d26e9d3413cbe9b5cb99fcdb307c6cabfb69"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "79789395ce1d453bf402c9fc53f29d1b", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "让 libpq 在查找 SSL 客户端证书文件时忽略 ENOTDIR 错误", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "9aeeae1ccf345ad8ba77dd38bb88d26e9d3413cbe9b5cb99fcdb307c6cabfb69"}, "url": "/docs/compare/?release=9.1.3#9.1.3-d48a735cdaa9cc3f", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-bc29f69f891e8092", "cves": [], "html": "<p>修复 <span>ecpg</span> 的 SQLDA 区域中更多的字段对齐问题（Zoltan Boszormenyi）</p>", "text": "修复 ecpg 的 SQLDA 区域中更多的字段对齐问题（Zoltan Boszormenyi）", "title": "修复 ecpg 的 SQLDA 区域中更多的字段对齐问题", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "76b2c11b01a44cc65cbb7e5d1d6fbe817ced8b89d53cc7f7d4fd3971131cec9f", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix some more field alignment issues in ecpg's SQLDA area (Zoltan Boszormenyi)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/026", "db_id": "92fef594bd7ea01829eec5eefbced285", "patch_ids": [], "statement_hash": "7ce31dbcd512cda110883e88b34128b5a9ef4ae6304dc7386653cfc2bbcb2bbf", "relations": [{"rule": 2, "type": "equivalent", "target": "2738177bb370c81a0ad27e668b1c9e1a", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "7ce31dbcd512cda110883e88b34128b5a9ef4ae6304dc7386653cfc2bbcb2bbf"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "2738177bb370c81a0ad27e668b1c9e1a", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 ecpg 的 SQLDA 区域中更多的字段对齐问题", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "7ce31dbcd512cda110883e88b34128b5a9ef4ae6304dc7386653cfc2bbcb2bbf"}, "url": "/docs/compare/?release=9.1.3#9.1.3-bc29f69f891e8092", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-aff74475c9e32c03", "cves": [], "html": "<p>允许 <span>ecpg</span> 的 <code>DEALLOCATE</code> 语句中使用 <code>AT</code> 选项（Michael Meskes）</p>\n<p>支持它的基础设施已存在一段时间，但由于疏忽仍有一个错误检查拒绝这种情况。</p>", "text": "允许 ecpg 的 DEALLOCATE 语句中使用 AT 选项（Michael Meskes） 支持它的基础设施已存在一段时间，但由于疏忽仍有一个错误检查拒绝这种情况。", "title": "允许 ecpg 的 DEALLOCATE 语句中使用 AT 选项", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "2ea42743d4f1699e5c0a6ef69ee874c3a2e2e6f17ba2b877058c0fba30f6b714", "section_path": ["变更"], "commit_groups": [], "identity_text": "Allow AT option in ecpg DEALLOCATE statements (Michael Meskes) The infrastructure to support this has been there for awhile, but through an oversight there was still an error check rejecting the case.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/027", "db_id": "d15465f266c890d6251a790170f0c49b", "patch_ids": [], "statement_hash": "8980c7ab34eca5ca3cf73f66be69ecfe94dabb8376bf5ef5524cb886026b5e12", "relations": [{"rule": 2, "type": "equivalent", "target": "01e6e364db058723950f1b8fcf55728b", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "8980c7ab34eca5ca3cf73f66be69ecfe94dabb8376bf5ef5524cb886026b5e12"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "01e6e364db058723950f1b8fcf55728b", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "允许 ecpg 的 DEALLOCATE 语句中使用 AT 选项", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "8980c7ab34eca5ca3cf73f66be69ecfe94dabb8376bf5ef5524cb886026b5e12"}, "url": "/docs/compare/?release=9.1.3#9.1.3-aff74475c9e32c03", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-c05cdf70a35a0137", "cves": [], "html": "<p>在 ecpg 中定义 varchar 结构时不使用变量名（Michael Meskes）</p>", "text": "在 ecpg 中定义 varchar 结构时不使用变量名（Michael Meskes）", "title": "在 ecpg 中定义 varchar 结构时不使用变量名", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "3a1bad7e1d05db25fd517166eb46b9f794a3c603d49f02e2aefd6a92887c2355", "section_path": ["变更"], "commit_groups": [], "identity_text": "Do not use the variable name when defining a varchar structure in ecpg (Michael Meskes)", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/028", "db_id": "f31732d1b67e8904a5ec18674e2fc40e", "patch_ids": [], "statement_hash": "3d26d8ec273a92fe515c4cf82c8452db492420ad95f5cab947917984d17d4e63", "relations": [{"rule": 2, "type": "equivalent", "target": "dcdd1182cbaa888e1972835df6bfe4de", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3d26d8ec273a92fe515c4cf82c8452db492420ad95f5cab947917984d17d4e63"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "dcdd1182cbaa888e1972835df6bfe4de", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "在 ecpg 中定义 varchar 结构时不使用变量名", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3d26d8ec273a92fe515c4cf82c8452db492420ad95f5cab947917984d17d4e63"}, "url": "/docs/compare/?release=9.1.3#9.1.3-c05cdf70a35a0137", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-18d5fb07e010666f", "cves": [], "html": "<p>修复 <code>contrib/auto_explain</code> 的 JSON 输出模式，使其产生有效的 JSON（Andrew Dunstan）</p>\n<p>输出在顶层使用了方括号，而本应使用花括号。</p>", "text": "修复 contrib/auto_explain 的 JSON 输出模式，使其产生有效的 JSON（Andrew Dunstan） 输出在顶层使用了方括号，而本应使用花括号。", "title": "修复 contrib/auto_explain 的 JSON 输出模式，使其产生有效的 JSON", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "f1b9d7704f75e88187caafe5d525f3678e368b69550cf07e8b4292f895bf4f55", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix contrib/auto_explain's JSON output mode to produce valid JSON (Andrew Dunstan) The output used brackets at the top level, when it should have used braces.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/029", "db_id": "05ca8e8f608ee6c97fa85633e3f36612", "patch_ids": [], "statement_hash": "57ef4397ef76a71d401c417d58411e1203dd1f98da0d525e868acec90db792c6", "relations": [{"rule": 2, "type": "equivalent", "target": "16ced96beb9bb282be9c60757f74e5d7", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "57ef4397ef76a71d401c417d58411e1203dd1f98da0d525e868acec90db792c6"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "16ced96beb9bb282be9c60757f74e5d7", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 contrib/auto_explain 的 JSON 输出模式，使其产生有效的 JSON", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "57ef4397ef76a71d401c417d58411e1203dd1f98da0d525e868acec90db792c6"}, "url": "/docs/compare/?release=9.1.3#9.1.3-18d5fb07e010666f", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-a814d604cc339e9f", "cves": [], "html": "<p>修复 <code>contrib/intarray</code> 的 <code>int[] &amp; int[]</code> 操作符中的错误（Guillaume Lelarge）</p>\n<p>如果两个输入数组共有的最小整数是 1，且任一数组中有更小的值，那么 1 会被错误地从结果中遗漏。</p>", "text": "修复 contrib/intarray 的 int[] & int[] 操作符中的错误（Guillaume Lelarge） 如果两个输入数组共有的最小整数是 1，且任一数组中有更小的值，那么 1 会被错误地从结果中遗漏。", "title": "修复 contrib/intarray 的 int[] & int[] 操作符中的错误", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "9f5304099089b75c2e674f06d34b9a06a254080d246b14b150a6bf9d2cebceae", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix error in contrib/intarray's int[] & int[] operator (Guillaume Lelarge) If the smallest integer the two input arrays have in common is 1, and there are smaller values in either array, then 1 would be incorrectly omitted from the result.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/030", "db_id": "94c69f7c46af12f9d388d9d24b65826f", "patch_ids": [], "statement_hash": "82b353c53abec0448427e3214669b11afadb5f052b5eeb32da0373e7abd2a329", "relations": [{"rule": 2, "type": "equivalent", "target": "2bb21ee93315a177b41dcbbcebb3459f", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "82b353c53abec0448427e3214669b11afadb5f052b5eeb32da0373e7abd2a329"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "2bb21ee93315a177b41dcbbcebb3459f", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 contrib/intarray 的 int[] & int[] 操作符中的错误", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "82b353c53abec0448427e3214669b11afadb5f052b5eeb32da0373e7abd2a329"}, "url": "/docs/compare/?release=9.1.3#9.1.3-a814d604cc339e9f", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-2506f208fa1d901a", "cves": [], "html": "<p>修复 <code>contrib/pgcrypto</code> 的 <code>encrypt_iv()</code> 和 <code>decrypt_iv()</code> 中的错误检测（Marko Kreen）</p>\n<p>这些函数未能报告某些类型的无效输入错误，而是对错误输入返回随机垃圾值。</p>", "text": "修复 contrib/pgcrypto 的 encrypt_iv() 和 decrypt_iv() 中的错误检测（Marko Kreen） 这些函数未能报告某些类型的无效输入错误，而是对错误输入返回随机垃圾值。", "title": "修复 contrib/pgcrypto 的 encrypt_iv() 和 decrypt_iv() 中的错误检测", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "e676363fbfa9ca5c6af8e76b8eed0a1c73d7ec2b8da0497a3cdeec20c26b27c5", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix error detection in contrib/pgcrypto's encrypt_iv() and decrypt_iv() (Marko Kreen) These functions failed to report certain types of invalid-input errors, and would instead return random garbage values for incorrect input.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/031", "db_id": "54f9d3f079a9f4d0099d578b59ecd00e", "patch_ids": [], "statement_hash": "ad3ebf392b7f11e4c043b6a65a12dc4de4f78b47a414333e6dd887a6f1782ad8", "relations": [{"rule": 2, "type": "equivalent", "target": "7180e02f64a8698c1014ce4d23db4ac8", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "ad3ebf392b7f11e4c043b6a65a12dc4de4f78b47a414333e6dd887a6f1782ad8"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "7180e02f64a8698c1014ce4d23db4ac8", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 contrib/pgcrypto 的 encrypt_iv() 和 decrypt_iv() 中的错误检测", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "ad3ebf392b7f11e4c043b6a65a12dc4de4f78b47a414333e6dd887a6f1782ad8"}, "url": "/docs/compare/?release=9.1.3#9.1.3-2506f208fa1d901a", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-d90e16591826c78c", "cves": [], "html": "<p>修复 <code>contrib/test_parser</code> 中的一字节缓冲区越界（Paul Guyot）</p>\n<p>代码会尝试多读一个字节，这在极端情况下会崩溃。由于 <code>contrib/test_parser</code> 只是示例代码，这本身不是安全问题，但坏的示例代码仍然是坏的。</p>", "text": "修复 contrib/test_parser 中的一字节缓冲区越界（Paul Guyot） 代码会尝试多读一个字节，这在极端情况下会崩溃。由于 contrib/test_parser 只是示例代码，这本身不是安全问题，但坏的示例代码仍然是坏的。", "title": "修复 contrib/test_parser 中的一字节缓冲区越界", "commits": [], "section": "变更", "category": "bugfix", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "fd001559b01970fae897a9cda97253c585f8b62f5ba2b72a5d15cf28ea4188ac", "section_path": ["变更"], "commit_groups": [], "identity_text": "Fix one-byte buffer overrun in contrib/test_parser (Paul Guyot) The code would try to read one more byte than it should, which would crash in corner cases. Since contrib/test_parser is only example code, this is not a security issue in itself, but bad example code is still bad.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/032", "db_id": "4e693177659a63abd875b9c9572ea052", "patch_ids": [], "statement_hash": "3bc9ff2f5d63cdfb4a5f5c432078c619dd7c30945ccbe507f82ccb50318d6f79", "relations": [{"rule": 2, "type": "equivalent", "target": "7b18767c0f8313a9a39f10a53e5b35b0", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3bc9ff2f5d63cdfb4a5f5c432078c619dd7c30945ccbe507f82ccb50318d6f79"}}], "version": "9.0.7", "category_label": "BUG 修复", "also_in": [], "variants": [], "related_changes": [{"db_id": "7b18767c0f8313a9a39f10a53e5b35b0", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "修复 contrib/test_parser 中的一字节缓冲区越界", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "3bc9ff2f5d63cdfb4a5f5c432078c619dd7c30945ccbe507f82ccb50318d6f79"}, "url": "/docs/compare/?release=9.1.3#9.1.3-d90e16591826c78c", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-0c27adbf005906ea", "cves": [], "html": "<p>在 ARM 上如果可用则使用 <code>__sync_lock_test_and_set()</code> 实现自旋锁（Martin Pitt）</p>\n<p>该函数取代了我们此前对 <code>SWPB</code> 指令的使用，该指令已被弃用且在 ARMv6 及更高版本上不可用。报告表明旧代码在较新的 ARM 板上不会以明显方式失败，而只是不对并发访问互锁，导致多进程操作中的离奇失败。</p>", "text": "在 ARM 上如果可用则使用 __sync_lock_test_and_set() 实现自旋锁（Martin Pitt） 该函数取代了我们此前对 SWPB 指令的使用，该指令已被弃用且在 ARMv6 及更高版本上不可用。报告表明旧代码在较新的 ARM 板上不会以明显方式失败，而只是不对并发访问互锁，导致多进程操作中的离奇失败。", "title": "在 ARM 上如果可用则使用 __sync_lock_test_and_set() 实现自旋锁", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "746342a3b556b3594598c06cc1d8cdb5f654a7165e7e06153b1fcc9c7e995bbf", "section_path": ["变更"], "commit_groups": [], "identity_text": "Use __sync_lock_test_and_set() for spinlocks on ARM, if available (Martin Pitt) This function replaces our previous use of the SWPB instruction, which is deprecated and not available on ARMv6 and later. Reports suggest that the old code doesn't fail in an obvious way on recent ARM boards, but simply doesn't interlock concurrent accesses, leading to bizarre failures in multiprocess operation.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/033", "db_id": "1007754c319d010b37f2f434bbf0f476", "patch_ids": [], "statement_hash": "9e9d4345b16000415b0573b50612682290f0bb61f211a8463ed848c6172efb61", "relations": [{"rule": 2, "type": "equivalent", "target": "1d34f3b759a378570598edf260beb006", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "9e9d4345b16000415b0573b50612682290f0bb61f211a8463ed848c6172efb61"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "1d34f3b759a378570598edf260beb006", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "在 ARM 上如果可用则使用 __sync_lock_test_and_set() 实现自旋锁", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "9e9d4345b16000415b0573b50612682290f0bb61f211a8463ed848c6172efb61"}, "url": "/docs/compare/?release=9.1.3#9.1.3-0c27adbf005906ea", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-38c8ef906a738e1e", "cves": [], "html": "<p>在使用接受该选项的 gcc 版本构建时使用 <code>-fexcess-precision=standard</code> 选项（Andrew Dunstan）</p>\n<p>这防止了较新版本 gcc 产生\"创造性\"结果的各种场景。</p>", "text": "在使用接受该选项的 gcc 版本构建时使用 -fexcess-precision=standard 选项（Andrew Dunstan） 这防止了较新版本 gcc 产生\"创造性\"结果的各种场景。", "title": "在使用接受该选项的 gcc 版本构建时使用 -fexcess-precision=standard 选项", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "855f3ba6fda4e4cbf311525801f20aefd2fd44e297d47935568843356c183061", "section_path": ["变更"], "commit_groups": [], "identity_text": "Use -fexcess-precision=standard option when building with gcc versions that accept it (Andrew Dunstan) This prevents assorted scenarios wherein recent versions of gcc will produce creative results.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/034", "db_id": "40c55f7b57cc4a2f2064ab97113ecfaa", "patch_ids": [], "statement_hash": "43fed1ff06418e12a83b302fd1634ef1c169e9814384d856d500ee1f9326c0b2", "relations": [{"rule": 2, "type": "equivalent", "target": "73293dec31b2426901717af61b622e0f", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "43fed1ff06418e12a83b302fd1634ef1c169e9814384d856d500ee1f9326c0b2"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "73293dec31b2426901717af61b622e0f", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "在使用接受该选项的 gcc 版本构建时使用 -fexcess-precision=standard 选项", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "43fed1ff06418e12a83b302fd1634ef1c169e9814384d856d500ee1f9326c0b2"}, "url": "/docs/compare/?release=9.1.3#9.1.3-38c8ef906a738e1e", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}, {"id": "9.0.7-102fd708b6ca5c2d", "cves": [], "html": "<p>允许在 FreeBSD 上使用线程化 Python（Chris Rees）</p>\n<p>我们的 configure 脚本此前认为这种组合无法工作；但 FreeBSD 修复了问题，因此移除该错误检查。</p>", "text": "允许在 FreeBSD 上使用线程化 Python（Chris Rees） 我们的 configure 脚本此前认为这种组合无法工作；但 FreeBSD 修复了问题，因此移除该错误检查。", "title": "允许在 FreeBSD 上使用线程化 Python", "commits": [], "section": "变更", "category": "improvement", "source_url": "/docs/release/9.0.7/#id-1.11.6.21.5", "source_hash": "9586297b931f5430f9ad5a84acac1f081275027979dde3d06990d67eab018087", "section_path": ["变更"], "commit_groups": [], "identity_text": "Allow use of threaded Python on FreeBSD (Chris Rees) Our configure script previously believed that this combination wouldn't work; but FreeBSD fixed the problem, so remove that error check.", "commit_aliases": [], "source_commits": [], "source_entry_id": "9.0.7/changes/035", "db_id": "73d16e12d17663a4d556d8b5f3ee8919", "patch_ids": [], "statement_hash": "748c557c27d47995433e5c33df254fc3ec3dff06284934bdbdc0425854bfe8d2", "relations": [{"rule": 2, "type": "equivalent", "target": "8972121a9e9a512ba41e56d398fcbd20", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "748c557c27d47995433e5c33df254fc3ec3dff06284934bdbdc0425854bfe8d2"}}], "version": "9.0.7", "category_label": "其他改进", "also_in": [], "variants": [], "related_changes": [{"db_id": "8972121a9e9a512ba41e56d398fcbd20", "kind": "equivalent", "version": "9.1.3", "label": "9.1.3", "title": "允许在 FreeBSD 上使用线程化 Python", "evidence": {"same_day": true, "patch_ids": [], "statement_hash": "748c557c27d47995433e5c33df254fc3ec3dff06284934bdbdc0425854bfe8d2"}, "url": "/docs/compare/?release=9.1.3#9.1.3-102fd708b6ca5c2d", "source_url": "/docs/release/9.1.3/#id-1.11.6.26.5"}]}]}], "stats": [{"key": "all", "label": "全部变更", "count": 35}, {"key": "feature", "label": "新功能", "count": 0}, {"key": "bugfix", "label": "BUG 修复", "count": 18}, {"key": "security", "label": "安全相关", "count": 3}, {"key": "performance", "label": "性能改进", "count": 0}, {"key": "compatibility", "label": "兼容性变化", "count": 0}, {"key": "improvement", "label": "其他改进", "count": 14}], "total": 35, "release_count": 1, "cross_major": false, "cve_count": 3, "cves": [{"id": "CVE-2012-0868", "url": "https://www.postgresql.org/support/security/CVE-2012-0868/", "fixed": {"8.3": "8.3.18", "8.4": "8.4.11", "9.0": "9.0.7", "9.1": "9.1.3"}, "score": null, "title": "把 pg_dump 注释中写入的名称里的换行符转换为空格", "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.7"}, {"id": "CVE-2012-0867", "url": "https://www.postgresql.org/support/security/CVE-2012-0867/", "fixed": {"8.4": "8.4.11", "9.0": "9.0.7", "9.1": "9.1.3"}, "score": null, "title": "移除 SSL 证书中通用名长度的任意限制", "vector": "", "affected": {"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.7"}, {"id": "CVE-2012-0866", "url": "https://www.postgresql.org/support/security/CVE-2012-0866/", "fixed": {"8.3": "8.3.18", "8.4": "8.4.11", "9.0": "9.0.7", "9.1": "9.1.3"}, "score": null, "title": "让 CREATE TRIGGER 要求对触发器函数有执行权限", "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.7"}], "cve_available": true, "remaining_cves": [], "security_regressions": [], "warnings": [], "candidate_count": 35, "already_in_source_count": 0, "duplicate_count": 0, "excluded_count": 0, "exclusions": [], "source_as_of": "2026-09-26", "security_as_of": "2026-09-26"}