DROP PROPERTY INDEX#

속성 인덱스를 지웁니다.

개요#

DROP PROPERTY INDEX [ IF EXISTS ] index_name [, ... ] [ CASCADE | RESTRICT ]

굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.

설명#

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는 받아들여지지 않습니다. 그리고 두 문장은 엄격히 갈려 있습니다. 각각 상대의 인덱스를 거부하므로, 속성 인덱스는 이 문장으로만 지울 수 있습니다.

관련 항목#