1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語でPostgreSQLを使ったデータベースのリセット方法

Posted at

本記事の内容

Go言語を使って数値計算シミュレーションアプリのバックエンドを開発しています。計算に使用する数値データを保存するためにデータベースを活用しており、開発中にはテストや新しいデータを作成する際にデータベースをリセットする必要が頻繁に発生します。もちろん、特定の部分だけを更新することも可能ですが、データ構造自体も試行錯誤しながら進めているため、既存のテーブルや登録データを削除してデータベースをクリーンに保つ方が、開発の効率化につながります。

この記事では、既存のテーブルを削除して再作成する具体的な方法について解説します。

※本記事はあくまで個人開発の一環であり、PostgreSQLやデータベース管理に関して誤りがあればぜひご指摘いただけると幸いです。

使用環境

  • Windows11 pro
  • PostgresSQL
  • Go言語
  • pgAdmin4

Postgresデータベースのリセット方法

PostgreSQLでデータベースをリセットする際には、主に以下のステップを踏みます。

  1. スキーマの削除: テーブル、ビュー、シーケンスなどすべてのオブジェクトを削除します
  2. スキーマの再作成: 削除したスキーマを再作成します

Go言語での実装: データベースのリセット

Go言語でデータベースのリセットを行うために、ORMライブラリであるGORMを使います。GORMは、GoとPostgreSQLをシンプルに統合できる強力なツールで、SQLクエリの実行やテーブル管理を効率的に行うことができます。

以下が、データベースのリセットを行うためのコード例です。

func resetDatabase(db *gorm.DB) error {
    // スキーマの削除と再作成
    if err := db.Exec("DROP SCHEMA public CASCADE;").Error; err != nil {
        return err
    }
    if err := db.Exec("CREATE SCHEMA public;").Error; err != nil {
        return err
    }
    return nil
}
  1. スキーマの削除
    • このコードでは、まず DROP SCHEMA public CASCADE; で public スキーマ内の全オブジェクト(テーブル、ビュー、シーケンスなど)を削除します
  2. スキーマの再作成
    • 次に、CREATE SCHEMA public; を使って再度 public スキーマを作成しています。このようにすることで、データベースは完全にリセットされ、再度データの登録やテストが可能になります

テスト環境での利用例

この方法は、開発段階での頻繁なデータベースのリセットに非常に有用です。例えば、データ構造の修正や型の変更、データの追加時に状態をリセットし新しいデータを投入して動作を確認する際に簡単にデータベースをクリアして再利用することができます。

テストの前にデータベースをリセットする例を示します。

func TestMain(m *testing.M) {
    db, err := gorm.Open("postgres", "host=localhost user=test dbname=test sslmode=disable")
    if err != nil {
        log.Fatalf("failed to connect to the database: %v", err)
    }

    var deleteAll bool
	fmt.Print("Delete all data? (true/false): ")
	fmt.Scan(&deleteAll)

	if deleteAll {
		// テスト前にデータベースをリセット
        if err := resetDatabase(db); err != nil {
            log.Fatalf("failed to reset the database: %v", err)
        }

        if err := db.AutoMigrate(&models.Data1{}, &models.Data2{}, &models.Data3{}); err != nil {
		log.Fatalf("failed to migrate: %v", err)
	    }

        for _, data := range data1Arr {
		    if err := db.Create(&data).Error; err != nil {
			    log.Fatalf("failed to save element: %v", err)
		    }
	    }
    }

    // 以下必要な処理を記述
}

注意点
データベースのリセットは非常に強力な操作であり、全てのデータやテーブルが失われるため、必ず事前にバックアップを取ってから行うようにしてください。また、本番環境での使用は避けるべきです。リセットはあくまで開発やテスト環境での操作として使用することをお勧めします。

まとめ

データベースを用いた開発段階では、PostgreSQLをリセットしてクリーンな状態にすることは、開発効率を大幅に向上させます。今回紹介した方法を使用すれば、簡単にスキーマやテーブルを削除し、再作成することが可能です。今後の開発やテストの際にぜひ活用してみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?