# データベースの拡張機能（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=ja
