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

<start transaction command>, <transaction characteristics>, <rollback command>, <commit command>

Yes

PostgreSQL 자신의 트랜잭션 문장이 이 조항들에 답합니다. START TRANSACTION READ ONLY·COMMIT·ROLLBACK이 모두 동작합니다.

9.2

<procedure body>

Partial

NEXT가 한 문장을 앞 문장의 결과에 이어 붙입니다. NEXT는 YIELD 절을 지닐 수 없고, 9.2가 함께 허용하는 바인딩 변수 정의 블록은 없습니다. 아래 10.1–10.3을 참고하십시오.

11.1

<graph expression>

Partial

CURRENT_GRAPH와 CURRENT_PROPERTY_GRAPH를 Cypher에서도 SQL에서도 받습니다. 키워드만으로 쓰며, current_graph()는 구문 오류입니다. 그 밖의 그래프 표현식 형태는 없습니다.

12.4

<create graph statement>

Partial

CREATE GRAPH name과 CREATE GRAPH IF NOT EXISTS name이 동작합니다. 표준이 이름 뒤에 요구하는 그래프 타입(ANY·LIKE·그래프 타입 참조)은 받지 않으며, OR REPLACE·PROPERTY GRAPH·AS COPY OF도 마찬가지입니다.

12.5

<drop graph statement>

Partial

DROP GRAPH name과 DROP GRAPH IF EXISTS name이 동작하고, 표준에 없는 CASCADE도 있습니다. 새 그래프에 이미 ag_vertex와 ag_edge가 들어 있어 그것이 필요합니다. DROP PROPERTY GRAPH는 구문 오류입니다.

13.1

<linear data-modifying statement>

Yes

문장 하나가 읽기 절과 쓰기 절을 한 파이프라인에 엮으며, 쓰기 절의 변경이 그 뒤의 읽기 절에 보입니다.

13.2

<insert statement>

Yes

INSERT는 Cypher CREATE와 같은 패턴을 받으며 그것의 동의어입니다.

13.3

<set statement>

Partial

속성 대입이 동작하며, 표준에 없는 += 병합 형태도 있습니다. 이 조항이 함께 정의하는 레이블 집합 대입은 없습니다. 정점은 레이블을 정확히 하나 가집니다.

13.4

<remove statement>

Partial

REMOVE n.prop이 속성을 지웁니다. 같은 까닭으로 REMOVE n:Label은 없습니다.

13.5

<delete statement>

Yes

DELETE와 DETACH DELETE입니다. 간선이 남아 있는 정점을 지우는 것은 DETACH를 주지 않으면 거부됩니다.

14.2

<composite query expression>

Partial

UNION·UNION ALL·EXCEPT·INTERSECT가 쿼리 문장 둘을 엮습니다. OTHERWISE는 구문 오류입니다.

14.3

<linear query statement> and <simple query statement>

Yes

쿼리는 아래의 기본 쿼리 문장을 이어 놓은 것이며, 기본 결과 문장으로 끝납니다.

14.4

<match statement>

Partial

MATCH와 OPTIONAL MATCH가 동작합니다. 중괄호 형태 OPTIONAL { MATCH … MATCH … }는 구문 오류입니다.

14.5

<call query statement>

Partial

두 호출 형태 모두 동작합니다. 각각이 무엇을 요구하는지는 15.2와 15.3을 참고하십시오.

14.6

<filter statement>

Yes

FILTER expr과 FILTER WHERE expr 둘 다 됩니다.

14.7

<let statement>

Yes

더하는 방식이고 행 단위이며 쿼리를 이끌 수도 있습니다. LET 표현식 안의 집계는 거부됩니다.

14.8

<for statement>

Partial

리스트 순회가 동작하며 WITH OFFSET AS name이 0부터 시작하는 인덱스를 줍니다. WITH ORDINALITY는 구문 오류이고, FOR는 바인딩 테이블을 순회하지 못합니다.

14.9

<order by and page statement>

Yes

