parent
be1ef711ed
commit
3d2a3e5782
1 changed files with 28 additions and 0 deletions
|
@ -182,6 +182,34 @@ class MyMigration < ActiveRecord::Migration
|
|||
end
|
||||
```
|
||||
|
||||
## Adding foreign-key constraints
|
||||
|
||||
When adding a foreign-key constraint to either an existing or new
|
||||
column remember to also add a index on the column.
|
||||
|
||||
This is _required_ if the foreign-key constraint specifies
|
||||
`ON DELETE CASCADE` or `ON DELETE SET NULL` behavior. On a cascading
|
||||
delete, the [corresponding record needs to be retrieved using an
|
||||
index](https://www.cybertec-postgresql.com/en/postgresql-indexes-and-foreign-keys/)
|
||||
(otherwise, we'd need to scan the whole table) for subsequent update or
|
||||
deletion.
|
||||
|
||||
Here's an example where we add a new column with a foreign key
|
||||
constraint. Note it includes `index: true` to create an index for it.
|
||||
|
||||
```ruby
|
||||
class Migration < ActiveRecord::Migration
|
||||
|
||||
def change
|
||||
add_reference :model, :other_model, index: true, foreign_key: { on_delete: :cascade }
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
When adding a foreign-key constraint to an existing column, we
|
||||
have to employ `add_concurrent_foreign_key` and `add_concurrent_index`
|
||||
instead of `add_reference`.
|
||||
|
||||
## Adding Columns With Default Values
|
||||
|
||||
When adding columns with default values you must use the method
|
||||
|
|
Loading…
Reference in a new issue