키워드#
AgensGraph는 PostgreSQL의 키워드 목록을 물려받고 거기에 자기 그래프 문장에 필요한 단어를 더합니다. 키워드의 범주가 그 단어를 여전히 이름으로 쓸 수 있는 자리를 정합니다. 비예약어는 무엇의 이름으로도 쓸 수 있습니다. 예약어는 그럴 수 없고 먼저 큰따옴표로 감싸야 합니다.
물려받은 SQL 단어와 그 범주는 PostgreSQL의 Key Words 부록이 나열합니다. 이 페이지는 AgensGraph가 더하고 바꾸는 것만 다룹니다. PostgreSQL이 쓰는 범주 중 타입/함수 이름과 컬럼 이름 둘에는 AgensGraph의 항목이 없습니다. 아래의 모든 단어는 비예약어이거나 완전한 예약어입니다.
식별자는 SQL 방식대로 큰따옴표로 감쌉니다. 백틱은 구문 오류이므로 `let` 은 회피 표기로
통하지 않습니다. "let" 이라고 쓰십시오.
AgensGraph가 더하는 단어#
아래 스물네 단어는 AgensGraph의 키워드 목록에 있고 PostgreSQL 18의 목록에는 없습니다. 비고는 그 단어가 속한 절이나 문장을 가리킵니다.
단어 |
범주 |
비고 |
|---|---|---|
|
비예약 |
경로 함수. 두 정점 사이의 모든 최단 경로입니다. |
|
비예약 |
|
|
비예약 |
|
|
비예약 |
|
|
비예약 |
|
|
예약 |
키워드만으로 쓰는 작업 그래프입니다. |
|
예약 |
|
|
비예약 |
경로 함수. 가중치가 있는 최단 경로입니다. |
|
비예약 |
|
|
비예약 |
|
|
예약 |
아무것도 투영하지 않는 쿼리를 끝내는 |
|
비예약 |
|
|
예약 |
|
|
비예약 |
|
|
비예약 |
|
|
비예약 |
|
|
비예약 |
경로 함수. 최단 경로 하나입니다. |
|
비예약 |
|
|
비예약 |
|
|
비예약 |
|
|
예약 |
|
|
비예약 |
|
|
예약 |
|
|
비예약 |
|
AgensGraph가 물려받은 단어 넷은 여기서 예약어이고 PostgreSQL에서는 비예약어입니다. 각각이 Cypher
절을 이끌기 때문입니다. insert·match·merge·return 입니다.
CALL은 일부러 비예약어로 두었으므로 call은 여전히 컬럼·테이블·별칭·레이블·속성 키·변수의
이름이 됩니다. 뜻이 달라지는 표기는 정확히 둘입니다. 렉서가 CALL 뒤에 (나 {가 올 때 그것을
특별하게 다루기 때문입니다:
call(...)— 이름이 글자 그대로call인 함수를 인수와 함께 호출하는 것입니다. 따옴표로 감싸십시오."call"(1)입니다.(call { ... })— 변수 이름이call이고 레이블 없이 속성 맵을 지닌 정점 패턴입니다. 따옴표로 감싸십시오.("call" { ... })입니다.
2.18에서 예약어가 된 단어#
2.18에서 예약어이고 2.17에서는 아니었던 단어가 여섯입니다. insert·finish·let·xor·
current_graph·current_property_graph 입니다. 단어를 예약하면 그것을 이름으로 쓰던 애플리케이션이
망가질 수 있으므로, 각각을 문법이 허락하는 만큼 좁게 만들었습니다. 그래서 결과가 한결같지 않습니다.
여전히 통하는 자리가 있으며, 아래 표는 일반 규칙이 아니라 실제로 재어 본 결과입니다.
각 칸은 그 자리를 2.18 서버에서 실제로 실행해 본 결과입니다. 된다는 따옴표 없는 단어가 받아들여졌다는 뜻입니다.
단어 |
패턴 안의 레이블 |
|
변수 |
|
정렬 키로 쓴 별칭 |
속성 키 |
|---|---|---|---|---|---|---|
|
된다 |
안 된다 |
된다 |
된다 |
된다 |
된다 |
|
된다 |
안 된다 |
안 된다 |
된다 |
안 된다 |
된다 |
|
안 된다 |
안 된다 |
안 된다 |
된다 |
안 된다 |
된다 |
|
안 된다 |
안 된다 |
안 된다 |
된다 |
안 된다 |
된다 |
|
안 된다 |
안 된다 |
안 된다 |
된다 |
된다 |
된다 |
|
안 된다 |
안 된다 |
안 된다 |
된다 |
된다 |
된다 |
그 표에서 두 열이 이상하게 읽히므로, 둘 다 말로 적어 둡니다.
insert와 finish는 레이블로 쓸 때 패턴에서는 되고 레이블 DDL에서는 안 됩니다.
CREATE (:insert)와 MATCH (n:insert)는 받아들여집니다. CREATE VLABEL insert는 그렇지
않습니다:
CREATE VLABEL insert;
ERROR: syntax error at or near "insert"
레이블은 따옴표로 감싼 이름으로 만드십시오. CREATE VLABEL "insert" 입니다. 그 뒤에도 따옴표 없는
패턴 표기가 그것을 찾습니다. 따옴표 없는 식별자는 소문자로 내려가기 때문입니다.
별칭은 언제나 되지만 그 별칭으로 정렬하는 것은 늘 되지는 않습니다. RETURN n.k AS let은
받아들여지고 그 뒤의 ORDER BY let은 그렇지 않습니다:
MATCH (n:t) RETURN n.k AS let ORDER BY let;
ERROR: syntax error at or near "let"
current_graph와 current_property_graph가 예외입니다. 이 두 이름의 별칭은 정렬됩니다.
이름을 큰따옴표로 감싸면 실패하는 칸이 모두 해결됩니다. 정의할 때와 쓸 때 모두 감싸야 합니다:
MATCH (n:t) RETURN n.k AS "let" ORDER BY "let";
속성 키에는 따옴표가 결코 필요하지 않습니다. 키는 식별자가 아니라 jsonb 문서 안의 문자열이므로,
CREATE (:t {let: 1})과 RETURN n.let은 이 모든 것에 영향을 받지 않습니다.
SQL 쪽에서도 같은 여섯 단어는 컬럼 이름으로 쓸 때 따옴표가 필요합니다.
CREATE TABLE t (xor int)은 구문 오류이고 CREATE TABLE t ("xor" int)는 됩니다.
예약어 집합은 그래프 단어보다 넓다#
그래프 절을 위해 단어를 예약하는 것은 전체 그림의 일부일 뿐입니다. AgensGraph는 PostgreSQL의
예약어도 물려받습니다. Cypher의 레이블이나 변수도 같은 문법의 식별자이므로, 그중 무엇이든 따옴표
없이는 거부됩니다. both가 좋은 예입니다. 그래프와 아무 상관이 없는 PostgreSQL 예약어입니다:
CREATE VLABEL both;
ERROR: syntax error at or near "both"
all·and·any·array·as·case·cast·end·from·in·not·null·or·select·
table·to·union·when·where와 PostgreSQL 예약어 목록의 나머지도 마찬가지입니다. 레이블·
변수·속성 인덱스의 이름을 고르기 전에 PostgreSQL의
Key Words 부록에 비추어
확인하십시오. AgensGraph가 지닌 모든 SQL 단어의 범주가 거기에 있습니다.
참고
키워드 목록은 AgensGraph 소스의 파일 하나이며, 단어마다 범주와 함께 한 줄씩 적혀 있습니다. 어떤 이름이 거부되는데 이 페이지가 그 까닭을 말해 주지 않으면 그것을 보십시오.
관련 항목#
구문 — 식별자 접기를 포함한 어휘 규칙
Cypher 호환성 — 옮겨 온 쿼리가 부딪히는 그 밖의 차이
2.18로 업그레이드하기 — 업그레이드 전 점검 목록 전부
AgensGraph 2.18.6.0 릴리스 노트 — 이 단어들이 쓰이는 절