DROP PROPERTY INDEX#
속성 인덱스를 지웁니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
DROP PROPERTY INDEX는 CREATE PROPERTY INDEX가 만든 인덱스 하나
이상을 지우며, 그 밖에는 아무것도 지우지 않습니다.
이름은
graph_path가 지정한 그래프에서 해석되며 수식할 수 없습니다. 스키마를 붙인 이름은improper property index name으로 거부됩니다. 다른 그래프의 인덱스를 지우려면 먼저graph_path를 바꾸십시오.속성 인덱스만 받아들여집니다. 그 레이블의 다른 인덱스는
"<name>" is not property index로 거부됩니다. 기본 키, 간선 레이블의 끝점 인덱스, SQL로 만든 인덱스가 그렇습니다.반면
DROP INDEX는 레이블의 어떤 인덱스든, 속성 인덱스를 포함해 받아들이므로, 어느 문장으로 만든 인덱스든 어느 문장으로도 지울 수 있습니다.제약에 속한 인덱스는
DROP CONSTRAINT로 그 제약과 함께 지워집니다.
매개변수#
- IF EXISTS
존재하지 않는 인덱스에 대해 오류가 아니라 알림을 냅니다. 같은 문장의 다른 이름은 그대로 지워집니다.
- index_name
지울 속성 인덱스의 수식되지 않은 이름입니다. 쉼표로 구분해 여러 개를 줄 수 있고, 같은 레이블에 있어야 하는 것은 아닙니다.
- CASCADE
그 인덱스에 의존하는 객체를 지웁니다.
- RESTRICT
그 인덱스에 의존하는 것이 있으면 거부합니다. 이것이 기본값입니다. 인덱스에 의존하는 것은 드물어서 대개 두 선택이 같게 동작합니다.
예제#
예제는 예제 데이터셋을 쓰지 않고 자체 그래프인
unindexed를 만들고, 끝에서 그것을 지웁니다.
CREATE GRAPH unindexed;
SET graph_path = unindexed;
CREATE VLABEL movie;
CREATE VLABEL person;
CREATE (:movie {title: 'Arrival', year: 2016}), (:person {name: 'Denis Villeneuve'});
CREATE PROPERTY INDEX movie_title_idx ON movie (title);
CREATE PROPERTY INDEX movie_year_idx ON movie (year);
CREATE PROPERTY INDEX person_name_idx ON person (name);
\dGi unindexed.*
List of property indexes
Graph | LabelName | IndexName | Unique | Owner | Indexdef
-----------+-----------+-----------------+--------+-------+--------------------------------------------------------------------
unindexed | movie | movie_title_idx | f | agens | CREATE PROPERTY INDEX movie_title_idx ON movie USING btree (title)
unindexed | movie | movie_year_idx | f | agens | CREATE PROPERTY INDEX movie_year_idx ON movie USING btree (year)
unindexed | person | person_name_idx | f | agens | CREATE PROPERTY INDEX person_name_idx ON person USING btree (name)
(3 rows)
인덱스 하나 지우기#
DROP PROPERTY INDEX movie_title_idx;
DROP PROPERTY INDEX
두 번째 시도는 오류입니다. 그 인덱스가 이미 사라졌기 때문입니다:
DROP PROPERTY INDEX movie_title_idx;
ERROR: index "movie_title_idx" does not exist
IF EXISTS는 그것을 알림으로 바꿉니다:
DROP PROPERTY INDEX IF EXISTS movie_title_idx;
NOTICE: index "movie_title_idx" does not exist, skipping
DROP PROPERTY INDEX
여러 인덱스를 한 번에 지우기#
그 이름들이 같은 레이블에 속해야 하는 것은 아닙니다:
DROP PROPERTY INDEX movie_year_idx, person_name_idx;
DROP PROPERTY INDEX
\dGi unindexed.*
No matching property indexes found.
알아 둘 만한 거부 사례#
이름에 그래프를 붙일 수 없습니다:
CREATE PROPERTY INDEX movie_title_idx ON movie (title);
DROP PROPERTY INDEX unindexed.movie_title_idx;
ERROR: improper property index name
이 문장이 소유하지 않은 인덱스는 거부됩니다. 레이블의 기본 키가 그런 것 중 하나입니다:
DROP PROPERTY INDEX movie_pkey;
ERROR: "movie_pkey" is not property index
DROP INDEX도 속성 인덱스를 받아들입니다. 스키마를 붙인 이름으로 씁니다:
DROP INDEX unindexed.movie_title_idx;
DROP INDEX
마지막으로 예제가 만든 그래프를 지웁니다:
DROP GRAPH unindexed CASCADE;
참고#
이름이 graph_path에서 해석되므로, 다른 그래프에 있는 인덱스는 남의 것이라고 나오는 것이 아니라
없는 것으로 읽힙니다:
CREATE GRAPH oneplace;
SET graph_path = oneplace;
CREATE VLABEL movie;
CREATE PROPERTY INDEX movie_title_idx ON movie (title);
CREATE GRAPH otherplace;
SET graph_path = otherplace;
DROP PROPERTY INDEX movie_title_idx;
ERROR: index "movie_title_idx" does not exist
두 그래프가 같은 이름의 인덱스를 가질 수 있으므로, 수식 없는 이름이 어느 것에 닿을지 짐작하기 전에
\dGi로 확인하십시오.
DROP GRAPH oneplace CASCADE;
DROP GRAPH otherplace CASCADE;
예컨대 대량 적재를 위해 레이블의 인덱스를 지우지 않고 끄려면, 대신
ALTER VLABEL ... DISABLE INDEX와 REINDEX VLABEL을 쓰십시오. 그러면 정의는 남고
무효 표시만 됩니다.
호환성#
ISO/IEC 39075 (GQL)#
GQL에는 인덱스 DDL이 없습니다. 표준의 카탈로그 변경 문장은 스키마·그래프·그래프 타입(§12)에
한정되므로, DROP PROPERTY INDEX는 AgensGraph 자신의 것입니다.
PostgreSQL#
DROP PROPERTY INDEX는 DROP INDEX에 대응하고, IF EXISTS와 이름 목록,
CASCADE/RESTRICT도 거기서와 같이 동작합니다. 다른 점이 세 가지입니다. 이름은 search_path가
아니라 graph_path에서 해석되며 스키마로 수식할 수 없습니다. CONCURRENTLY는 받아들여지지
않습니다. 그리고 두 문장은 엄격히 갈려 있습니다. 각각 상대의 인덱스를 거부하므로, 속성 인덱스는 이
문장으로만 지울 수 있습니다.