無料ツール

PostgreSQL を ER 図に変換

pg_dump の出力を SET 行、ALTER TABLE ONLY の制約、COPY ブロックごとそのまま貼り付けると、すべてのテーブルと外部キーの ER 図ができます。マルチテナント SaaS のサンプルは、IDENTITY 列、enum 型、パーティション分割されたテーブルを使っています。

出力例

PostgreSQL のサンプルから描いた図の例
サンプルを試すマルチテナント SaaS

使い方

  1. pg_dump の出力を貼り付けるかドロップ

    テキスト形式のダンプ、マイグレーションファイル、psql や pgAdmin、ORM から得た CREATE TABLE 文を使えます。ダンプを事前に整理する必要はありません。

  2. テーブルとキーを確認

    pg_dump がファイルの末尾に書くキーはそれぞれのテーブルに結び付けられ、外部キーの線はその列から始まります。複数のスキーマを含むダンプでは、スキーマごとに枠が付きます。

  3. Archboard で開く

    新しい図として保存すれば、配置の変更、注釈の追加、リンクの共有、SVG・PNG へのエクスポートができます。登録は Google か GitHub のアカウントだけで済みます。

PostgreSQL からデータベーススキーマを取り出す

データベースに対してこのコマンドを実行し、schema.sql を貼り付けるかファイルをドロップしてください。

  1. --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 で開くには無料アカウントが必要です。

1分でキャンバスを開く

Google または GitHub でサインイン。1シートは無料で、チームが加わったらアップグレード。