mirror of
https://github.com/xataio/pgroll.git
synced 2024-10-05 17:47:59 +03:00
b9e781932d
Add a new sub-operation to the 'alter column' operation to drop `NOT NULL` constraints from columns. Currently, it is only possible to **set** `NOT NULL` constraints on columns but not remove them. The syntax for doing this is: ```json { "name": "16_set_nullable", "operations": [ { "alter_column": { "table": "reviews", "column": "review", "nullable": false, "up": "(SELECT CASE WHEN review IS NULL THEN product || ' is good' ELSE review END)", "down": "review" } } ] } ``` Setting `nullable: true` in the above migration would result in a validation error saying that removing `NOT NULL` constraints was not supported. This PR removes this restriction and allows `nullable: true` to remove an existing `NOT NULL` constraint. A migration to remove a `NOT NULL` constraint looks like: ```json { "name": "31_unset_not_null", "operations": [ { "alter_column": { "table": "posts", "column": "title", "nullable": true, "up": "title", "down": "(SELECT CASE WHEN title IS NULL THEN 'placeholder title' ELSE title END)" } } ] } ``` The differences between adding and removing a `NOT NULL` constraint are: * `nullable: true` vs `nullable: false` * The roles of `up` and `down` SQL are reversed; `down` now needs to rewrite any `NULL`s to meet the `NOT NULL` constraint on the old column. `up` defaults to a simple copy of the data from the old column to the new. Fixes #223
15 lines
294 B
JSON
15 lines
294 B
JSON
{
|
|
"name": "31_unset_not_null",
|
|
"operations": [
|
|
{
|
|
"alter_column": {
|
|
"table": "posts",
|
|
"column": "title",
|
|
"nullable": true,
|
|
"up": "title",
|
|
"down": "(SELECT CASE WHEN title IS NULL THEN 'placeholder title' ELSE title END)"
|
|
}
|
|
}
|
|
]
|
|
}
|