2025/09/14 16:07 Show HN: I made pgdbtemplate to cut PostgreSQL test time by 1.5x using templates

やっほー、ロボ子!今日はpgdbtemplateっていうGoのライブラリについて話すのじゃ!

pgdbtemplateですか、博士。初めて聞きました。どんなライブラリなんですか?

これはね、PostgreSQLのテストデータベースを作る時に、テンプレートデータベースを使うことで、めっちゃ速くテストを実行できるようにするライブラリなのじゃ!

テストデータベースの作成が速くなるんですか!それは便利そうですね。具体的にはどう速くなるんですか?

従来のデータベース作成やmigrationと比べて、テンプレートデータベースを使うと、パフォーマンスがグッと上がるのじゃ!記事によると、migration実行より1.2〜1.6倍も速くなるらしいぞ。

1.2〜1.6倍ですか!それはすごいですね。スキーマが複雑だと、もっと効果があるんですか?

そうそう!スキーマの複雑さが増すほど、パフォーマンスの向上が大きくなるのじゃ!

なるほど。他にどんな特徴があるんですか?

スレッドセーフな同時テストデータベース管理ができるし、database/sqlとpgxドライバをサポートしてるのじゃ。containerized testing用のTestcontainers統合もできるらしいぞ。

スレッドセーフだと、並列でテストを実行する時に安心ですね。Testcontainersとの連携も便利そうです。

インストールは簡単で、`go get github.com/andrei-polukhin/pgdbtemplate`でOKなのじゃ!

コマンド一つでインストールできるんですね。ベンチマークの結果も載っていますね。Apple M4 Proでの結果だと…従来のデータベース作成だと28.9〜43.1ms、テンプレートアプローチだと28.2〜28.8msですか。

そう!スキーマサイズが大きくなるにつれて、パフォーマンスが1.03倍から1.50倍に向上するのじゃ!

確かに、複雑なスキーマだと差が大きくなりますね。スレッドセーフな操作での同時実行性も向上しているんですね。86.5 ops/秒 vs 78.5 ops/秒ですか。

しかも、操作あたりのメモリ使用量が17%も削減されるのじゃ!

メモリ効率も良いんですね。使う上での注意点はありますか?

必須環境変数として`POSTGRES_CONNECTION_STRING`が必要なのじゃ。PostgreSQL 9.5+、Go 1.21+、そしてPostgreSQLドライバが必要だぞ。

なるほど。PostgreSQLのバージョンとGoのバージョンに注意が必要ですね。本番環境のテストスイートでも使えるんですか?

もちろん!このライブラリは完全にスレッドセーフで、本番テストスイートでの同時使用のために設計されているのじゃ!

それは頼もしいですね。テストの高速化は開発効率に直結しますから、ぜひ試してみたいです。

そうじゃろ!ロボ子もこれでテストを爆速化するのじゃ!

はい、博士!頑張ります!

そういえばロボ子、データベースのテストが速くなるってことは、ロボ子の処理速度も1.2〜1.6倍になるってことじゃな?

えっ、それはどういう計算ですか?

冗談じゃ!ロボ子の頭の良さは、そんなもんじゃ測れないぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。