プログラミング
Docker/Brew/apt不要のPip install Postgres
Pip install Postgres – no Docker/Brew/apt (github.com)
要約
このライブラリは、DockerやBrew、aptなどの外部依存関係なしにPythonでPostgreSQLのテストを簡単に行うためのヘルパーを提供します。各テストスレッドごとに新しいデータベースを作成したり、テンプレートやアーカイブからデータベースを復元したりできます。
全文翻訳
Postgresql Testing Docker/Brew/apt不要のシンプルなPostgresヘルパー - postgresql-binariesを使用します。インターフェースはシンプルですが、各テストスレッドごとに新しいデータベースを作成したり、テンプレートから新しいデータベースを使用したり、アーカイブを復元したりできるほど低レベルです。
pip install 'postgresql-testing[15]'
pytestで使用する場合の例:
import postgresql_testing
@pytest.fixture(scope="session")
def db() -> Iterator[str]:
config = postgresql_testing.DatabaseConfig.default("testing-db")
postgresql_testing.initdb(config.directory, on_existing="use")
with postgresql_testing.serve(config):
postgresql_testing.ensure_user(config)
postgresql_testing.create_database(config, on_existing="replace")
yield config.dsn
様々な便利なフラグや機能があります - ソースコードは短いため、すぐに確認できます。すぐにテストできる新しいDBを起動するには:
postgresql-testing-serve postgres://testing:@localhost:8421/my-db
または、どこからでも使い捨てのPostgresが必要な場合:
uvx --from 'postgresql-testing[16]' postgresql-testing-serve
おまけとして、explain.dalibo.comのローカルコピーもバンドルされています。
クエリプランを取得するには:
EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) SELECT ...
その後、コピーして:
pbpaste | postgresql-testing-explain
テンプレートDBやアーカイブの作成・使用のためのヘルパーがいくつかあります。将来的に、スマートなキャッシング(またはそうでないもの)を備えた「移行済みデータベースのDockerレイヤー」のようなものを考えていますが、まだ具体的な形は決まっていません。
いくつかのベンチマーク:
テーブル数 | テンプレートからの作成 | ダンプからアーカイブ作成 | アーカイブから作成
------- | -------- | -------- | --------
100 | 80ms | 80ms (0.2MB) | 150ms
1000 | 500ms | 300ms (2MB) | 1100ms
macOSでRAMディスクを使用すると、わずかに速くなります:
テーブル数 | テンプレートからの作成 | ダンプからアーカイブ作成 | アーカイブから作成
------- | -------- | -------- | --------
100 | 70ms | 70ms | 120ms
1000 | 350ms | 300ms | 1000ms
planet Goからの主張/アドバイスを参照してください。