Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/configuration/pgdog.toml/rewrite.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ The `rewrite` section controls PgDog's automatic SQL rewrites for sharded databa
shard_key = "error"
split_inserts = "error"
primary_key = "ignore"
omni_non_deterministic_functions = "ignore"
```
=== "Helm chart"
```yaml
Expand All @@ -21,6 +22,7 @@ The `rewrite` section controls PgDog's automatic SQL rewrites for sharded databa
shardKey: "error"
splitInserts: "error"
primaryKey: "ignore"
omniNonDeterministicFunctions: "ignore"
```

| Setting | Description | Default |
Expand All @@ -29,6 +31,7 @@ The `rewrite` section controls PgDog's automatic SQL rewrites for sharded databa
| `shard_key` | Behavior when an `UPDATE` changes a sharding key: `error` rejects the statement,<br>`rewrite` migrates the row between shards,<br>`ignore` forwards it unchanged. | `"error"` |
| `split_inserts` | Behavior when a sharded table receives a multi-row `INSERT`: `error` rejects the statement, `rewrite` fans the rows out to their shards, `ignore` forwards it unchanged. | `"error"` |
| `primary_key` | Behavior when an `INSERT` is missing a `BIGINT` primary key: `error` rejects the statement,<br>`rewrite` auto-injects `pgdog.unique_id()` for missing keys,<br>`ignore` allows the INSERT without modification. | `"ignore"` |
| `omni_non_deterministic_functions` | Behavior when an `INSERT` is headed to an omnisharded table using a function (such as date-time functions) that will not be consistent when performing the functions separately on each shard. Thus, it re-writes all such functions before performing the `INSERT` with constant values to maintain consistency. Example: `NOW()` is re-written to `2026-09-15 18:14:09.123456-05` (or whatever the current time is) before performing the individual `INSERT` operations. This applies to both `DEFAULT` table schema and functions called within a VALUES list of an `INSERT`. `ignore` allows the `INSERT` without modification. | `"ignore"` |

!!! note "Two-phase commit"
Consider enabling [two-phase commit](../../features/sharding/2pc/index.md) when either feature is set to `rewrite`. Without it, rewrites are committed shard-by-shard and can leave partial changes if a transaction fails.
Expand All @@ -41,6 +44,7 @@ The admin database exposes these toggles via the `SET` command:
SET rewrite_enabled TO true; -- enable/disable rewrite engine
SET rewrite_shard_key_updates TO rewrite; -- error | rewrite | ignore
SET rewrite_split_inserts TO rewrite; -- error | rewrite | ignore
SET rewrite_omni_non_deterministic_functions TO rewrite; -- error | rewrite | ignore
```

The setting changes are applied immediately. These overrides allow canary testing before persisting them in `pgdog.toml`.
Expand Down
Loading