管理データベース

管理データベース

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