Windows 11 Pro 64bit 環境 の WSL2(Ubuntu) 上にインストールして、実際に動作を確認してみました。
WSL2 の Ubuntu 環境に SurrealDB をインストール
shell
$ curl -sSf https://install.surrealdb.com | sh
インストールは数秒で完了しました。
パスを通しておきます。以下の <username>
には自分の環境に応じて変更します。
shell
$ PATH=/home/<username>/.surrealdb:$PATH
以下の help コマンドが実行できればインストール成功です。
shell
$ surreal help
SurrealDB を起動
とりあえず実験用に SurrealDB をメモリデータベースとして起動してみます。
shell
$ surreal start --log debug --user root --pass root memory
.d8888b. 888 8888888b. 888888b.
d88P Y88b 888 888 'Y88b 888 '88b
Y88b. 888 888 888 888 .88P
'Y888b. 888 888 888d888 888d888 .d88b. 8888b. 888 888 888 8888888K.
'Y88b. 888 888 888P' 888P' d8P Y8b '88b 888 888 888 888 'Y88b
'888 888 888 888 888 88888888 .d888888 888 888 888 888 888
Y88b d88P Y88b 888 888 888 Y8b. 888 888 888 888 .d88P 888 d88P
'Y8888P' 'Y88888 888 888 'Y8888 'Y888888 888 8888888P' 8888888P'
[2022-11-02 20:54:27] INFO surrealdb::iam Root authentication is enabled
[2022-11-02 20:54:27] INFO surrealdb::iam Root username is 'root'
[2022-11-02 20:54:27] INFO surrealdb::dbs Database strict mode is disabled
[2022-11-02 20:54:27] INFO surrealdb::kvs Starting kvs store in memory
[2022-11-02 20:54:27] INFO surrealdb::kvs Started kvs store in memory
[2022-11-02 20:54:27] INFO surrealdb::net Starting web server on 0.0.0.0:8000
[2022-11-02 20:54:27] INFO surrealdb::net Started web server on 0.0.0.0:8000
[2022-11-02 21:00:47] DEBUG surrealdb::iam Authenticated as super user
[2022-11-02 21:00:47] DEBUG surrealdb::dbs Executing: INFO FOR DATABASE
インメモリとオンディスク
shell
# インメモリ動作 (SurrealDBを終了するとDBは破棄されます)
$ surreal start --log debug --user root --pass root memory
# オンディスク動作 (DBはディスク上に保存されます)
$ surreal start --log debug --user root --pass root file://my-testing-directory
SIGNUP と SIGNIN の定義作成
shell
$ surreal sql --conn http://localhost:8000 --user root --pass root --ns test --db test
SQL
# accountテーブル: SCHEMAFULLのテーブルを作成する
DEFINE TABLE account SCHEMAFULL
PERMISSIONS
FOR select, update WHERE id = $auth.id,
FOR create, delete NONE;
# accountテーブル: テーブルのフィールドを指定する
DEFINE FIELD name ON TABLE account TYPE string;
DEFINE FIELD email ON TABLE account TYPE string ASSERT is::email($value);
DEFINE FIELD pass ON account TYPE string;
# accountテーブル: メールフィールドに一意のインデックスを追加して値の重複を防ぐ
DEFINE INDEX email ON TABLE account COLUMNS email UNIQUE;
# allusersセッションスコープを定義
DEFINE SCOPE allusers
SESSION 14d
SIGNUP ( CREATE account SET name = $name, email = $email, pass = crypto::argon2::generate($pass) )
SIGNIN ( SELECT * FROM account WHERE email = $email AND crypto::argon2::compare(pass, $pass) );
HTTP 通信で動作を確認してみる
HTTP API を投げれる適当なツールを使って以下の内容を post します。なお、私は Postman をよく使っています。
-
http メソッド
post
-
url
http://localhost:8000/sql
-
認証
認証方式:Basic Auth
username:root
password:root
-
headers
Accept: application/json
NS: test
DB: test
-
body
INFO FOR DB;
実行結果
[
{
"time": "69µs",
"status": "OK",
"result": {
"dl": {},
"dt": {},
"sc": {},
"tb": {}
}
}
]