データベースの拡張機能
pgvector(埋め込み検索)や PostGIS(地図)などの拡張機能を有効・無効にする方法、有効にできる一覧、共有データベースでの動作。
データベースの拡張機能(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)に
含まれているため、スキーマ名を付けずに使います。
-- 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/<名前>(無効化)です。