GQL 적합성#
AgensGraph는 ISO/IEC 39075:2024 Information technology — Database languages — GQL 의 일부를 구현합니다. 이 부록은 적합성을 남김없이 선언하는 문서가 아닙니다. 주요 주제를 알맞고 쓸모 있는 만큼 자세히 다룹니다.
아래 표는 표준의 세부 조항을 기준으로 삼습니다. 표준 자신이 구문 조각에 적합성 규칙을 붙일 때 쓰는 단위가 그것이기 때문입니다. 모든 행은 실제로 도는 2.18 서버에서 확인했습니다. 어떤 행이 Yes라고 말하는 것은 그 조항이 정의하는 구문이 받아들여졌고 조항이 요구하는 결과를 냈을 때뿐입니다. 조항의 구문 중 일부는 받아들여지고 나머지는 오류를 내면 Partial이고, 어느 것도 파싱되지 않으면 No입니다. 표준이 같은 생각을 여러 표기로 제시하는 곳에서는 AgensGraph가 어느 쪽을 취하는지를 비고에 적었습니다.
모든 행에 두루 해당하는 것 셋이 있으며, 비고마다 되풀이하지 않습니다.
GQL은 별도의 모드가 아닙니다. GQL 문장과 Cypher 문장은 같은 파서를 지나며 한 파이프라인에서 섞일 수
있으므로, LET이 WITH 옆에 오고 INSERT가 CREATE 옆에 옵니다.
Cypher, GQL, SQL을 참고하십시오.
그래프는 PostgreSQL 스키마이고 레이블은 테이블입니다. 그래서 디렉터리·스키마·그래프 타입의
카탈로그를 설명하는 표준의 부분들에는 GQL이 아니라 PostgreSQL 쪽 대응물이 있습니다. 작업 그래프는
USE 절이 아니라 graph_path 설정에서 오고, 권한은 PostgreSQL의 권한입니다.
그래프가 어떻게 저장되는가를 참고하십시오.
오류는 GQLSTATUS가 아니라 다섯 글자의 SQLSTATE를 지닙니다. 오류 코드를 참고하십시오.
지원하는 기능#
아래 세부 조항은 전부 또는 일부가 구현돼 있습니다. Partial인 비고는 무엇이 빠졌는지를 가리키므로, 표준 GQL을 옮겨 오는 독자가 무엇을 살펴야 할지 알 수 있습니다.
세부 조항 |
이름 |
지원 |
비고 |
|---|---|---|---|
8.1–8.4 |
|
Yes |
PostgreSQL 자신의 트랜잭션 문장이 이 조항들에 답합니다. |
9.2 |
|
Partial |
|
11.1 |
|
Partial |
|
12.4 |
|
Partial |
|
12.5 |
|
Partial |
|
13.1 |
|
Yes |
문장 하나가 읽기 절과 쓰기 절을 한 파이프라인에 엮으며, 쓰기 절의 변경이 그 뒤의 읽기 절에 보입니다. |
13.2 |
|
Yes |
|
13.3 |
|
Partial |
속성 대입이 동작하며, 표준에 없는 |
13.4 |
|
Partial |
|
13.5 |
|
Yes |
|
14.2 |
|
Partial |
|
14.3 |
|
Yes |
쿼리는 아래의 기본 쿼리 문장을 이어 놓은 것이며, 기본 결과 문장으로 끝납니다. |
14.4 |
|
Partial |
|
14.5 |
|
Partial |
두 호출 형태 모두 동작합니다. 각각이 무엇을 요구하는지는 15.2와 15.3을 참고하십시오. |
14.6 |
|
Yes |
|
14.7 |
|
Yes |
더하는 방식이고 행 단위이며 쿼리를 이끌 수도 있습니다. |
14.8 |
|
Partial |
리스트 순회가 동작하며 |
14.9 |
|
Yes |
|
14.10 |
|
Yes |
|
14.11 |
|
Partial |
|
15.1 |
|
Yes |
|
15.2 |
|
Partial |
|
15.3 |
|
Partial |
|
16.3 |
|
Partial |
그래프 패턴이 바인딩 테이블을 만듭니다. 이 조항이 함께 허용하는 패턴 |
16.4 |
|
Partial |
쉼표로 구분한 경로 패턴이 동작합니다. 일치 모드( |
16.5 |
|
Yes |
|
16.7 |
|
Partial |
이어 붙이기가 동작합니다. 경로 다중집합 선택과 경로 패턴 합집합 — |
16.8 |
|
Partial |
레이블 이름 하나만 됩니다. 논리합( |
16.9 |
|
Yes |
|
16.10 |
|
Yes |
패턴 변수는 그 뒤의 모든 절에서 범위 안에 있습니다. |
16.11 |
|
Partial |
간선 수량자 |
16.13 |
|
Partial |
|
16.16 |
|
Yes |
정렬 키 여럿, |
16.17 |
|
Yes |
16.16과 같습니다. 정수 정렬 키는 출력 컬럼 번호가 아니라 상수입니다. Cypher 호환성을 참고하십시오. |
16.18 |
|
Yes |
|
16.19 |
|
Yes |
조항이 정의하는 두 표기 |
19.1 |
|
Yes |
조항이 요구하는 대로, 조건은 불리언만 받고 그 밖의 것은 받지 않습니다. |
19.2 |
|
Partial |
아래 네 가지 조건입니다. 19.6–19.13이 정의하는 나머지 아홉은 지원하지 않습니다. |
19.3 |
|
Yes |
|
19.4 |
|
Partial |
조항이 정의하는 다섯 형태 중 넷입니다. |
19.5 |
|
Yes |
|
20.1 |
|
Yes |
연산자·함수 호출· |
20.2 |
|
Yes |
리터럴, 변수, 속성 참조, 괄호로 묶은 표현식입니다. |
20.3 |
|
Partial |
|
20.6 |
|
Yes |
이 조항이 정의하는 전부인 |
20.7 |
|
Yes |
검색형과 단순형 둘 다이며, |
20.8 |
|
Partial |
|
20.9 |
|
Partial |
|
20.11 |
|
Yes |
|
20.12 |
|
Yes |
패턴· |
20.13 |
|
Partial |
|
20.15 |
|
Partial |
|
20.17 |
|
Partial |
20.15와 같습니다. |
20.18 |
|
Partial |
|
20.19 |
|
Yes |
맵의 필드 접근 |
20.20 |
|
Yes |
|
20.21 |
|
Yes |
|
20.22 |
|
Yes |
|
20.23 |
|
Yes |
|
20.24 |
|
Partial |
|
20.26 |
|
Partial |
PostgreSQL의 타입을 통한 날짜·타임스탬프 연산입니다. |
20.27 |
|
Partial |
|
21.1 |
Names and variables |
Partial |
따옴표 없는 식별자는 소문자로 내려가고, 큰따옴표로 감싼 식별자는 대소문자를 지킵니다. 표준의 백틱 식별자는 구문 오류입니다. |
21.2 |
|
Partial |
16진·8진·2진과 밑줄로 끊은 형태를 포함한 정수, 실수, 문자열, |
21.3 |
|
Partial |
표준이 요구하는 대로 |
지원하지 않는 기능#
아래 세부 조항이 정의하는 구문은 하나도 받아들여지지 않습니다. 같은 결과에 이르는 AgensGraph 쪽 길이 있으면 비고에 적었습니다.
세부 조항 |
이름 |
지원 |
비고 |
|---|---|---|---|
7.1 |
|
No |
|
7.2 |
|
No |
|
7.3 |
|
No |
접속을 끊으십시오. |
7.4 |
|
No |
없습니다. |
10.1 |
|
No |
없습니다. 쿼리는 |
10.2 |
|
No |
|
10.3 |
|
No |
14.7이며 지원되는 |
11.2 |
|
No |
없습니다. |
11.3 |
|
No |
없습니다. |
12.1 |
|
No |
카탈로그 변경은 PostgreSQL DDL 문장이며 쿼리 파이프라인에 엮이지 않습니다. |
12.2 |
|
No |
그래프가 곧 스키마이며 |
12.3 |
|
No |
|
12.6 |
|
No |
없습니다. 레이블에는 타입이 없습니다. 컬럼으로 승격한 속성만 그 컬럼의 타입을 얻습니다. |
12.7 |
|
No |
없습니다. |
12.8 |
|
No |
없습니다. |
13.6 |
|
No |
|
14.1 |
|
No |
복합 쿼리 문장이 지니는 선택적 |
14.12 |
|
No |
|
16.1 |
|
No |
문장은 접속해 있는 데이터베이스에서 실행됩니다. |
16.2 |
|
No |
|
16.6 |
|
No |
경로 모드( |
16.12 |
|
No |
|
16.15 |
|
No |
명시적 |
17.1–17.8 |
|
No |
객체는 PostgreSQL의 스키마 한정 이름으로 가리킵니다. 표준의 디렉터리 경로 |
18.1–18.10 |
|
No |
없습니다. |
19.6 |
|
No |
|
19.7 |
|
No |
없습니다. |
19.8 |
|
No |
모든 간선은 방향이 있습니다. |
19.9 |
|
No |
|
19.10 |
|
No |
|
19.11 |
|
No |
식별자를 둘씩 비교하십시오. |
19.12 |
|
No |
|
19.13 |
|
No |
|
20.4 |
|
No |
드라이버의 매개변수 자리표시자 |
20.5 |
|
No |
표현식 안의 |
20.10 |
|
No |
|
20.14 |
|
No |
경로는 생성자가 아니라 패턴에서 나옵니다. |
20.16 |
|
No |
|
20.25 |
|
No |
PostgreSQL의 |
20.28 |
|
No |
PostgreSQL의 |
20.29 |
|
No |
|
21.4 |
|
No |
렉서는 Cypher를 위해 확장한 PostgreSQL의 것이며, 표준의 문자 집합 규칙을 구현하지 않습니다. |
22.1–22.20 |
Additional common rules |
No |
이 조항들은 구문이 아니라 표준의 평가 방식을 정의합니다. AgensGraph는 PostgreSQL의 플래너와 실행기로 쿼리를 평가하므로 적힌 그대로 구현하지 않습니다. |
23.1 |
GQLSTATUS |
No |
오류는 SQLSTATE를 지닙니다. 오류 코드를 참고하십시오. |
23.2 |
Diagnostic records |
No |
진단 정보는 PostgreSQL의 오류 보고 필드에서 옵니다. |
표준을 넘어선 확장#
AgensGraph는 ISO/IEC 39075가 정의하지 않는 것도 상당히 받아들입니다. 그중 일부는 이 제품이 먼저 지원했던 openCypher입니다. 또 일부는 여기서 그래프가 PostgreSQL에 저장되고 양쪽 모두에 손이 닿기 때문에 있는 것입니다.
확장 |
더하는 것 |
|---|---|
Cypher 서브쿼리에 대한 SQL 문장, 그리고 레이블 테이블에 대한 Cypher |
Cypher 쿼리는 테이블 표현식이고 레이블은 테이블이므로, 문장 하나가 그래프와 관계형 데이터를 조인할 수 있습니다. SQL과 Cypher를 참고하십시오. |
|
외부 테이블을 포함한 릴레이션의 행에서 그래프 요소를 만듭니다. 데이터 적재를 참고하십시오. |
레이블 상속 |
|
|
속성을 바꿔치우는 대신 맵을 속성에 병합합니다. |
|
표준의 경로 탐색 접두를 대신하는, 가중치가 있는·없는 최단 경로 탐색입니다. |
승격된 속성 |
|
그래프 DDL |
|
openCypher 절 |
|
|
표준에 대응 형태가 없는 서브쿼리 값 표현식 넷입니다. 20.9는 |
openCypher 연산자와 함수 |
|
PostgreSQL의 모든 것 |
모든 SQL 타입·함수·인덱스 방식·확장·설정을 그래프 쿼리에서 쓸 수 있으며, 벡터 검색과 전문 검색이 그렇게 동작합니다. 벡터 검색을 참고하십시오. |
관련 항목#
Cypher, GQL, SQL — 한 문장 안에서 세 언어가 어떻게 맞물리는가
Cypher 호환성 — AgensGraph가 다른 Cypher 구현과 다른 곳
키워드 — 표준의 새 문장들이 예약한 단어
AgensGraph 2.18.6.0 릴리스 노트 — 이 릴리스가 더한 GQL 문장