---
title: "Description"
source: dbt Core Documentation
source_url: https://github.com/dbt-labs/docs.getdbt.com
licence: Apache-2.0
domain: data-and-analysis
subdomain: dbt-docs
date_added: 2026-04-25
---

The `full_refresh` config allows you to control whether a resource will always or never perform a full-refresh. This config overrides the `--full-refresh` command-line flag.

<Tabs
  defaultValue="models"
  values={[
    { label: 'Models', value: 'models', },
    { label: 'Seeds', value: 'seeds', },
  ]
}>

<TabItem value="models">

<File name='dbt_project.yml'>

```yml
models:
  [<resource-path>](/reference/resource-configs/resource-path):
    +full_refresh: false | true 
```

</File>

<File name='models/<modelname>.sql'>

```sql

{{ config(
    full_refresh = false | true
) }}

select ...
```

</File>

</TabItem>

<TabItem value="seeds">

<File name='dbt_project.yml'>

```yml
seeds:
  [<resource-path>](/reference/resource-configs/resource-path):
    +full_refresh: false | true

```

</File>

</TabItem>

</Tabs>

## Description

The `full_refresh` config allows you to optionally configure whether a resource will always or never perform a full-refresh. This config is an override for the `--full-refresh` command line flag used when running dbt commands. 

You can set the `full_refresh` config in the `dbt_project.yml` file or in a resource config. 

| `full_refresh` value | Behavior |
| ---------------------------- | -------- |
| If set to `true` | The resource _always_ performs a full refresh, regardless of whether you pass the `--full-refresh` flag in the dbt command. |
| If set to `false` | The resource _never_ performs a full refresh, regardless of whether you pass the `--full-refresh` flag in the dbt command. |
| If set to `none` or omitted | The resource follows the behavior of the `--full-refresh` flag. If the flag is used, the resource will perform a full refresh; otherwise, it will not. |

#### Note
- The `--full-refresh` flag also supports a short name, `-f`.
- The [`should_full_refresh()`](https://github.com/dbt-labs/dbt-adapters/blob/60005a0a2bd33b61cb65a591bc1604b1b3fd25d5/dbt/include/global_project/macros/materializations/configs.sql) macro has logic encoded.

## Usage

### Incremental models

* [How do I rebuild an incremental model?](/docs/build/incremental-models#how-do-i-rebuild-an-incremental-model)
* [What if the columns of my incremental model change?](/docs/build/incremental-models#what-if-the-columns-of-my-incremental-model-change)

### Seeds

<FAQ path="Seeds/full-refresh-seed" />

## Recommendation
- Set `full_refresh: false` for models of especially large datasets, which you would _never_ want dbt to fully drop and recreate.
- You cannot override an existing `full_refresh` config. To change its behavior in 
certain circumstances, remove the config logic or update it using variables so the 
behavior can be overridden when needed. For example, if you have an incremental model with the following config:
  ```sql
  {{ config(
      materialized = 'incremental',
      full_refresh = var("force_full_refresh", false)
  ) }}
  ```

  Then override the `full_refresh` config to `true` using the [`--vars` flag](/docs/build/project-variables#defining-variables-on-the-command-line): `dbt run --vars '{"force_full_refresh": true}'`.

## Reference docs
* [on_configuration_change](/reference/resource-configs/on_configuration_change)
