{#error-codes-error-codes} # 오류 코드 AgensGraph 서버가 내는 모든 메시지는 PostgreSQL과 똑같이 다섯 글자의 SQLSTATE 코드를 지닙니다. 앞 두 글자가 오류의 *부류*를, 뒤 세 글자가 그 안의 구체적인 상황을 가리킵니다. 그래서 코드를 모르는 애플리케이션도 그 부류를 보고 대응할 수 있습니다. **AgensGraph는 자체 오류 코드를 정의하지 않습니다.** 오류 코드 목록이 PostgreSQL 18의 것과 바이트 단위로 같으며, 실패한 그래프 문장은 PostgreSQL에 이미 있는 코드 중 하나를 냅니다. PL/pgSQL이 각각에 쓰는 상황 이름을 곁들인 전체 코드 목록은 PostgreSQL의 [Error Codes](https://www.postgresql.org/docs/18/errcodes-appendix.html) 부록에 있습니다. 여기서는 옮겨 적지 않습니다. 클라이언트에게 이것이 뜻하는 바는, 그래프에만 해당하는 실패를 코드로 알아볼 수 없다는 것입니다. `multiple types for relationship not supported`와 `Cypher query must end with RETURN, FINISH or update clause`는 `0A000`과 `42601`로 옵니다. 지원하지 않는 SQL 기능과 SQL 구문 오류가 쓰는 것과 같은 코드입니다. 그 둘을 갈라야 한다면 메시지 텍스트로 대조하고, 믿을 것은 부류라고 여기십시오. {#error-codes-reading-a-code} ## 코드 읽기 `psql`에서 `\set VERBOSITY verbose`를 실행하면 그 뒤의 모든 오류가 자기 SQLSTATE와 그것을 낸 소스 위치를 함께 보여 줍니다: ```psql \set VERBOSITY verbose ``` ```cypher MATCH (m:movie {year: 1999}) WHERE m.title RETURN count(m); ``` ``` ERROR: 42846: cannot cast "The Matrix" (jsonb type string) to boolean LOCATION: ExecEvalCypherTypeCast, execExprInterp.c:5900 ``` `VERBOSITY`를 `sqlstate`로 두면 코드만 출력합니다. 드라이버에서는 그 코드가 오류 객체의 필드이며, 대부분의 PostgreSQL 클라이언트에서 `sqlstate`입니다. {#error-codes-codes-a-graph-statement-commonly-raises} ## 그래프 문장이 흔히 내는 코드 그래프 작업에서 만나게 될 코드들이며, 각각에 실제 메시지를 곁들였습니다. 상황 이름은 PL/pgSQL과 대부분의 드라이버가 쓰는 것입니다. | 코드 | 상황 이름 | 예를 들어 이런 것이 냅니다 | | --- | --- | --- | | `0A000` | `feature_not_supported` | `multiple types for relationship not supported` — 종류를 둘 이상 적은 관계 패턴입니다. | | `22023` | `invalid_parameter_value` | `labid out of range: 65536` — [제한](limits.md)의 범위를 벗어난 `graphid`입니다. | | `3F000` | `invalid_schema_name` | `graph_path is NULL` — 작업할 그래프가 설정돼 있지 않습니다. 그래프가 스키마이므로 부류가 이것입니다. | | `42601` | `syntax_error` | `Cypher query must end with RETURN, FINISH or update clause`, 그리고 모든 파싱 실패입니다. | | `42703` | `undefined_column` | `variable does not exist` — 범위 안에 없는 이름입니다. | | `42712` | `duplicate_alias` | `WITH passes on "t" more than once`, 그리고 그 밖의 이름 충돌 거부입니다. | | `42846` | `cannot_coerce` | `cannot cast "…" (jsonb type string) to boolean` — 조건에 불리언이 아닌 것을 준 경우입니다. | | `42P07` | `duplicate_table` | `label "movie" already exists` — 레이블이 테이블이므로 레이블 중복은 테이블 중복입니다. | | `54000` | `program_limit_exceeded` | `no more new labels are available` — 그래프의 레이블 id를 다 썼습니다. | | `55000` | `object_not_in_prerequisite_state` | `Vertex with connected edges cannot be removed` — 매달린 간선을 남기게 될 `DELETE`입니다. | 그중 세 행이 예상해야 할 방식을 보여 줍니다. 그래프는 스키마이고, 레이블은 테이블이며, 속성은 `jsonb` 값입니다. 그래서 그래프의 오류는 그것이 실제로 관계된 PostgreSQL 객체의 부류로 보고됩니다. {#error-codes-see-also} ## 관련 항목 - [Cypher 호환성](cypher-compatibility.md) — 다른 Cypher에서 옮겨 온 쿼리가 부딪히는 오류와 그 문구 - [제한](limits.md) — `22023`과 `54000`을 내는 두 제한 - [용어집](glossary.md) — 이 메시지들이 쓰는 용어