{#limits-limits} # 제한 AgensGraph의 제한 중 둘은 모든 정점과 간선에 주는 식별자에서 나옵니다. 나머지는 PostgreSQL의 것입니다. 그래프는 스키마이고 레이블은 테이블이기 때문입니다. {#limits-graph-limits} ## 그래프의 제한 모든 정점과 간선은 `graphid` 타입의 식별자를 지니며, 그 배치가 그래프가 닿을 수 있는 두 제한을 정합니다. `graphid`는 둘로 나뉜 64비트 부호 없는 정수입니다. 상위 16비트가 **레이블 id**이고, 하위 48비트가 그 레이블 안에서 행의 일련번호인 **로컬 id**입니다. 그래서 식별자는 숫자 두 개로 찍힙니다. `movie[3.7]`은 레이블 3의 7번 행입니다. | 제한 | 값 | 유래 | | --- | --- | --- | | 그래프당 레이블 수 | 65,535 | 16비트 레이블 id입니다. 0은 무효 레이블 id로 예약돼 있어 쓸 수 있는 범위는 1부터 65,535까지입니다. | | 레이블당 행 수 | 281,474,976,710,655 | 48비트 로컬 id, 즉 248 − 1입니다. | | 레이블 이름 길이 | 63바이트 | PostgreSQL의 식별자 길이입니다. | 그래프 자체에는 따로 제한이 없습니다. 그래프는 스키마이고 PostgreSQL은 데이터베이스당 스키마 수에 제한을 두지 않습니다. 다만 그래프가 많으면 릴레이션을 소모합니다. 그래프마다 자기 시퀀스 하나와 루트 레이블 둘을 만들기 때문입니다. `graphid`의 두 부분은 모두 범위 검사를 받습니다. 어느 쪽이든 범위를 벗어나면 생성자가 거부합니다: ```sql SELECT graphid(65536, 1); ``` ``` ERROR: labid out of range: 65536 ``` ```sql SELECT graphid(1, 281474976710656); ``` ``` ERROR: locid out of range: 281474976710656 ``` `graphid` 리터럴을 파싱할 때도 문제가 된 값만 빠진 같은 메시지 둘이 돌아옵니다. `SELECT '65536.1'::graphid` 는 `labid out of range`를 냅니다. 이 번호를 나눠 주는 계수기는 평범한 시퀀스이므로 들여다볼 수 있습니다. 그래프마다 레이블 id를 위한 `ag_label_seq`가 하나씩, 레이블마다 로컬 id를 위한 `