管理データベース
管理データベース
v1.22.0で追加
sqlc
は、クエリ分析、リンティング、検証を強化するための読み取り専用データベースを自動的に作成できます。これらのデータベースは、sqlcの組み込みクエリ分析エンジンを改善するオプトイン機能である、sqlcのデータベース接続クエリアナライザーを強化するのに即座に役立ちます。PostgreSQLサポートは現在利用可能で、MySQLもまもなく対応予定です。
設定が完了すると、sqlc
は、実行中のデータベースへの接続を必要とするリントルールがある場合に、sqlc vetでクエリをリンティングする際にも管理データベースを使用します。
管理データベースは積極的に開発中であり、他のユースケースのサポートにも興味を持っています。
管理データベースの設定
sqlc
が管理データベースを使用するように設定するには、database
設定からuri
キーを削除し、managed
キーをtrue
に設定して置き換えます。実行中のデータベースサーバーへのアクセスが必要です。servers
マッピングに接続文字列を追加します。
version: '2'
servers:
- engine: postgresql
uri: "postgres://localhost:5432/postgres?sslmode=disable"
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
database:
managed: true
環境変数も${}
構文を使用して使用できます。
version: '2'
servers:
- engine: postgresql
uri: ${DATABASE_URI}
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
database:
managed: true
コード生成の改善
データベース接続がない場合、sqlcは渡されたスキーマとサポートするさまざまなデータベースエンジンについて知っていることだけを使用して、クエリの解析、分析、コンパイルを最善を尽くして行います。多くの場合、これは正常に動作しますが、より高度なクエリの場合、sqlcは良いコードを生成するのに十分な情報を持たない可能性があります。
管理データベースが設定されている場合、sqlc generate
は自動的にスキーマを持つホスト型エフェメラルデータベースを作成し、そのデータベースを使用してクエリ分析を改善します。そして、sqlcは将来のコード生成実行を高速化するために、クエリごとにローカルで分析をキャッシュします。以下は最小限の動作設定です:
version: '2'
servers:
- engine: postgresql
uri: "postgres://localhost:5432/postgres?sslmode=disable"
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
database:
managed: true
gen:
go:
out: "db"
クエリのリンティング
管理データベースが設定されている場合、sqlc vet
は自動的にスキーマを持つホスト型エフェメラルデータベースを作成し、データベース接続を必要とするリントルール(例:EXPLAIN … 出力に依存するルール)を実行する際にそのデータベースを使用します。
まだvetルールがない場合は、組み込みのsqlc/db-prepare
ルールから始めることをお勧めします。これは、クエリが有効であることを確認するために、各クエリをデータベースに対して準備します。以下は最小限の動作設定です:
version: '2'
servers:
- engine: postgresql
uri: "postgres://localhost:5432/postgres?sslmode=disable"
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
database:
managed: true
rules:
- sqlc/db-prepare
原文:https://docs.sqlc.dev/en/latest/howto/managed-databases.html