無料ツール
PostgreSQL を ER 図に変換
pg_dump の出力を SET 行、ALTER TABLE ONLY の制約、COPY ブロックごとそのまま貼り付けると、すべてのテーブルと外部キーの ER 図ができます。マルチテナント SaaS のサンプルは、IDENTITY 列、enum 型、パーティション分割されたテーブルを使っています。
出力例
使い方
pg_dump の出力を貼り付けるかドロップ
テキスト形式のダンプ、マイグレーションファイル、psql や pgAdmin、ORM から得た CREATE TABLE 文を使えます。ダンプを事前に整理する必要はありません。
テーブルとキーを確認
pg_dump がファイルの末尾に書くキーはそれぞれのテーブルに結び付けられ、外部キーの線はその列から始まります。複数のスキーマを含むダンプでは、スキーマごとに枠が付きます。
Archboard で開く
新しい図として保存すれば、配置の変更、注釈の追加、リンクの共有、SVG・PNG へのエクスポートができます。登録は Google か GitHub のアカウントだけで済みます。
PostgreSQL からデータベーススキーマを取り出す
データベースに対してこのコマンドを実行し、schema.sql を貼り付けるかファイルをドロップしてください。
--schema-only はデータ行を除き、--no-owner と --no-privileges は OWNER TO、GRANT、REVOKE の行を除きます。1 つのスキーマだけをダンプするには --schema=sales を追加します。mydb はデータベース名に置き換え、必要に応じて -h と -U、または接続 URI を指定してください。
pg_dump --schema-only --no-owner --no-privileges mydb > schema.sql
ダンプ内の PostgreSQL 構文
pg_dump のファイルに含まれる各構文の扱いは次のとおりです。
serial · GENERATED … AS IDENTITY- 書かれたとおりの型を持つ通常の列として読み込み、IDENTITY やシーケンスのデフォルト値は表示しません。serial 列に PK の印が付くのは PRIMARY KEY が指定されている場合だけです。serial だけではキーにならないためです。
CREATE TYPE … AS ENUM- enum 型の名前が order_status のように列の型になります。ラベルはカードに表示しません。
CREATE SCHEMA- ダンプに複数のスキーマがある場合、テーブルを持つスキーマはそれぞれテーブルを囲む枠になり、スキーマをまたぐ外部キーは枠を越えて描かれます。
ALTER TABLE ONLY … ADD CONSTRAINT- 読み込みます。pg_dump は主キー、一意制約、外部キーをファイルの最後に書くため、すべてのテーブルを読み終えてから適用します。
PARTITION OF- 親テーブルにまとめるので、月ごとに分割したテーブルも 1 枚のカードになります。まとめたパーティションの数はプレビューに表示します。ATTACH PARTITION も同じように扱います。
$$ … $$- ドル引用符で囲まれた関数やプロシージャの本体はまるごと読み飛ばすので、中のセミコロンで文が途中で切れることはありません。DO ブロック内の CREATE TABLE と ALTER TABLE … ADD CONSTRAINT は読み込みます。
COPY … FROM stdin- 続くデータ行は、終わりを示す \. の行まで読まずに読み飛ばします。
\restrict- 読み飛ばします。最近の pg_dump はダンプの前後に \restrict と \unrestrict の行を書きます。これらや \connect などの psql メタコマンドは無視します。
pg_dump から描いた図に含まれないもの
- テーブルのデータ。COPY ブロックや INSERT 文の行は読まないため、データ入りのダンプでも --schema-only で取ったダンプと同じ図になります。
- 関数、プロシージャ、トリガー、DO ブロックのコード。本体は読み飛ばして件数を数えます。DO ブロックから取り込むのはテーブルと制約だけです。
- 行レベルセキュリティ(RLS)のポリシー、GRANT と REVOKE、オブジェクトの所有者。誰がテーブルを読み書きできるかは図に表れません。
- 稼働中の PostgreSQL サーバーの情報。接続は行わないため、テーブルサイズ、行数、インストール済みの拡張機能は表示されません。
PostgreSQL に関する質問
pg_dump のオプションは何を指定すればよいですか?
pg_dump --schema-only --no-owner --no-privileges がいちばん短い出力になりますが、データを含むものも含めてテキスト形式のダンプなら何でも使えます。-Fc で作ったカスタム形式のアーカイブは SQL テキストではないので、pg_restore --schema-only -f schema.sql にアーカイブのファイル名を付けて SQL に変換してください。
複数のスキーマはどう表示されますか?
テーブルを持つスキーマはそれぞれ、テーブルを中に収めた枠になります。public、billing、audit が分かれて表示され、その間の外部キーは枠を越えて描かれます。1 つのスキーマだけを描くには、--schema=名前(短縮形は -n)でそのスキーマだけをダンプしてください。
パーティション分割されたテーブルはどうなりますか?
PARTITION OF で作ったパーティションや、あとから ATTACH PARTITION で追加したパーティションは親テーブルにまとめられます。12 か月分のパーティションに分かれた payments テーブルも 1 枚のカードになります。まとめたパーティションの数はプレビューに表示されます。
enum 型や独自の型は表示されますか?
CREATE TYPE … AS ENUM で作った enum は列の型として使われ、status 列には order_status と表示されますが、enum のラベルは一覧表示されません。ドメインや複合型はカードとして描かれませんが、それを使う列には書かれたとおりの型名が表示されます。
ダンプを貼り付けると何かが保存されますか?
プレビューは保存されません。「Archboard で開く」を選ぶと、テーブルのカード、列名と型、スキーマの枠、線を含む描かれた図が、新しい図としてワークスペースに保存されます。あとでデータベースを変更しても図は更新されません。
PostgreSQL の ER 図ツールは無料ですか?
はい。ダンプの貼り付けと図の表示にアカウントは不要です。図を Archboard で開くには無料アカウントが必要です。