共有

はじめに

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

この短いガイドでは、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

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

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

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

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

.fullschemaコマンドではテーブル名によるフィルタリングはできない点に注意してください。

まとめ

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

著者について
Justin Ellingwood

Justin Ellingwood

Justinは2013年以来、データベース、Linux、インフラストラクチャ、開発者ツールについて執筆しています。現在は妻と2匹のウサギと共にベルリンに住んでいます。通常、三人称で書く必要がないため、関係者全員にとって安心です。
© . All rights reserved.