2202E — array_subscript_error(数组下标错误)
数组下标或维度错误,如拼接维度不兼容。
英文手册覆盖始于 PostgreSQL 8.1. 来源历史与运行验证各自保留独立版本边界。
当前阅读 PG 18·选择有来源记录的版本
- aliases
- 未知
- class name
- Data Exception
- condition name
- array_subscript_error
- lang
- en
- sqlstate
- 2202E
版本定义 PG 18
速览 {#at-a-glance}
2202E 是类别 22 Data Exception 中的 array_subscript_error 条件。目录同时保留 ERRCODE_ARRAY_ELEMENT_ERROR 这一兼容别名,并使用 ERRCODE_ARRAY_SUBSCRIPT_ERROR 作为带条件名的宏。两个宏编码的是同一个 SQLSTATE。
不要把所有看起来越界的表达式都当成错误。PostgreSQL 文档明确说明,读取当前边界之外的数组下标会返回 NULL;提供错误数量的下标同样返回 NULL。数组切片还有独立的历史规则:完全位于边界外的切片可以产生空的零维数组,部分重叠的切片则缩减为重叠部分。
当其他路径校验形状或下标并拒绝它时才会抛出 2202E。核心源码中的这类路径包括数组拼接或构造时维度不兼容、无效切片边界,以及部分带下标赋值检查。诊断时,操作本身和下标数值同样重要。
可执行的代表性案例是 incompatible_array_dimensions。它在 PostgreSQL 18.6 和 10.21 上均通过:不兼容的拼接抛出 2202E,随后同一自动提交连接保持 IDLE,并成功执行有效的后续拼接。下面的 SQL 摘录是共享注册表中的完整有序语句对;测试执行器仍是建表和清理的唯一来源。
含义与触发路径 {#meaning}
18.6 目录中的定义是类别 22 下的 2202E E ERRCODE_ARRAY_SUBSCRIPT_ERROR array_subscript_error。前面的别名行是 2202E E ERRCODE_ARRAY_ELEMENT_ERROR;源码注释解释 SQL99 的 “array element error” 实际上就是数组下标错误。因此,仍使用别名的代码指向同一 SQLSTATE,而不是另一种条件。
数组具有秩、每个维度的长度以及下界。PostgreSQL 不要求数组从 1 开始,所以诊断时应读取实际下界,而不是作这个假设。文档中的 array_ndims、array_dims、array_lower、array_upper 和 cardinality 函数可以查看所需的元数据。需要诊断错误时,应在同一会话中实际调用这些检查函数;它们是检查工具,不代表已经触发了某个特定错误。
核心路径主要包括:
- 数组元素或切片赋值。
arrayfuncs.c会校验下标和切片边界。一维数组可以通过给新元素赋值来扩展,中间位置填入NULL;多维数组不支持这种扩展。给空数组赋切片时必须提供两个边界。因此,赋值访问当前读取边界之外的位置时,应按赋值操作分析,不能从SELECT a[n]的结果推断。 - 数组拼接。 当同秩数组的非拼接维度的长度或下界不同时,
array_cat抛出2202E。代表性案例覆盖的就是这条路径。 - 多维构造。 表达式执行器在用于构造多维数组的非空数组表达式维度不兼容时,也会抛出同一条件。
源码中还存在其他调用方,包括数据类型辅助路径。类别 22 是宽泛的数据异常类别;具体是哪个形状或下标契约失败,要由 2202E 条目、源码函数和报文共同确定。
报文与诊断 {#messages}
可执行摘录如下:
SELECT ARRAY[[1,2]] || ARRAY[[3]];
SELECT ARRAY[1,2] || ARRAY[3,4];
第一条语句的两个二维数组内层维度不同。PostgreSQL 18.6 报告:
SQLSTATE: 2202E
severity: ERROR
message_primary: cannot concatenate incompatible arrays
message_detail: Arrays with differing element dimensions are not compatible for concatenation.
source: array_userfuncs.c / array_cat / line 450
PostgreSQL 10.21 的同一案例给出相同的主报文和详细信息文本,历史源码行号是 356。第二条语句返回 {1,2,3,4}。这些报文和详细信息属于拼接路径,不是所有 2202E 调用方都必然使用的措辞。
其他源码确认的模板包括 array subscript out of range、array slice subscript must provide both boundaries(详细信息会解释给空数组赋值的要求),以及 upper bound cannot be less than lower bound。如果驱动程序提供这些字段,请保留 message_detail、message_hint、source_file、source_function 和 source_line;它们往往能区分切片校验与拼接校验。
诊断 {#diagnosis}
先按表达式分类:
- 普通元素读取如
a[999]可以合法返回NULL。在称为服务器错误前,检查数组本身、下标表达式以及存储的边界。 - 切片读取根据文档规则可能返回
NULL、空的零维数组或缩减后的重叠部分。没有错误响应时不要把这些值映射成2202E。 - 赋值、数组构造和拼接会执行校验代码。记录数组秩、维度、下界、提供的下标数量,以及语句是否在修改值。
遇到真实错误时,记录 SQLSTATE、严重级别、主报文、详细信息、提示、语句位置以及关系对象或函数上下文。使用同一个值或源表达式配合 array_ndims、array_dims、array_lower 和 array_upper 对照。拼接时比较每一个非拼接维度和下界;切片时检查两个边界及其顺序;构造时检查每个子数组的形状。
在 PL/pgSQL 中,处理器可以捕获 array_subscript_error 或 SQLSTATE '2202E',但处理器的事务行为取决于代码块。带 EXCEPTION 子句的代码块会让受保护主体在子事务中运行;主体出错后,主体内对持久数据库状态的修改会先回滚,再运行处理器。OTHERS 也有文档规定的排除项,应用要修复数组操作时应使用具体条件。
处理 {#response}
修复违反形状契约的操作。拼接前统一维度和下界;提供完整且顺序正确的切片边界;只有在确实需要 NULL 填充语义时才使用一维扩展;或者使用形状匹配的子数组重新构造多维值。如果读取返回 NULL 是合法结果,应先按值处理,不要在判断应用是否需要区分“缺少元素”和“存储的 NULL 元素”前就用 COALESCE 掩盖它。
代表性错误在自动提交下运行。失败后连接状态为 IDLE,有效拼接成功。在显式事务中,ERROR 通常会让事务进入中止状态,直到 ROLLBACK 或回滚到保存点;连接本身不一定需要关闭。带异常子句的 PL/pgSQL 代码块可以让受保护主体在子事务中封装失败,主体内的修改会在处理器运行前回滚。应读取客户端的实际事务状态,不要仅凭 2202E 推断连接结局。
版本 {#versions}
目录记录 2202E 存在于锁定的 7.4–8.4.22 pre-9.0 正式源码、9.0.23 至 18.6 的全部正式快照及 19 Beta 3 预览快照。同 tag 的 REL8_1_4 errcodes.sgml 表已经列出 2202E 和条件名 array_subscript_error,因此至少可以确认 8.1.4 已有该条件名。7.0–7.3 仍有候选源码缺口,因此 7.4 观察结果只是存在边界,不是精确引入版本。18.6 固定源码 commit 为 724edf9bde9d356724ad384a2e196edc3c9f80f7;其 errcodes.txt 同时保留别名宏和带条件名的宏。
不兼容维度案例在 PostgreSQL 18.6 和 10.21 上均通过,主报文和详细信息文本相同而源码行号不同。这个跨版本结果不保证所有旧小版本或其他 2202E 调用路径的措辞都不变。
相关 {#related}
22000 — data_exception 是宽泛的类别 22 代码。22005 — error_in_assignment 是不同的赋值条件,不应替代数组专用的 2202E。22P02 — invalid_text_representation 处理输入文本解析。2202E 也不同于成功的越界读取,后者按数组文档规则返回 NULL。
来源 {#sources}
结构化证据记录在公开证据 JSON中。源码记录固定到 PostgreSQL commit 724edf9bde9d356724ad384a2e196edc3c9f80f7;运行记录保留共享注册表、两个目标版本和 2202E-snippet-registry-final-20260909 运行 ID。
src.errcodes.18.6—errcodes.txtsrc.array-userfuncs.18.6—array_userfuncs.csrc.arrayfuncs.18.6—arrayfuncs.csrc.exec-expr.18.6—execExprInterp.cdoc.array.18与doc.func.18— Arrays 与 Array Functions and Operatorsdoc.transactions.18— Transactions
比较版本
SQLSTATE 证据与已记录的运行版本
cases · incompatible_array_dimensions
{
"assertions": [
"SQLSTATE is 2202E",
"The diagnostic explains the incompatible dimensions",
"A valid array operation succeeds afterward"
],
"case_id": "incompatible_array_dimensions",
"cleanup": "Drop the case schema with an owner connection.",
"has_snippet": true,
"position": 0,
"preconditions": [
"A dedicated autocommit connection"
],
"repair": "Validate rank, bounds, and element dimensions before concatenation or assignment.",
"trigger": "Concatenate two arrays whose element dimensions are incompatible.",
"versions": [
"10",
"18"
]
}claims · identity.class-and-condition
{
"claim_id": "identity.class-and-condition",
"limits": "The directory identifies the condition but does not imply that every array read outside bounds raises it.",
"method": "Read the Class 22 section and the named 2202E row in the frozen errcodes.txt snapshot.",
"position": 0,
"runtime": [],
"sources": [
"src.errcodes.18.6"
],
"statement": "2202E is the array_subscript_error condition in Class 22, Data Exception."
}claims · identity.alias-macro
{
"claim_id": "identity.alias-macro",
"limits": "The alias is a source-level name; the wire value remains the five-character SQLSTATE.",
"method": "Read the adjacent alias and named macro rows and the SQL99 explanatory comment.",
"position": 1,
"runtime": [],
"sources": [
"src.errcodes.18.6"
],
"statement": "ERRCODE_ARRAY_ELEMENT_ERROR is retained as an alias for the same 2202E SQLSTATE; ERRCODE_ARRAY_SUBSCRIPT_ERROR carries the array_subscript_error condition name."
}claims · array.read-outside-bounds
{
"claim_id": "array.read-outside-bounds",
"limits": "This claim applies to reads; assignment, slice validation, construction, and concatenation have separate rules.",
"method": "Read the official array subscript expression rules and examples.",
"position": 2,
"runtime": [],
"sources": [
"doc.array.18"
],
"statement": "An array element read outside the current bounds, or a read with the wrong number of subscripts, returns NULL rather than raising an error."
}claims · array.slice-rules
{
"claim_id": "array.slice-rules",
"limits": "The result also depends on NULL array or subscript expressions; it is not evidence of a 2202E error.",
"method": "Read the documented slice behavior immediately following the element subscript rules.",
"position": 3,
"runtime": [],
"sources": [
"doc.array.18"
],
"statement": "A slice completely outside the current bounds can yield an empty zero-dimensional array, while a partially overlapping slice is reduced to the overlap."
}claims · array.assignment-rules
{
"claim_id": "array.assignment-rules",
"limits": "Whether a particular assignment raises 2202E depends on the array value, dimensions, and exact operation.",
"method": "Read the official assignment rules and the fixed arrayfuncs validation branches.",
"position": 4,
"runtime": [],
"sources": [
"doc.array.18",
"src.arrayfuncs.18.6"
],
"statement": "One-dimensional subscript assignment can enlarge an array and fill intervening positions with NULL; multidimensional enlargement is not supported, and empty-array slice assignment requires both boundaries."
}claims · mechanism.concat-dimensions
{
"claim_id": "mechanism.concat-dimensions",
"limits": "The primary and detail templates are specific to this concatenation path.",
"method": "Trace the dimension and lower-bound comparison into the errcode and primary/detail construction in array_cat().",
"position": 5,
"runtime": [],
"sources": [
"src.array-userfuncs.18.6"
],
"statement": "array_cat raises 2202E when equal-rank arrays have differing non-concatenated dimensions or lower bounds."
}claims · mechanism.multidimensional-construction
{
"claim_id": "mechanism.multidimensional-construction",
"limits": "This source path is separate from array_cat and has a different message template.",
"method": "Read the multidimensional array constructor check and its ERRCODE_ARRAY_SUBSCRIPT_ERROR ereport.",
"position": 6,
"runtime": [],
"sources": [
"src.exec-expr.18.6"
],
"statement": "The expression evaluator raises 2202E when non-empty array expressions used to form a multidimensional array have incompatible dimensions."
}claims · diagnosis.metadata-functions
{
"claim_id": "diagnosis.metadata-functions",
"limits": "Inspection functions describe the value supplied to them; they do not predict every coercion or operator resolution step.",
"method": "Read the PostgreSQL 18 array function table entries.",
"position": 7,
"runtime": [],
"sources": [
"doc.func.18"
],
"statement": "array_ndims, array_dims, array_lower, array_upper, and cardinality expose the rank, dimensions, bounds, and item count needed to inspect an array operation."
}claims · runtime.concat-case
{
"claim_id": "runtime.concat-case",
"limits": "The run is an autocommit concatenation case; it does not test every assignment, slice, constructor, or explicit-transaction path.",
"method": "Read the stable case and ordered snippet registry, then compare the case_result diagnostics and status in both final target summaries and raw records.",
"position": 8,
"runtime": [],
"sources": [
"case-manifest.2202E",
"snippet-registry.2202E.final",
"runtime.2202E-snippet-registry-final-20260909.latest",
"runtime.2202E-snippet-registry-final-20260909.pg10"
],
"statement": "The incompatible_array_dimensions case returned 2202E with the incompatible concatenation diagnostic and then successfully executed a valid concatenation on the same connection."
}claims · runtime.transaction-boundary
{
"claim_id": "runtime.transaction-boundary",
"limits": "No explicit transaction or PL/pgSQL exception handler was executed in this 2202E case.",
"method": "Read the transaction contract and the status/valid-array observations in both runner summaries.",
"position": 9,
"runtime": [],
"sources": [
"doc.transactions.18",
"runtime.2202E-snippet-registry-final-20260909.latest",
"runtime.2202E-snippet-registry-final-20260909.pg10"
],
"statement": "The representative 2202E ERROR left the autocommit connection IDLE and the follow-up valid statement succeeded; explicit transaction and PL/pgSQL handler outcomes must be handled at their own boundaries."
}claims · versions.catalogue-boundary
{
"claim_id": "versions.catalogue-boundary",
"limits": "The pre-9.0 source set is locked through 8.4.22 but candidate source gaps remain for 7.0–7.3; observed presence is not an asserted introduction version.",
"method": "Read the manifest snapshot and the same-tag REL8_1_4 errcodes.sgml row for the code; the generated data record is a derived view.",
"position": 10,
"runtime": [],
"sources": [
"manifest.2202E",
"doc.errcodes.8.1.4"
],
"statement": "The locked catalogue records 2202E in the 7.4–8.4.22 pre-9.0 formal sources, every listed formal snapshot from 9.0.23 through 18.6, and 19beta3. The same-tag REL8_1_4 errcodes.sgml row already lists 2202E as array_subscript_error, confirming that condition-name observation by 8.1.4. Candidate source gaps remain for 7.0–7.3, so 7.4 is a presence boundary rather than an exact introduction version."
}messages · message.concat
{
"limits": "The template belongs to array_cat; runtime source lines are 450 on 18.6 and 356 on 10.21.",
"message_id": "message.concat",
"path": "",
"position": 0,
"raw": {
"detail_template": "Arrays with differing element dimensions are not compatible for concatenation.",
"id": "message.concat",
"limits": "The template belongs to array_cat; runtime source lines are 450 on 18.6 and 356 on 10.21.",
"primary_template": "cannot concatenate incompatible arrays",
"severity_source": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.array-userfuncs.18.6",
"runtime.2202E-snippet-registry-final-20260909.latest",
"runtime.2202E-snippet-registry-final-20260909.pg10"
],
"sqlstate": "2202E"
},
"severity": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.array-userfuncs.18.6",
"runtime.2202E-snippet-registry-final-20260909.latest",
"runtime.2202E-snippet-registry-final-20260909.pg10"
],
"templates": [
{
"kind": "primary",
"literal": "cannot concatenate incompatible arrays",
"position": 0,
"role": "",
"template": "cannot concatenate incompatible arrays"
},
{
"kind": "detail",
"literal": "Arrays with differing element dimensions are not compatible for concatenation.",
"position": 1,
"role": "",
"template": "Arrays with differing element dimensions are not compatible for concatenation."
}
]
}messages · message.subscript
{
"limits": "This template is emitted by validated assignment/slice paths; a plain out-of-bounds read is documented to return NULL.",
"message_id": "message.subscript",
"path": "",
"position": 1,
"raw": {
"id": "message.subscript",
"limits": "This template is emitted by validated assignment/slice paths; a plain out-of-bounds read is documented to return NULL.",
"primary_template": "array subscript out of range",
"severity_source": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.arrayfuncs.18.6"
],
"sqlstate": "2202E"
},
"severity": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.arrayfuncs.18.6"
],
"templates": [
{
"kind": "primary",
"literal": "array subscript out of range",
"position": 0,
"role": "",
"template": "array subscript out of range"
}
]
}messages · message.slice-boundaries
{
"limits": "This is the empty-array slice assignment path and is not a general read diagnostic.",
"message_id": "message.slice-boundaries",
"path": "",
"position": 2,
"raw": {
"detail_template": "When assigning to a slice of an empty array value, slice boundaries must be fully specified.",
"id": "message.slice-boundaries",
"limits": "This is the empty-array slice assignment path and is not a general read diagnostic.",
"primary_template": "array slice subscript must provide both boundaries",
"severity_source": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.arrayfuncs.18.6"
],
"sqlstate": "2202E"
},
"severity": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.arrayfuncs.18.6"
],
"templates": [
{
"kind": "primary",
"literal": "array slice subscript must provide both boundaries",
"position": 0,
"role": "",
"template": "array slice subscript must provide both boundaries"
},
{
"kind": "detail",
"literal": "When assigning to a slice of an empty array value, slice boundaries must be fully specified.",
"position": 1,
"role": "",
"template": "When assigning to a slice of an empty array value, slice boundaries must be fully specified."
}
]
}messages · message.bound-order
{
"limits": "This template is emitted by the slice boundary validation branch.",
"message_id": "message.bound-order",
"path": "",
"position": 3,
"raw": {
"id": "message.bound-order",
"limits": "This template is emitted by the slice boundary validation branch.",
"primary_template": "upper bound cannot be less than lower bound",
"severity_source": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.arrayfuncs.18.6"
],
"sqlstate": "2202E"
},
"severity": "explicit ERROR with ERRCODE_ARRAY_SUBSCRIPT_ERROR",
"sources": [
"src.arrayfuncs.18.6"
],
"templates": [
{
"kind": "primary",
"literal": "upper bound cannot be less than lower bound",
"position": 0,
"role": "",
"template": "upper bound cannot be less than lower bound"
}
]
}runtimes · runtime.2202E-snippet-registry-final-20260909.latest · 18.6 (Homebrew) · passed
{
"cases": [
"incompatible_array_dimensions"
],
"limits": "",
"position": 0,
"raw": {
"cases": [
"incompatible_array_dimensions"
],
"id": "runtime.2202E-snippet-registry-final-20260909.latest",
"observed": {
"message_detail": "Arrays with differing element dimensions are not compatible for concatenation.",
"message_primary": "cannot concatenate incompatible arrays",
"severity": "ERROR",
"source_file": "array_userfuncs.c",
"source_function": "array_cat",
"source_line": "450",
"sqlstate": "2202E",
"status_after_error": "IDLE",
"valid_array": [
1,
2,
3,
4
]
},
"raw": "verify/results/2202E-snippet-registry-final-20260909/latest/raw.jsonl",
"raw_sha256": "79794b2a9728ec77920b27613121b6697077f2d8820b3f1b0bc66c2d049bcb6f",
"run_id": "2202E-snippet-registry-final-20260909",
"server_version": "18.6 (Homebrew)",
"server_version_num": 180006,
"snippet_registry": {
"path": "verify/cases/2202E/snippets.json",
"sha256": "f32e131d29c29543cba59be6ac16cc8cdee8d6ac684ff60dec4f58063d0f6e77"
},
"status": "passed",
"summary": "verify/results/2202E-snippet-registry-final-20260909/latest/summary.json",
"summary_sha256": "78a2515555554f99aadfd8586ad58949f2744323e13a71960143da42ee1cc5a3",
"target": "latest"
},
"run_id": "2202E-snippet-registry-final-20260909",
"runtime_id": "runtime.2202E-snippet-registry-final-20260909.latest",
"server_version": "18.6 (Homebrew)",
"status": "passed",
"target": "latest"
}runtimes · runtime.2202E-snippet-registry-final-20260909.pg10 · 10.21 (Debian 10.21-1.pgdg90+1) · passed
{
"cases": [
"incompatible_array_dimensions"
],
"limits": "",
"position": 1,
"raw": {
"cases": [
"incompatible_array_dimensions"
],
"id": "runtime.2202E-snippet-registry-final-20260909.pg10",
"image": "postgres@sha256:b2baf8998630663d21370da06387c950e587071bdd307ee34e661cdcc7442bcc",
"observed": {
"message_detail": "Arrays with differing element dimensions are not compatible for concatenation.",
"message_primary": "cannot concatenate incompatible arrays",
"severity": "ERROR",
"source_file": "array_userfuncs.c",
"source_function": "array_cat",
"source_line": "356",
"sqlstate": "2202E",
"status_after_error": "IDLE",
"valid_array": [
1,
2,
3,
4
]
},
"raw": "verify/results/2202E-snippet-registry-final-20260909/pg10/raw.jsonl",
"raw_sha256": "1b6eeb7b7abffd57d9d470d3639df04e7b49affacd25a24cb35e423fcc8d037d",
"run_id": "2202E-snippet-registry-final-20260909",
"server_version": "10.21 (Debian 10.21-1.pgdg90+1)",
"server_version_num": 100021,
"snippet_registry": {
"path": "verify/cases/2202E/snippets.json",
"sha256": "f32e131d29c29543cba59be6ac16cc8cdee8d6ac684ff60dec4f58063d0f6e77"
},
"status": "passed",
"summary": "verify/results/2202E-snippet-registry-final-20260909/pg10/summary.json",
"summary_sha256": "db9c312891f485e36a017684ba802d9fa6c9ab1508c4b0be292165e3a24fb8d8",
"target": "pg10"
},
"run_id": "2202E-snippet-registry-final-20260909",
"runtime_id": "runtime.2202E-snippet-registry-final-20260909.pg10",
"server_version": "10.21 (Debian 10.21-1.pgdg90+1)",
"status": "passed",
"target": "pg10"
}sources · src.errcodes.18.6
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "lines 159-164",
"path": "src/backend/utils/errcodes.txt",
"position": 0,
"sha256": "6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba",
"source_id": "src.errcodes.18.6",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt"
}sources · src.array-userfuncs.18.6
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "lines 443-450, array_cat dimension checks",
"path": "src/backend/utils/adt/array_userfuncs.c",
"position": 1,
"sha256": "dc14f95e12c92360f8b10c7546d8af4a0b41a6a0431efc2a4f5b236155eadb50",
"source_id": "src.array-userfuncs.18.6",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/array_userfuncs.c#L443-L450"
}sources · src.arrayfuncs.18.6
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "lines 2644-2653, 2881-2888, 2976-2990, 3008-3017",
"path": "src/backend/utils/adt/arrayfuncs.c",
"position": 2,
"sha256": "1f1c9dab1e5f8c936bbfe6c28a3011365b433367e1854166bbec9d2e97341177",
"source_id": "src.arrayfuncs.18.6",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/adt/arrayfuncs.c#L2644-L2653"
}sources · src.exec-expr.18.6
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "lines 3549-3565, multidimensional constructor checks",
"path": "src/backend/executor/execExprInterp.c",
"position": 3,
"sha256": "05cbc1cdfd1d091b02045ee55b37147f69be8f0fcb23274751820cc09db33564",
"source_id": "src.exec-expr.18.6",
"tag": "REL_18_6",
"url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/executor/execExprInterp.c#L3549-L3565"
}sources · doc.array.18
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "lines 302-321, 403-437, array subscript, slice, and assignment behavior",
"path": "doc/src/sgml/array.sgml",
"position": 4,
"sha256": "a432afb453ba3e4fc99b3b8055794fbd1f1d2980a85b14933ea8bae285dc6ab4",
"source_id": "doc.array.18",
"tag": "PG18-docs",
"url": "https://www.postgresql.org/docs/18/arrays.html"
}sources · doc.func.18
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "lines 20487-20586 and 20810-20842, array metadata functions",
"path": "doc/src/sgml/func.sgml",
"position": 5,
"sha256": "05d03f505dc3c3b4fb2b3a6e8ed3275c425306a8ff20dd9548e838c26bbb968a",
"source_id": "doc.func.18",
"tag": "PG18-docs",
"url": "https://www.postgresql.org/docs/18/functions-array.html"
}sources · doc.transactions.18
{
"commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
"docs_url": "",
"kind": "",
"location": "transaction rollback and savepoint behavior",
"path": "doc/src/sgml/xact.sgml",
"position": 6,
"sha256": "b48fbe8bd02ce3d1181a350c88c8baa6e11c73edc90a936e77b180daef328c5c",
"source_id": "doc.transactions.18",
"tag": "PG18-docs",
"url": "https://www.postgresql.org/docs/18/tutorial-transactions.html"
}sources · doc.errcodes.8.1.4
{
"commit": "313a720f95a3f41b59f853786b184f38f82172d9",
"docs_url": "",
"kind": "upstream_source",
"location": "REL8_1_4 table rows 305-307",
"path": "doc/src/sgml/errcodes.sgml",
"position": 7,
"sha256": "fdd6f5470b19970d3b60219a44e66b33193647975d346adfe2a98178f706b776",
"source_id": "doc.errcodes.8.1.4",
"tag": "",
"url": "https://github.com/postgres/postgres/blob/313a720f95a3f41b59f853786b184f38f82172d9/doc/src/sgml/errcodes.sgml#L305-L307"
}sources · manifest.2202E
{
"commit": "",
"docs_url": "",
"kind": "local_artifact",
"location": "snapshots and definition_blobs entries for the 2202E definition",
"path": "sources/manifest.lock.json",
"position": 8,
"sha256": "1727a275f336988ff96b4f9990a4ca253080f73fc5d316e7def165c8cf3708a8",
"source_id": "manifest.2202E",
"tag": "",
"url": "../sources/manifest.lock.json"
}sources · case-manifest.2202E
{
"commit": "",
"docs_url": "",
"kind": "local_artifact",
"location": "incompatible_array_dimensions",
"path": "verify/cases/2202E/cases.json",
"position": 9,
"sha256": "1d2e960bba60d3df05073ce8e34d185de91f991687256ba49c6840d5d196ff2a",
"source_id": "case-manifest.2202E",
"tag": "",
"url": "../verify/cases/2202E/cases.json"
}sources · snippet-registry.2202E.final
{
"commit": "",
"docs_url": "",
"kind": "local_artifact",
"location": "incompatible_array_dimensions ordered trigger and followup",
"path": "verify/cases/2202E/snippets.json",
"position": 10,
"sha256": "f32e131d29c29543cba59be6ac16cc8cdee8d6ac684ff60dec4f58063d0f6e77",
"source_id": "snippet-registry.2202E.final",
"tag": "",
"url": "../verify/cases/2202E/snippets.json"
}来源引用
定义来源
center · PostgreSQL 18 · english-manuals:c2540537867663a348ed74978e2f14d64fb4dc6fbb0f1b5d2eced9085e906c15
正文语言: zh-Hans · english-manuals:c2540537867663a348ed74978e2f14d64fb4dc6fbb0f1b5d2eced9085e906c15