그래프 카탈로그#
AgensGraph는 pg_catalog에 테이블 일곱 개를 더합니다. 그중 넷이 그래프 구조를 설명하며, 조회하게
될 것은 그 넷입니다. 셋은 모든 레이블이 상속하는 공용 부모 릴레이션입니다. PostgreSQL 자신의
카탈로그는 바뀌지 않았고
그 카탈로그 장에 문서화돼 있습니다.
카탈로그 |
담는 것 |
|---|---|
그래프마다 한 행입니다. |
|
레이블마다 한 행이며 정점과 간선을 가리지 않습니다. |
|
타입 컬럼으로 승격된 속성마다 한 행입니다. |
|
(시작 레이블, 간선 레이블, 끝 레이블) 삼중마다의 간선 수입니다. |
|
|
그래프 안 모든 정점·간선 레이블의 부모 릴레이션입니다. 각 그래프의 스키마 안에 한 쌍씩 있으며 |
|
|
같은 정보를 읽기 좋은 형태로 보여 주는 뷰가 둘 있습니다. 그래프 뷰를 참고하십시오.
ag_graph#
그래프마다 한 행입니다. 그래프는 스키마이므로 nspid가 그 레이블들을 담은 스키마를
가리킵니다.
컬럼 |
타입 |
설명 |
|---|---|---|
|
|
행 식별자입니다. |
|
|
그래프의 이름이며 데이터베이스 안에서 고유합니다. |
|
|
그래프 스키마에 해당하는 |
|
|
이 그래프에 대해 |
SELECT oid, graphname, nspid, graphmeta_valid FROM pg_catalog.ag_graph;
oid | graphname | nspid | graphmeta_valid
-------+-----------+-------+-----------------
16386 | g | 16385 | t
16434 | moviekb | 16433 | f
메타데이터가 낡았음이 분명할 때, 이를테면 바이너리 업그레이드 뒤에 graphmeta_valid가 거짓으로
설정됩니다. SELECT regather_graphmeta(); 가 그것을 다시 만들고 플래그를 세웁니다.
그래프 메타데이터를 참고하십시오.
ag_label#
레이블마다 한 행입니다. 정점 레이블과 간선 레이블이 함께 있으며 labkind로 구분합니다.
컬럼 |
타입 |
설명 |
|---|---|---|
|
|
행 식별자입니다. |
|
|
레이블의 이름이며 그래프 안에서 고유합니다. |
|
|
이 레이블이 속한 |
|
|
그래프 안에서의 레이블 id이며, 그 안 모든 |
|
|
레이블 테이블에 해당하는 |
|
|
정점 레이블이면 |
SELECT labname, labid, labkind FROM pg_catalog.ag_label
WHERE graphid = (SELECT oid FROM pg_catalog.ag_graph WHERE graphname = 'moviekb')
ORDER BY labid;
labname | labid | labkind
------------+-------+---------
ag_vertex | 1 | v
ag_edge | 2 | e
movie | 3 | v
person | 4 | v
acted_in | 5 | e
directed | 6 | e
related_to | 7 | e
labid 1과 2는 언제나 그래프와 함께 만들어지는 그 그래프의 ag_vertex와 ag_edge입니다.
labid가 16비트이고 0은 유효하지 않으므로, 그래프 하나는 최대 65,535개의 레이블을 담습니다.
제한을 참고하십시오.
relid를 pg_class에 조인하면 레이블에서 그 테이블로 갈 수 있습니다. 평범한 PostgreSQL
인트로스펙션이 그래프에서도 통하게 하는 것이 그 조인입니다:
SELECT l.labname, pg_size_pretty(pg_total_relation_size(l.relid)) AS size
FROM pg_catalog.ag_label l
JOIN pg_catalog.ag_graph g ON g.oid = l.graphid
WHERE g.graphname = 'moviekb' AND l.labkind = 'v'
ORDER BY 1;
ag_label_property#
타입 컬럼으로 승격된 속성마다 한 행입니다. 이 카탈로그는 2.18에서 새로 생겼습니다.
컬럼 |
타입 |
설명 |
|---|---|---|
|
|
승격된 컬럼이 속한 |
|
|
그 컬럼이 담는 속성 키입니다. |
|
|
레이블 테이블에서 그 컬럼의 속성 번호입니다. |
|
|
그 컬럼이 속성과 어떤 관계인지입니다. |
기본 키가 (laboid, propname)이므로, 레이블 하나는 같은 키를 많아야 한 번 승격합니다.
속성 읽기가 승격된 컬럼으로 해석되는 것은 여기에 행이 있을 때뿐입니다. 사람들을 놀라게 하는
승격 형태의 뒤에 이 장치가 있습니다. GENERATED ALWAYS AS (expr) STORED는 컬럼을 만들지만 이
카탈로그에 행을 등록하지 않습니다. 그래서 그 컬럼은 SQL에서는 읽히고 Cypher의 속성 읽기에는 보이지
않습니다.
ag_graphmeta#
그래프에 실제로 나타나는 (시작 레이블, 간선 레이블, 끝 레이블) 삼중마다 한 행이며, 그것을 이루는 간선이 몇 개인지가 함께 있습니다. 플래너는 이것을 두 가지로 씁니다. 순회를 추정하는 데, 그리고 패턴에 참여할 수 없는 레이블의 스캔을 쳐내는 데 씁니다.
컬럼 |
타입 |
설명 |
|---|---|---|
|
|
|
|
|
간선 레이블의 |
|
|
시작 정점 레이블의 |
|
|
끝 정점 레이블의 |
|
|
그 모양의 간선이 몇 개인지입니다. |
레이블 id를 이름으로 풀어 주는 ag_graphmeta_view로 읽으십시오. 이
테이블은 auto_gather_graphmeta가 켜져 있을 때만 유지되며, regather_graphmeta()가 그것을 처음부터
다시 만듭니다. 둘 다 그래프 메타데이터가 다룹니다.
ag_vertex와 ag_edge#
이 둘은 pg_catalog에 없습니다. 모든 그래프의 스키마가 자기 것 한 쌍을 담고 있고, 사용자가 만드는
모든 레이블이 그중 하나를 상속합니다. 레이블 없는 패턴에 뜻을 주는 것이 그 상속입니다.
그래프가 어떻게 저장되는가를 참고하십시오.
<graph>.ag_vertex는 정점의 컬럼 쌍 (id graphid, properties jsonb)를 가집니다.
<graph>.ag_edge는 거기에 양 끝점을 더해 (id, start, end, properties)를 가집니다.
ag_graphpath#
graphpath 뒤에 있는 복합 타입입니다. 구현 세부입니다. 이것을 직접
건드리지 말고 패턴 구문과 경로 함수로 경로를 만들고 읽으십시오.