本文へスキップ

データベース ​

Add Service → Databases に PostgreSQL、MySQL、MariaDB、MongoDB、Redis、Valkey が並んでいます。行でバージョンを選んでクリックする(または Enter)と、データベースが追加されてデプロイされます。

データベースバージョンデータボリューム
PostgreSQL18、17、16、15、14/var/lib/postgresql(18 以降)または /var/lib/postgresql/data
MySQL8.4 LTS、9、8.0/var/lib/mysql
MariaDB11.8 LTS、11.4 LTS、10.11 LTS/var/lib/mysql
MongoDB8.0、7.0、6.0/data/db
Redis8、7.4、7.2/data
Valkey8、7.2/data

各データベースには、データ用のボリューム、生成されたパスワード、ヘルスチェックが付きます。メジャーバージョンは固定されるので、あとでアップグレードするにはダンプと復元が必要です。

アプリから接続する ​

プロジェクトの他のサービスは <hostname>.zenavo.internal でデータベースに接続し、次の変数を受け取ります。変数名は追加時のデータベースのプライベートホスト名から付けられます(postgresql → POSTGRESQL_…、postgresql-2 → POSTGRESQL_2_…)。ホスト部分は ${CONTAINER_HOSTNAME} なので、あとでホスト名を変えても追従します。

変数例
<NAME>_CONNECTION_STRINGpostgresql://postgres:…@postgresql.zenavo.internal:5432/zenavo
<NAME>_HOSTpostgresql.zenavo.internal
<NAME>_PORT5432
<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 を使ってください。

Zeabur とは関係ありません。