ORDER BY·SKIP·OFFSET·LIMIT이 그 자체로 문장이며 파이프라인 어디에나 놓입니다. 표준과 마찬가지로 AgensGraph도 이것들이 쿼리를 끝맺게 하지 않습니다. 14.3이 기본 결과 문장으로 끝날 것을 요구하므로, ORDER BY로 끝나는 쿼리는 ERROR: Cypher query must end with RETURN, FINISH or update clause를 냅니다.

14.10

<primitive result statement>

Yes

RETURN, RETURN … ORDER BY …, 그리고 FINISH입니다.

14.11

<return statement>

Partial

RETURN·RETURN DISTINCT·RETURN ALL·RETURN *과 명시적 별칭입니다. RETURN NO BINDINGS는 구문 오류입니다. 묶음(grouping)은 암시적입니다. 16.15를 참고하십시오.

15.1

<call procedure statement> and <procedure call>

Yes

CALL과 OPTIONAL CALL이며 두 호출 형태 모두에 적용됩니다.

15.2

<inline procedure call>

Partial

CALL (v) { … }·CALL () { … }·CALL (*) { … }·CALL { WITH v … }가 모두 올바르게 가져옵니다. 그냥 쓴 CALL { … }은 표준과 다릅니다. 구문 규칙 3은 변수 범위 절이 없으면 들어오는 작업 레코드의 모든 필드를 가리키는 것으로 다시 쓰라고 하므로, 표준대로라면 CALL (*) { … }처럼 전부를 가져옵니다. AgensGraph는 대신 아무것도 가져오지 않으면서 오류도 내지 않으므로, 쿼리가 보이는 것과 다른 물음에 답하게 됩니다. 언제나 가져올 변수 목록을 적으십시오. 서브쿼리 본문의 쓰기 절은 거부되고 IN TRANSACTIONS는 없습니다.

15.3

<named procedure call>

Partial

CALL routine(args) YIELD item [AS alias]와 YIELD *가 동작하며, 인수가 이미 범위에 있는 변수를 참조하면 상관 호출이 됩니다. 조항은 YIELD를 선택으로 두지만 여기서는 필수이고, 이 절은 쿼리를 이끌 수도 끝맺을 수도 없습니다. 이름은 17.5가 설명하는 카탈로그의 프로시저가 아니라 PostgreSQL 함수로 해석됩니다. 기본 서버에는 프로시저가 등록돼 있지 않고, 프로시저를 부르면 <name>() is a procedure가 납니다.

16.3

<graph pattern binding table>

Partial

그래프 패턴이 바인딩 테이블을 만듭니다. 이 조항이 함께 허용하는 패턴 YIELD 절은 구문 오류입니다.

16.4

<graph pattern>

Partial

쉼표로 구분한 경로 패턴이 동작합니다. 일치 모드(DIFFERENT EDGES·REPEATABLE ELEMENTS)와 KEEP 절은 구문 오류입니다.

16.5

<insert graph pattern>

Yes

INSERT나 CREATE 뒤의 패턴은 정점을, 간선을, 또는 이미 묶인 정점 사이의 간선을 만들 수 있습니다.

16.7

<path pattern expression>

Partial

이어 붙이기가 동작합니다. 경로 다중집합 선택과 경로 패턴 합집합 — | 로 구분한 경로 패턴 둘 — 은 구문 오류입니다.

16.8

<label expression>

Partial

레이블 이름 하나만 됩니다. 논리합(:a|b)·논리곱(:a&b)·부정(:!a)·와일드카드(:%)는 모두 구문 오류입니다. 대신 WHERE에서 label() 함수로 레이블을 검사하십시오.

16.9

<path variable reference>

Yes

MATCH p = (…)가 경로 전체를 묶고, nodes()·relationships()·length()가 그것을 읽습니다.

16.10

<element variable reference>

Yes

패턴 변수는 그 뒤의 모든 절에서 범위 안에 있습니다.

16.11

<graph pattern quantifier>

Partial

