spacetimedb-sql について
SpacetimeDB の SQL 構文とクエリ動作を扱うスキルです。サブスクリプションの制約と通常のクエリ・データ変更を区別し、インデックスや結合の指針も示します。
主な機能
- 01サブスクリプション SQL の制約
- 02通常の SELECT と DML 形式
- 03識別子とリテラルの構文
- 04インデックスと結合の指針
活用シーン
- 01有効なテーブルサブスクリプションの記述
- 02SQL クエリとデータ変更の構築
- 03サブスクリプション結合用インデックスの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ danmossa/ spacetimedb-skills --skill spacetimedb-sqlインストール後、Claude Code で/spacetimedb-sqlを入力して読み込まれたか確認します。
同梱ファイルreferences/reference-sql.md
詳細
SQL の構文とクエリの動作には、このスキルを使用します。
SQL の基本的な区分
サブスクリプション SQL は、アドホックなクエリ/DML SQL よりも制約が厳しくなっています。
- サブスクリプションの形式は
SELECT projection FROM relation [WHERE predicate]です。 - サブスクリプションが返すのは、1 つのテーブルの全行のみです。
SELECT *またはSELECT table.*を使用します。 - サブスクリプションで参照できるテーブルは最大 2 つで、結合は 1 つまでです。また、結合列にはインデックスが必要です。
- サブスクリプションでは、
INSERT、UPDATE、DELETE、列の射影、算術式、任意の結合はサポートされません。
CLI/HTTP 経由のアドホック SQL では、次の操作をサポートします。
- 列の射影、
COUNT(*)、結合、WHERE、LIMITを含むSELECT。 INSERT INTO table (columns...) VALUES (...)。DELETE FROM table [WHERE ...]。結合はできません。UPDATE table SET column = literal [WHERE ...]。結合はできません。- 実験的なシステム変数ステートメント
SETおよびSHOW。
クエリのガイダンス
- SQL のテーブル名には、生成されたアクセサー名ではなく、スキーマ上の正確なテーブル名を使用します。
- 文字列リテラルにはシングルクォートを使用します。識別子は大文字と小文字が区別されるため、予約語や特殊な名前はダブルクォートで囲みます。
- コンテキストから型がわかる場合は、16 進リテラルで ID、接続 ID、またはバイナリ値を表せます。
- フィルター対象列と結合列にインデックスを設定します。特にサブスクリプションでは重要です。
- 結合が多いアドホッククエリでは、最も選択性の高いテーブル/フィルターを先に配置します。
リファレンスマップ
| 必要な情報 | 開く |
|---|---|
| SpacetimeDB SQL リファレンス | references/reference-sql.md |
ガイダンス
- 使用可能な形式を説明する際は、サブスクリプション SQL と、データ変更/クエリ用 SQL を区別します。
- パフォーマンス向上のためにクエリの変更を推奨する前に、テーブルとインデックスの定義を確認します。
- CLI での実行方法については、spacetimedb-cli を参照してください。
コメント
Markdown 対応