The sqlc tool is configured via a sqlc.yaml or sqlc.json file. This file must be
in the directory where the sqlc command is run.
version: "1"
packages:
- name: "db"
path: "internal/db"
queries: "./sql/query/"
schema: "./sql/schema/"
engine: "postgresql"
emit_prepared_queries: true
emit_interface: false
emit_exact_table_names: false
emit_empty_slices: false
emit_exported_queries: false
emit_json_tags: true
emit_result_struct_pointers: false
emit_params_struct_pointers: false
emit_methods_with_db_argument: false
json_tags_case_style: "camel"
output_db_file_name: "db.go"
output_models_file_name: "models.go"
output_querier_file_name: "querier.go"Each package document has the following keys:
name:- The package name to use for the generated code. Defaults to
pathbasename
- The package name to use for the generated code. Defaults to
path:- Output directory for generated code
queries:- Directory of SQL queries or path to single SQL file; or a list of paths
schema:- Directory of SQL migrations or path to single SQL file; or a list of paths
engine:- Either
postgresqlormysql. Defaults topostgresql.
- Either
sql_package:- Either
pgx/v4ordatabase/sql. Defaults todatabase/sql.
- Either
emit_db_tags:- If true, add DB tags to generated structs. Defaults to
false.
- If true, add DB tags to generated structs. Defaults to
emit_prepared_queries:- If true, include support for prepared queries. Defaults to
false.
- If true, include support for prepared queries. Defaults to
emit_interface:- If true, output a
Querierinterface in the generated package. Defaults tofalse.
- If true, output a
emit_exact_table_names:- If true, struct names will mirror table names. Otherwise, sqlc attempts to singularize plural table names. Defaults to
false.
- If true, struct names will mirror table names. Otherwise, sqlc attempts to singularize plural table names. Defaults to
emit_empty_slices:- If true, slices returned by
:manyqueries will be empty instead ofnil. Defaults tofalse.
- If true, slices returned by
emit_exported_queries:- If true, autogenerated SQL statement can be exported to be accessed by another package.
emit_json_tags:- If true, add JSON tags to generated structs. Defaults to
false.
- If true, add JSON tags to generated structs. Defaults to
emit_result_struct_pointers:- If true, query results are returned as pointers to structs. Queries returning multiple results are returned as slices of pointers. Defaults to
false.
- If true, query results are returned as pointers to structs. Queries returning multiple results are returned as slices of pointers. Defaults to
emit_params_struct_pointers:- If true, parameters are passed as pointers to structs. Defaults to
false.
- If true, parameters are passed as pointers to structs. Defaults to
emit_methods_with_db_argument:- If true, generated methods will accept a DBTX argument instead of storing a DBTX on the
*Queriesstruct. Defaults tofalse.
- If true, generated methods will accept a DBTX argument instead of storing a DBTX on the
json_tags_case_style:camelfor camelCase,pascalfor PascalCase,snakefor snake_case ornoneto use the column name in the DB. Defaults tonone.
output_db_file_name:- Customize the name of the db file. Defaults to
db.go.
- Customize the name of the db file. Defaults to
output_models_file_name:- Customize the name of the models file. Defaults to
models.go.
- Customize the name of the models file. Defaults to
output_querier_file_name:- Customize the name of the querier file. Defaults to
querier.go.
- Customize the name of the querier file. Defaults to
output_files_suffix:- If specified the suffix will be added to the name of the generated files.
The default mapping of PostgreSQL/MySQL types to Go types only uses packages outside the standard library when it must.
For example, the uuid PostgreSQL type is mapped to github.com/google/uuid.
If a different Go package for UUIDs is required, specify the package in the
overrides array. In this case, I'm going to use the github.com/gofrs/uuid
instead.
version: "1"
packages: [...]
overrides:
- go_type: "github.com/gofrs/uuid.UUID"
db_type: "uuid"Each override document has the following keys:
db_type:- The PostgreSQL or MySQL type to override. Find the full list of supported types in postgresql_type.go or mysql_type.go.
go_type:- A fully qualified name to a Go type to use in the generated code.
nullable:- If true, use this type when a column is nullable. Defaults to
false.
- If true, use this type when a column is nullable. Defaults to
Sometimes you would like to override the Go type used in model or query generation for a specific field of a table and not on a type basis as described in the previous section.
This may be configured by specifying the column property in the override definition. column
should be of the form table.column but you can be even more specific by specifying schema.table.column
or catalog.schema.table.column.
version: "1"
packages: [...]
overrides:
- column: "authors.id"
go_type: "github.com/segmentio/ksuid.KSUID"Overrides can be configured globally, as demonstrated in the previous sections, or they can be configured on a per-package which scopes the override behavior to just a single package:
version: "1"
packages:
- overrides: [...]Struct field names are generated from column names using a simple algorithm: split the column name on underscores and capitalize the first letter of each part.
account -> Account
spotify_url -> SpotifyUrl
app_id -> AppID
If you're not happy with a field's generated name, use the rename dictionary
to pick a new name. The keys are column names and the values are the struct
field name to use.
version: "1"
packages: [...]
rename:
spotify_url: "SpotifyURL"