간선 수량자 -[r*1..3]->가 홉 수가 정해지지 않은 순회를 합니다. 괄호로 묶은 경로 패턴에 붙이는 표준의 수량자 (…)->{1,3}은 구문 오류이고, * 대신 +를 쓰는 것도 그렇습니다.

16.13

<where clause>

Partial

MATCH 뒤, 그리고 FILTER·WITH·리스트 컴프리헨션 안의 WHERE입니다. 정점 패턴 안의 WHERE는 구문 오류입니다. 검색 조건은 불리언이어야 하며 속성 읽기는 변환되지 않습니다.

16.16

<order by clause>

Yes

정렬 키 여럿, ASC/DESC, NULLS FIRST/NULLS LAST, 표현식을 정렬 키로 쓰는 것, RETURN 별칭을 정렬 키로 쓰는 것입니다.

16.17

<sort specification list>

Yes

16.16과 같습니다. 정수 정렬 키는 출력 컬럼 번호가 아니라 상수입니다. Cypher 호환성을 참고하십시오.

16.18

<limit clause>

Yes

LIMIT이며 개수로 표현식을 쓰는 것도 됩니다.

16.19

<offset clause>

Yes

조항이 정의하는 두 표기 OFFSET과 SKIP 모두입니다.

19.1

<search condition>

Yes

조항이 요구하는 대로, 조건은 불리언만 받고 그 밖의 것은 받지 않습니다.

19.2

<predicate>

Partial

아래 네 가지 조건입니다. 19.6–19.13이 정의하는 나머지 아홉은 지원하지 않습니다.

19.3

<comparison predicate>

Yes

=·<>·<·<=·>·>=이며 스칼라·그래프 요소·리스트에 적용됩니다.

19.4

<exists predicate>

Partial

조항이 정의하는 다섯 형태 중 넷입니다. EXISTS { pattern }(WHERE를 붙일 수 있음), EXISTS ( pattern )(붙일 수 없으며 괄호 안의 WHERE는 구문 오류), EXISTS { MATCH … }, EXISTS { <read statement> } 입니다. EXISTS ( MATCH … )는 구문 오류이고, MATCH가 둘 이상인 일치 문장 블록은 파싱되려면 RETURN이 필요하므로 기능 GQ22는 충족하지 못합니다.

19.5

<null predicate>

Yes

IS NULL과 IS NOT NULL입니다.

20.1

<value expression>

Yes

연산자·함수 호출·CASE·서브쿼리 표현식·생성자가 자유롭게 엮입니다.

20.2

<value expression primary>

Yes

리터럴, 변수, 속성 참조, 괄호로 묶은 표현식입니다.

20.3

<value specification>

Partial

SESSION_USER와 CURRENT_USER입니다. 매개변수는 GQL의 일반 매개변수 선언이 아니라 드라이버가 넘기는 PostgreSQL 매개변수 $1입니다.

20.6

<value query expression>

Yes

이 조항이 정의하는 전부인 VALUE { … }입니다. 본문의 값 하나를 자기 타입으로 돌려주고, 본문이 비면 null입니다. 구문 규칙 10은 본문에 LIMIT 1이나 집계를 요구하지만, AgensGraph는 어떤 본문이든 받고 대신 실행 시점에 more than one row returned by a subquery used as an expression을 냅니다. EXISTS { }는 19.4이고, COUNT { }·COLLECT { }·ARRAY { }·x IN { }은 확장입니다. 아래를 참고하십시오.

20.7

<case expression>

Yes

검색형과 단순형 둘 다이며, NULLIF와 COALESCE도 있습니다.

20.8

<cast specification>

Partial

:: 연산자가 형 변환을 하며 키워드 타입 이름(::int·::numeric·::interval)을 받습니다. CAST(x AS t)는 Cypher에서 구문 오류이고 SQL에서는 됩니다.

20.9

<aggregate function>

Partial

