키워드#

AgensGraph는 PostgreSQL의 키워드 목록을 물려받고 거기에 자기 그래프 문장에 필요한 단어를 더합니다. 키워드의 범주가 그 단어를 여전히 이름으로 쓸 수 있는 자리를 정합니다. 비예약어는 무엇의 이름으로도 쓸 수 있습니다. 예약어는 그럴 수 없고 먼저 큰따옴표로 감싸야 합니다.

물려받은 SQL 단어와 그 범주는 PostgreSQL의 Key Words 부록이 나열합니다. 이 페이지는 AgensGraph가 더하고 바꾸는 것만 다룹니다. PostgreSQL이 쓰는 범주 중 타입/함수 이름과 컬럼 이름 둘에는 AgensGraph의 항목이 없습니다. 아래의 모든 단어는 비예약어이거나 완전한 예약어입니다.

식별자는 SQL 방식대로 큰따옴표로 감쌉니다. 백틱은 구문 오류이므로 `let` 은 회피 표기로 통하지 않습니다. "let" 이라고 쓰십시오.

AgensGraph가 더하는 단어#

아래 스물네 단어는 AgensGraph의 키워드 목록에 있고 PostgreSQL 18의 목록에는 없습니다. 비고는 그 단어가 속한 절이나 문장을 가리킵니다.

단어

범주

비고

allshortestpaths

비예약

경로 함수. 두 정점 사이의 모든 최단 경로입니다.

assert

비예약

CREATE CONSTRAINT … ASSERT 입니다.

collect

비예약

COLLECT { } 서브쿼리 표현식입니다.

contains

비예약

CONTAINS 문자열 조건입니다.

count

비예약

COUNT { } 서브쿼리 표현식입니다.

current_graph

예약

키워드만으로 쓰는 작업 그래프입니다.

current_property_graph

예약

CURRENT_GRAPH의 동의어입니다.

dijkstra

비예약

경로 함수. 가중치가 있는 최단 경로입니다.

elabel

비예약

CREATE ELABEL·ALTER ELABEL·DROP ELABEL 입니다.

ends

비예약

ENDS WITH 문자열 조건입니다.

finish

예약

아무것도 투영하지 않는 쿼리를 끝내는 FINISH 절입니다.

graph

비예약

CREATE GRAPH·DROP GRAPH, 그리고 graph_path 설정의 문장들입니다.

let

예약

LET 절입니다.

optional

비예약

OPTIONAL MATCH와 OPTIONAL CALL 입니다.

property

비예약

CREATE PROPERTY INDEX·CURRENT_PROPERTY_GRAPH 입니다.

remove

비예약

REMOVE 절입니다.

shortestpath

비예약

경로 함수. 최단 경로 하나입니다.

single

비예약

single() 리스트 조건입니다.

size

비예약

size() 함수입니다.

starts

비예약

STARTS WITH 문자열 조건입니다.

unwind

예약

UNWIND 절입니다.

vlabel

비예약

CREATE VLABEL·ALTER VLABEL·DROP VLABEL 입니다.

xor

예약

XOR 불리언 연산자입니다.

yield

비예약

CALL … YIELD 입니다.

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 서버에서 실제로 실행해 본 결과입니다. 된다는 따옴표 없는 단어가 받아들여졌다는 뜻입니다.

단어

패턴 안의 레이블

CREATE VLABEL

변수

RETURN … AS 별칭

정렬 키로 쓴 별칭

속성 키

insert

된다

안 된다

된다

된다

된다

된다

finish

된다

안 된다

안 된다

된다

안 된다

된다

let

안 된다

안 된다

안 된다

된다

안 된다

된다

xor

안 된다

안 된다

안 된다

된다

안 된다

된다

current_graph

안 된다

안 된다

안 된다

된다

된다

된다

current_property_graph

안 된다

안 된다

안 된다

된다

된다

된다

그 표에서 두 열이 이상하게 읽히므로, 둘 다 말로 적어 둡니다.

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 소스의 파일 하나이며, 단어마다 범주와 함께 한 줄씩 적혀 있습니다. 어떤 이름이 거부되는데 이 페이지가 그 까닭을 말해 주지 않으면 그것을 보십시오.

관련 항목#