データベース
Add Service → Databases に PostgreSQL、MySQL、MariaDB、MongoDB、Redis、Valkey が並んでいます。行でバージョンを選んでクリックする(または Enter)と、データベースが追加されてデプロイされます。
| データベース | バージョン | データボリューム |
|---|---|---|
| PostgreSQL | 18、17、16、15、14 | /var/lib/postgresql(18 以降)または /var/lib/postgresql/data |
| MySQL | 8.4 LTS、9、8.0 | /var/lib/mysql |
| MariaDB | 11.8 LTS、11.4 LTS、10.11 LTS | /var/lib/mysql |
| MongoDB | 8.0、7.0、6.0 | /data/db |
| Redis | 8、7.4、7.2 | /data |
| Valkey | 8、7.2 | /data |
各データベースには、データ用のボリューム、生成されたパスワード、ヘルスチェックが付きます。メジャーバージョンは固定されるので、あとでアップグレードするにはダンプと復元が必要です。
アプリから接続する
プロジェクトの他のサービスは <hostname>.zenavo.internal でデータベースに接続し、次の変数を受け取ります。変数名は追加時のデータベースのプライベートホスト名から付けられます(postgresql → POSTGRESQL_…、postgresql-2 → POSTGRESQL_2_…)。ホスト部分は ${CONTAINER_HOSTNAME} なので、あとでホスト名を変えても追従します。
| 変数 | 例 |
|---|---|
<NAME>_CONNECTION_STRING | postgresql://postgres:…@postgresql.zenavo.internal:5432/zenavo |
<NAME>_HOST | postgresql.zenavo.internal |
<NAME>_PORT | 5432 |
<NAME>_DB_PASSWORD | 生成されたパスワード |
データベースはプロジェクト内からしか接続できません。手元のコンピューターから接続するには、Networking で TCP ポートを公開するか(TCP と UDP ポート)、サービスの Command パネルを使います。
データベースビュー
データベースサービスの Database タブは、データを表示し、データベースコンテナの中でデータベース自身のクライアントを使ってリクエストを実行します。接続はコンテナのローカルソケットか 127.0.0.1 経由で、サービスの変数にある認証情報を使います。このためにデータベースのポートを開けることはなく、認証情報がブラウザーに届くこともなく、入力した内容がシェルを通ることもありません。
| データを見られる人 | チームのメンバー、管理者、オーナー。Viewer はデータを見られません。 |
| データを変更できる人 | チームの管理者とオーナー。 |
| 制限 | データベースごとに 15 秒、出力 2 MB、同時に 2 リクエストまで。それより長い結果は切り詰められ、その旨が表示されます。 |
| 監査ログ | 一覧表示、ページ送り、クエリ、コマンドはすべて、サービスとリクエストの種類とともにチームの監査ログに記録されます。シークレットを含みうる SQL、キー、値、フィルター、ドキュメントは記録されません。 |
クライアントはデータベースの管理ユーザーとして動き、チームのメンバーはもともと Command パネルからコンテナのシェルを開けます。そのためビューの読み取り専用モードは誤操作を防ぐためのもので、サンドボックスではありません。より厳密な分離が必要なら、権限の少ないデータベースユーザーを使ってください。
PostgreSQL、MySQL、MariaDB
タブには、テーブルとビュー、推定行数、列(主キーには印が付きます)が表示されます。テーブルをクリックすると 100 行ずつ行をめくれます。SQL に切り替えると文を実行して結果を表で見られます。⌘ Enter(Ctrl Enter)で実行し、テキストを選択していればその部分だけが実行されます。クエリには psql、または mysql / mariadb を使います。
| デフォルトは読み取り専用 | 文は読み取り専用トランザクションで実行され、受け付けるのは SELECT、WITH、SHOW、EXPLAIN、DESCRIBE だけです。 |
| 書き込み | チームの管理者かオーナーが Allow writes をオンにすると、INSERT、UPDATE、DELETE とスキーマ変更ができます。すぐに反映されるので、先にバックアップを取ってください。 |
| 一度に 1 文 | 複数の文を含むスクリプト、クライアントコマンド(\!、source、system など)、MySQL の実行可能コメント(/*! … */)は拒否されます。 |
| 制限 | 文のタイムアウトは 15 秒、1 クエリあたり 1,000 行まで。 |
Redis と Valkey
Keys には、キーとその型、TTL、メモリサイズが表示されます。データベース(db0、db1 など。各 DB のキー数が表示されます)を選び、user:* のような一致パターンを入力します。キーは SCAN で 100 個ずつ一覧され、大きなデータベースでサーバーをブロックする KEYS は使いません。Scan more で続きを表示します。キーをクリックすると値が表示されます。
| 型 | 表示 |
|---|---|
| string | 値(256 KB まで) |
| hash | フィールドと値、100 個ずつ(HSCAN) |
| list | インデックス付きの要素、100 個ずつ |
| set | メンバー、100 個ずつ(SSCAN) |
| sorted set | メンバーとスコアを順に、100 個ずつ |
| stream | エントリーとそのフィールド、100 個ずつ |
要素は 4 KB で切り詰められます。テキストでないバイトは \xHH で表示されます。モジュールの型(JSON、時系列など)は型とサイズだけを表示するので、それぞれのコマンドで読んでください。
Command は redis-cli と同じ引用規則で 1 つのコマンドを実行します:SET "my key" "a value"。Enter で実行します。コマンドは redis-cli または valkey-cli で、パスワードは REDIS_PASSWORD か VALKEY_PASSWORD から取ります。
| デフォルトは読み取り専用 | 読み取りのコマンドだけを受け付けます:GET、HGETALL、LRANGE、SCAN、TTL、INFO など。 |
| 書き込み | チームの管理者かオーナーが Allow writes をオンにすると、キーと値を変更するコマンドが使えます:SET、DEL、EXPIRE、HSET、LPUSH、ZADD、XADD など。すぐに反映されます。 |
| 常に拒否 | サーバー全体や他のクライアントに影響するコマンド:FLUSHALL、FLUSHDB、SWAPDB、CONFIG、SHUTDOWN、DEBUG、MODULE、ACL、CLIENT、MONITOR、SLOWLOG、REPLICAOF / SLAVEOF、MIGRATE、SAVE、BGSAVE、CLUSTER、FAILOVER。KEYS。スクリプト(EVAL、EVALSHA、SCRIPT、FUNCTION、FCALL)。ブロッキングコマンド(BLPOP、XREAD … BLOCK、WAIT など)。pub/sub、トランザクション(MULTI、WATCH)、SELECT。ビューが知らないコマンドも拒否されます。 |
それ以外の操作は、Command パネルから redis-cli か valkey-cli を実行してください。
MongoDB
タブには、データベースとそのコレクション、推定ドキュメント数が表示されます(admin、config、local は System databases の下)。コレクションをクリックし、フィルター、ソート、プロジェクションを JSON で入力します(例:{"status": "active"}、{"created": -1}、{"name": 1})。Enter で検索します。ドキュメントは 50 件ずつ、relaxed モードの Extended JSON で表示されます。ObjectId は {"$oid": "…"}、日付は {"$date": "…"}、JavaScript の数値で正確に表せない 64 ビット整数は {"$numberLong": "…"} です。フィルターでも同じ形式を使ってください。リクエストは mongosh を使い、MONGO_INITDB_ROOT_USERNAME と MONGO_INITDB_ROOT_PASSWORD でサインインします。
| 検索 | フィルター、ソート、プロジェクションはそれぞれ 64 KB まで、1 ページ最大 500 ドキュメント。256 KB を超えるドキュメントは _id だけが表示されるので、プロジェクションで一部を表示してください。 |
| 変更 | チームの管理者とオーナーは、ドキュメントを Insert し、_id で一致したドキュメントを 1 件ずつ更新・削除できます。更新には演算子($set、$unset、$inc など)を使い、ドキュメント全体の置き換えはできません。システムコレクションは変更できません。 |
| 拒否 | サーバー上で JavaScript を実行する演算子($where、$function、$accumulator)。集約や runCommand はありません。それらは Command パネルから mongosh を使ってください。 |