COUNT(*), 그리고 일반 집합 함수 AVG·COUNT·MAX·MIN·SUM·STDDEV_SAMP·STDDEV_POP이며 각각 DISTINCT나 ALL을 받습니다. 정점이나 간선에 대한 MIN과 MAX는 모호하므로 형 변환이나 식별자를 주어야 합니다. COLLECT_LIST의 표기는 collect입니다. 이항 집합 함수 PERCENTILE_CONT와 PERCENTILE_DISC는 Cypher에서 닿을 수 없습니다. 둘 다 WITHIN GROUP이 필요한데 그것이 Cypher에서는 구문 오류입니다.

20.11

<property reference>

Yes

n.prop, 중첩한 n.a.b, 첨자를 붙인 n.list[0]입니다.

20.12

<binding variable reference>

Yes

패턴·WITH·LET·FOR·YIELD가 묶은 이름입니다.

20.13

<path value expression>

Partial

MATCH p = (…)가 묶은 경로는 graphpath 타입의 일급 값입니다.

20.15

<list value expression>

Partial

[a, b, c], 첨자, IN, 리스트 컴프리헨션입니다. LIST[…]는 구문 오류입니다.

20.17

<list value constructor>

Partial

20.15와 같습니다.

20.18

<record constructor>

Partial

{a: 1, b: 2}가 맵을 만들고 .a가 필드를 읽습니다. RECORD { … } 표기는 구문 오류입니다.

20.19

<field>

Yes

맵의 필드 접근 ({a: 1}).a 입니다.

20.20

<boolean value expression>

Yes

AND·OR·NOT·XOR과 IS [NOT] UNKNOWN입니다.

20.21

<numeric value expression>

Yes

+·-·*·/·%·^ 입니다.

20.22

<numeric value function>

Yes

abs·ceil·floor·round·sign·sqrt·exp·ln·log·log10·power·mod·pi, 삼각 함수, degrees·radians·char_length·octet_length·rand 입니다.

20.23

<string value expression>

Yes

||로 잇는 것, 그리고 +로 잇는 것입니다.

20.24

<character string function>

Partial

upper·lower·btrim·ltrim·rtrim·trim·substring(s, from, count)·left·right·replace·reverse·split 입니다. NORMALIZE와 SUBSTRING(s FROM a FOR b) 표기는 Cypher에서 구문 오류입니다.

20.26

<datetime value expression>

Partial

PostgreSQL의 타입을 통한 날짜·타임스탬프 연산입니다.

20.27

<datetime value function>

Partial

CURRENT_DATE·CURRENT_TIME·CURRENT_TIMESTAMP·LOCALTIME·LOCALTIMESTAMP 입니다. LOCAL_TIME처럼 표준이 쓰는 밑줄 표기는 인식하지 않습니다.

21.1

Names and variables

Partial

따옴표 없는 식별자는 소문자로 내려가고, 큰따옴표로 감싼 식별자는 대소문자를 지킵니다. 표준의 백틱 식별자는 구문 오류입니다.

21.2

<literal>

Partial

16진·8진·2진과 밑줄로 끊은 형태를 포함한 정수, 실수, 문자열, true·false·null, 리스트, 맵입니다. 타입이 붙은 리터럴 — DATE '…'·DURATION '…'·바이트 문자열 — 은 구문 오류이며, 값으로 쓴 UNKNOWN도 그렇습니다.

21.3

<token>, <separator>, and <identifier>

Partial

표준이 요구하는 대로 --와 /* */가 주석을 구분합니다. 그래서 openCypher의 익명 화살표 -->와 --를 쓸 수 없습니다. Cypher 호환성을 참고하십시오.

지원하지 않는 기능#

아래 세부 조항이 정의하는 구문은 하나도 받아들여지지 않습니다. 같은 결과에 이르는 AgensGraph 쪽 길이 있으면 비고에 적었습니다.

세부 조항

이름

지원

비고

7.1

<session set command>

No

SESSION SET은 구문 오류입니다. 작업 그래프는 SET graph_path = name으로 정하며, 그것은 PostgreSQL 설정이므로 PostgreSQL의 세션·트랜잭션 범위를 따릅니다.

