# DB 확장 (pgvector, PostGIS …)

`list_extensions { ref }`가 켤 수 있는 확장과 상태(available·enabled·version)를 돌려줘요.
`enable_extension { ref, name }`으로 켜고 `disable_extension { ref, name, confirm: name }`으로 꺼요.
켜고 끄는 것은 소유자·관리자만 할 수 있어요.

켤 수 있는 것: `vector`(pgvector), `postgis`, `citext`, `hstore`, `uuid-ossp`, `pgcrypto`,
`ltree`, `fuzzystrmatch`, `btree_gin`, `btree_gist`, `intarray`, `tablefunc`.
`pg_trgm`과 `unaccent`는 처음부터 켜져 있고 끌 수 없어요. 목록 밖의 확장은 거절돼요.

확장은 `extensions` 스키마에 설치돼요. 이 스키마는 모든 검색 경로(SQL 창, 직접 연결, 데이터 API)에
있어서 스키마 이름 없이 써요.

```sql
-- enable_extension { ref, name: "vector" } 뒤에
create table docs (id bigserial primary key, body text, embedding vector(1536));
create index if not exists docs_embedding_hnsw on docs using hnsw (embedding vector_cosine_ops);
select id, body from docs order by embedding <=> '[...]' limit 5;

-- enable_extension { ref, name: "postgis" } 뒤에
create table places (id bigserial primary key, name text, at geography(point, 4326));
select name from places where st_dwithin(at, st_makepoint(126.978, 37.566)::geography, 1000);
```

데이터 API에서 가까운 것 찾기는 함수로 만들어 `POST /rest/v1/rpc/<함수>`로 불러요.

**공유 데이터베이스에서는 확장을 데이터베이스 전체가 함께 써요.** 다른 프로젝트도 켜 두었으면
꺼도 설치는 남고(`note`) 이 프로젝트의 기록만 지워요. 확장을 쓰는 열·인덱스·함수가 남아 있으면
끌 수 없으니 먼저 지우세요.

HTTP로는 `GET /extensions`, `PUT /extensions/<이름>`(켜기), `DELETE /extensions/<이름>`(끄기)이에요.

---

https://end.blackall.ai/docs/extensions?lang=ko
