ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Bug Report: <Title>

2026/9/12 15:14:38 拓冰建站 浏览量
Bug Report: <Title> Bug Report:/h1【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilotStatus:✅ RESOLVED | ⛔ UNRESOLVED | ⏳ IN PROGRESSComponent:High-level component/endpoint and key method(s)Test:Severity:Low | Medium | High | CriticalProblemObservable incorrect behavior. State expected behavior (Oracle baseline) versus actual behavior (PostgreSQL). Be specific and factual.ScenarioOrdered steps to reproduce the defect. Include:Prerequisites and seed dataExact operation or API callExpected result (Oracle)Actual result (PostgreSQL)Root CauseMinimal, concrete technical cause. Reference the specific Oracle/PostgreSQL behavioral difference (e.g., empty string vs NULL, type coercion strictness).SolutionChanges made or required. Be explicit about data access layer changes, tracking flags, and any client code modifications. Note whether changes are already applied or still needed.ValidationBullet list of passing tests or manual checks that confirm the fix:Re-run reproduction steps on both Oracle and PostgreSQLCompare row/column outputsCheck error handling parityFiles ModifiedBullet list with relative file paths and short purpose for each change:src/DataAccess/FooRepository.cs— Added explicit NULL check for empty string parameterNotes / Next StepsFollow-ups, environment caveats, risks, or dependencies on other fixes.### 元数据头四行关键标注 报告正文之前有四个必填标注[SKILL.md](https://link.gitcode.com/i/9a26228f881dbd0454360f677b048fa8) 明确了其语义 - **Status**✅ RESOLVED / ⛔ UNRESOLVED / ⏳ IN PROGRESS 三态之一表示缺陷当前所处生命周期 - **Component**受影响的高层组件/端点及关键方法帮助读者快速定位代码范围 - **Test**相关的自动化测试名称把缺陷与测试用例建立可追踪的关联 - **Severity**Low / Medium / High / Critical 四档依据影响范围impact scope判定而非主观感受。 ### ProblemOracle 基线与 PostgreSQL 实际的对比 这一节只陈述可观察的错误行为并且必须同时写清两侧状态。SKILL 的指导原则是 **Oracle 是事实来源source of truth**——期望行为以 Oracle 基线为准实际行为是 PostgreSQL 的表现。语言要具体、事实化避免模糊表述。 ### Scenario可复现的有序步骤 复现步骤必须有序且完整覆盖四要素 1. 前置条件与种子数据prerequisites and seed data 2. 精确的操作或 API 调用 3. 期望结果Oracle 4. 实际结果PostgreSQL。 有了种子数据和精确调用后续的验证环节才能照单重跑。 ### Root Cause指向具体的行为差异 根因要最小化、具体化直接引用对应的 Oracle/PostgreSQL 行为差异例如 - 空字符串 vs NULLempty string vs NULL - 类型强制转换严格性type coercion strictness - 排序规则collation、序列值sequence values、时区time zones、填充padding、约束constraints等数据层细微差别。 不要写迁移后有 bug这类笼统结论而要写Oracle 将 转为 NULL 而 PostgreSQL 保留空字符串导致 WHERE col IS NULL 查不到新插入的行。 ### Solution区分已应用与仍需实施 写明已做或需做的修改重点说明 - 数据访问层的变更data access layer changes - 追踪标志tracking flags - 任何客户端代码修改并说明改动是已应用还是仍待实施。 SKILL 特别强调**除非为修正行为所必需应避免客户端代码改动**一旦提出客户端改动必须给出明确的理由并在报告中说明。 ### Validation双库双侧的验证清单 用列表形式给出确认修复有效的测试或手工检查项例如 - 在 Oracle 与 PostgreSQL 上重跑复现步骤 - 对比行/列输出 - 检查错误处理的对等性error handling parity。 ### Files Modified相对路径 用途 每个改动文件一行格式为相对路径 — 简短用途例如 - src/DataAccess/FooRepository.cs — 为空字符串参数增加显式 NULL 检查 ### Notes / Next Steps跟进项与风险 记录后续动作、环境注意事项、风险或对其他修复的依赖。 ## 状态取值说明 模板定义了严格的 Status 三态语义报告必须从中取值不得自定义 | Status | Meaning | |--------|---------| | ✅ RESOLVED | Defect has been fixed and verified | | ⛔ UNRESOLVED | Defect has not been addressed yet | | ⏳ IN PROGRESS | Defect is being investigated or fix is underway | 即✅ 已修复并验证⛔ 尚未处理⏳ 正在调查或修复中。 ## 撰写风格规则 模板在末尾给出了 8 条硬性风格约束撰写或评审报告时逐条对照 - 措辞简洁、事实化Keep wording concise and factual - 时态保持一致统一用现在时或过去时present or past tense consistently - 步骤与验证优先使用项目符号和编号列表bullets and numbered lists - 显式点明数据层细节追踪、填充、约束tracking, padding, constraints - 保持与既有运行时/语言版本一致避免推测性修复avoid speculative fixes - 附上最小化的 SQL 片段和日志作为证据省略敏感数据。 ## 高频行为差异案例如何把差异写进 Root Cause 仓库中 skills/reviewing-oracle-to-postgres-migration/references/ 目录沉淀了一系列可直接引用为根因证据的行为差异文档。写 Root Cause 时可以据此把差异描述得精确到可复现级别。 ### 案例一空字符串 vs NULLEmpty String vs NULL Oracle 自动将 VARCHAR2 中的空字符串 转为 NULLPostgreSQL 中两者是不同值。同样的 SQL 在两个库中结果不同 sql -- Oracle 行为 INSERT INTO table (varchar_column) VALUES (); SELECT * FROM table WHERE varchar_column IS NULL; -- 能查到该行 -- PostgreSQL 行为 INSERT INTO table (varchar_column) VALUES (); SELECT * FROM table WHERE varchar_column IS NULL; -- 查不到 SELECT * FROM table WHERE varchar_column ; -- 能查到该行修复方式要么在存储过程里用NULLIF(param, )保持 Oracle 语义要么在应用层把if (value null)改为if (string.IsNullOrEmpty(value))。这类差异细节可参考 empty-strings-handling.md。案例二类型强制转换严格性Type CoercionOracle 会在比较运算中隐式转换类型PostgreSQL 则严格执行类型匹配。例如 VARCHAR 列与整数字面量比较-- Oracle可以运行124 被隐式转为字符串 AND physical_address.pcountry_cd 124 -- PostgreSQL报错 AND physical_address.pcountry_cd 124 -- 42883: operator does not exist: character varying integer推荐修法是改用字符串字面量 124或显式CAST(124 AS VARCHAR)。,,,,,等所有比较运算符都可能触发该问题检测时可重点搜索 WHERE 子句中字符串列与数字字面量的比较。详见 oracle-to-postgres-type-coercion.md。案例三refcursor 游标返回机制Oracle 驱动会自动展开SYS_REFCURSOR输出参数直接向数据读取器暴露结果集Npgsql 则只返回游标名称如unnamed portal 1客户端必须再执行FETCH ALL FROM cursor_name才能取回行数据且过程调用与 FETCH 必须在同一个显式事务内。若忽略这一点常见症状是System.IndexOutOfRangeException: Field not found in row。完整修复代码与可复用的 helper 见 postgres-refcursor-handling.md。案例四SYSDATE、序列与 DUALOracle 的SYSDATE/SYSTIMESTAMP、sequence.NEXTVAL点号语法以及FROM DUAL在 PostgreSQL 中都需要替换-- Oracle SELECT SYSDATE FROM DUAL; INSERT INTO t (id) VALUES (my_sequence.NEXTVAL); -- PostgreSQL SELECT NOW(); INSERT INTO t (id) VALUES (nextval(my_sequence));【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考