7.2

<session reset command>

No

RESET graph_path나 RESET ALL을 쓰십시오.

7.3

<session close command>

No

접속을 끊으십시오.

7.4

<session parameter specification>

No

없습니다.

10.1

<graph variable definition>

No

없습니다. 쿼리는 graph_path가 가리키는 그래프 하나를 상대합니다.

10.2

<binding table variable definition>

No

WITH나 LET 바인딩, 또는 Cypher를 감싼 SQL 공통 테이블 표현식이 중간 결과를 이어 나릅니다.

10.3

<value variable definition>

No

14.7이며 지원되는 LET을 쓰십시오.

11.2

<binding table expression>

No

없습니다.

11.3

<object expression primary>

No

없습니다.

12.1

<linear catalog-modifying statement>

No

카탈로그 변경은 PostgreSQL DDL 문장이며 쿼리 파이프라인에 엮이지 않습니다.

12.2

<create schema statement>

No

그래프가 곧 스키마이며 CREATE GRAPH가 그것을 만듭니다. SQL CREATE SCHEMA도 있지만 그것으로는 그래프가 되지 않습니다.

12.3

<drop schema statement>

No

DROP GRAPH 입니다.

12.6

<create graph type statement>

No

없습니다. 레이블에는 타입이 없습니다. 컬럼으로 승격한 속성만 그 컬럼의 타입을 얻습니다. CREATE VLABEL을 참고하십시오.

12.7

<drop graph type statement>

No

없습니다.

12.8

<call catalog-modifying procedure statement>

No

없습니다.

13.6

<call data-modifying procedure statement>

No

CALL 본문 안의 쓰기 절은 거부됩니다.

14.1

<composite query statement>

No

복합 쿼리 문장이 지니는 선택적 USE 접두에 대응하는 것이 없습니다. 복합 쿼리 표현식 자체인 14.2는 지원합니다.

14.12

<select statement>

No

SELECT … FROM MATCH (…)는 구문 오류입니다. Cypher 서브쿼리에 대한 SQL SELECT가 같은 일을 합니다. SQL과 Cypher를 참고하십시오.

16.1

<at schema clause>

No

문장은 접속해 있는 데이터베이스에서 실행됩니다.

16.2

<use graph clause>

No

SET graph_path = name 입니다.

16.6

<path pattern prefix>

No

경로 모드(WALK·TRAIL·SIMPLE·ACYCLIC)도, 경로 탐색 접두(ALL·ANY·ANY SHORTEST·ALL SHORTEST·SHORTEST k·SHORTEST k GROUPS)도 파싱되지 않습니다. 최단 경로 탐색은 shortestpath()·allshortestpaths()·dijkstra()가 맡습니다.

16.12

<simplified path pattern expression>

No

-/ … /-> 형태는 구문 오류입니다.

16.15

<group by clause>

No

명시적 GROUP BY는 Cypher에서 구문 오류입니다. 묶음은 암시적이며, RETURN이나 WITH에서 집계하지 않은 항목이 묶음 키가 됩니다. SQL에서는 SQL GROUP BY를 쓸 수 있습니다.

17.1–17.8

<schema reference> and the other object references

No

객체는 PostgreSQL의 스키마 한정 이름으로 가리킵니다. 표준의 디렉터리 경로 /dir/schema/graph는 파싱되지 않습니다.

18.1–18.10

<nested graph type specification> and the other type elements

No

없습니다.

19.6

<value type predicate>

No

IS TYPED와 IS ::는 구문 오류입니다. 형 변환해 비교하거나 pg_typeof를 쓰십시오.

19.7

<normalized predicate>

No

없습니다.

19.8

<directed predicate>

No

모든 간선은 방향이 있습니다.

19.9

<labeled predicate>

No

IS LABELED는 구문 오류이고, 표현식 안의 n:Label도 그렇습니다. label(n) = 'person'이라고 쓰십시오.

19.10

<source/destination predicate>

No

