シェア

はじめに

リレーショナルデータベースでは、データベーススキーマは、データベースの構造と、テーブル、フィールド、インデックスなどの構成要素を定義します。この情報を抽出およびエクスポートすることは、バックアップ、新しい環境への移行、データ構造の可視化、およびコードベース内でのこれらの構造の管理など、多くのシナリオで役立ちます。

この短いガイドでは、sqlite3 コマンドを使用して SQLite データベーススキーマをエクスポートする方法について説明します。データベースの管理に使用できるのと同じコマンドを使用して、データベースのデータと構造をエクスポートできます。このガイドでは、データ構造自体を抽出することに焦点を当てます。

基本的な使い方

SQLite からデータベーススキーマをエクスポートするために必要な基本的なコマンドは次のとおりです。

sqlite3 DATABASE_FILE.sqlite '.schema' > schema.sql

ここで、DATABASE_FILE.sqlite は、データと構造を含む SQLite データベースファイルです。'.schema' コンポーネントは、SQLite にデータベーススキーマをデータなしでエクスポートするように指示するコマンドです。schema.sql ファイルは、エクスポートされたデータベース構造を受け取るターゲットファイルです。

インタラクティブに実行する

上記のコマンドは、コマンドラインから実行できます。この同じ手順を sqlite3 シェル内でインタラクティブに実行できます。

まず、sqlite3 コマンドで SQLite データベースファイルを開きます。

sqlite DATABASE_FILE.sqlite

次に、コマンド結果が表示される代わりにファイルに送信されるように出力を設定します。

.output schema.sql

最後に、次のように入力してスキーマを出力します。

.schema

オプションで、次のように入力して出力を標準出力に戻すことができます。

.output

ガイドの残りの部分では、追加機能を実証するためにコマンドラインを使用しますが、必要に応じてこの方法を使用してインタラクティブに複製できることに注意してください。

特定のデータベースのスキーマをエクスポートする

特定のデータベースに関連するスキーマのみをエクスポートするには、次の構文を使用して、データベースに属するすべてのコンポーネントをワイルドカードで選択できます。

sqlite3 DATABASE_FILE.sqlite '.schema DATABASE.*' > database_schema.sql

たとえば、sales.sql という名前のデータベースファイルがあり、VENDORS データベースのみをエクスポートする場合は、次のように入力できます。

sqlite3 sales.sqlite '.schema VENDORS.*' > vendors_db_schema.sql

特定のテーブルをエクスポートする

.schema の後にテーブル名を含めることで、特定のテーブルをエクスポートすることもできます。

sqlite3 DATABASE_FILE.sqlite '.schema TABLE' > table_schema.sql

このアプローチの代替案は、特定の名前に代えてワイルドカード一致を使用することです。schema コマンドは、これに LIKE パターンマッチング を使用します。これは、パーセント文字 (%) が 0 個以上の文字に一致するために使用され、アンダースコア (_) が正確に 1 文字を表すことができることを意味します。

たとえば、inventory で始まるすべてのテーブルをエクスポートするには、次のように入力できます。

sqlite3 DATABASE_FILE.sqlite '.schema inventory%' > inventory_schemas.sql

この構文では、複数のパターンまたは複数の特定のテーブルを一度に指定することはできません。そのため、必要なオブジェクトをエクスポートするために複数のコマンドを実行するか、すべてをダンプしてエクスポートされたスキーマを手動で操作する必要がある場合があります。

スキーマダンプにデータベース統計を含める

クエリプランなどを決定するために SQLite が内部的に使用するすべての統計テーブルを含めるには、.schema コマンドの代わりに .fullschema コマンドを使用できます。これは、クエリが特定の方法で実行された理由をデバッグしようとする場合に役立つ情報となる可能性があります。

sqlite3 DATABASE_FILE.sqlite '.fullschema' > schema_with_statistics.sql

.fullschema コマンドでは、テーブル名でフィルタリングすることはできません。

結論

スキーマをエクスポートできることで、データベース構造をデータベース自体の外部に保存できます。これは、新しい環境をセットアップしたり、ニーズの変化に合わせてスキーマを進化させたり、保存している情報の構造を視覚化したりするのに役立ちます。

著者について
Justin Ellingwood

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。現在、妻と 2 羽のウサギと共にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって救いです。