IS SOURCE OF와 IS DESTINATION OF는 구문 오류입니다. 식별자를 비교하십시오. id(a) = id(startNode(r)) 입니다.

19.11

<all_different predicate>

No

식별자를 둘씩 비교하십시오.

19.12

<same predicate>

No

id(a) = id(b) 입니다.

19.13

<property_exists predicate>

No

PROPERTY_EXISTS(n, key)는 구문 오류입니다. exists(n.key)라고 쓰십시오.

20.4

<dynamic parameter specification>

No

드라이버의 매개변수 자리표시자 $1이 그 자리를 대신합니다.

20.5

<let value expression>

No

표현식 안의 LET … IN은 구문 오류입니다. 14.7인 LET 문장은 지원합니다.

20.10

<element_id function>

No

element_id()는 없습니다. id()가 식별자를 graphid로 반환합니다.

20.14

<path value constructor>

No

경로는 생성자가 아니라 패턴에서 나옵니다.

20.16

<list value function>

No

trim(list, n)과 elements()는 없습니다. head·last·tail·size·cardinality는 있습니다.

20.25

<byte string function>

No

PostgreSQL의 bytea 함수를 SQL에서 쓸 수 있습니다.

20.28

<duration value expression>

No

PostgreSQL의 interval 타입이 기간을 다루지만 SQL에서만 됩니다. INTERVAL '1 day'는 Cypher에서 구문 오류입니다.

20.29

<duration value function>

No

duration()은 없습니다.

21.4

<GQL terminal character>

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를 참고하십시오.

LOAD FROM table AS r CREATE (…)

외부 테이블을 포함한 릴레이션의 행에서 그래프 요소를 만듭니다. 데이터 적재를 참고하십시오.

레이블 상속

CREATE VLABEL child INHERITS (parent)가 레이블의 계층을 만들고, 부모에 대한 일치가 자식도 함께 반환합니다. MATCH (n:parent ONLY)은 일치를 부모로 제한합니다. 레이블 상속을 참고하십시오.

SET n += map

속성을 바꿔치우는 대신 맵을 속성에 병합합니다.

dijkstra(), shortestpath(), allshortestpaths()

표준의 경로 탐색 접두를 대신하는, 가중치가 있는·없는 최단 경로 탐색입니다.

승격된 속성

ALTER VLABEL movie ADD COLUMN year int GENERATED가 속성에 타입이 있고 인덱싱할 수 있는 컬럼을 주며, 속성 읽기가 그것으로 해석됩니다. ALTER VLABEL을 참고하십시오.

그래프 DDL

CREATE VLABEL·CREATE ELABEL·CREATE PROPERTY INDEX·CREATE CONSTRAINT·REINDEX VLABEL·ALTER VLABEL 입니다. 데이터 정의를 참고하십시오.

openCypher 절

UNWIND, ON CREATE·ON MATCH가 붙은 MERGE, 그리고 WITH 입니다.

COUNT { }, COLLECT { }, ARRAY { }, x IN { }

표준에 대응 형태가 없는 서브쿼리 값 표현식 넷입니다. 20.9는 COUNT(*)·COUNT(expr)와 행에 대한 COLLECT_LIST 집계만 정의합니다. COUNT { }와 COLLECT { }는 openCypher에서, ARRAY { }는 SQL의 ARRAY(subquery)에서, x IN { }은 SQL의 IN (subquery)에서 왔습니다. 서브쿼리 값 표현식을 참고하십시오.

openCypher 연산자와 함수

STARTS WITH·ENDS WITH·CONTAINS·=~, 리스트 컴프리헨션, all/any/none/single, keys·properties·id·label·labels·type·startNode·endNode·nodes·relationships·length·range·head·last·tail·toString·toInteger·toFloat 입니다.

PostgreSQL의 모든 것

모든 SQL 타입·함수·인덱스 방식·확장·설정을 그래프 쿼리에서 쓸 수 있으며, 벡터 검색과 전문 검색이 그렇게 동작합니다. 벡터 검색을 참고하십시오.

관련 항목#