gpt4 book ai didi

ruby-on-rails - Rails ActiveRecord 迁移以使用 'NOT VALID' 参数添加外键

转载 作者:行者123 更新时间:2023-12-02 16:55:31 25 4
gpt4 key购买 nike

add_foreign_key 可以向 ALTER TABLE 命令添加“无效”参数吗? (Postgres,如果重要的话)

我在两个非常大的表之间有一个外键。我需要将 CASCADE DELETE 添加到 key 中。 Postgres 似乎不支持将级联添加到现有外键。解决方案是删除 key ,并添加一个具有级联的新 key 。

很简单...除了检查约束需要很长时间。我不确定在那次检查期间是否有任何锁定,但实际上,我只是想跳过它。在我删除约束之前数据是有效的......稍后它会有效。

Postgres 通过 ALTER TABLE ADD CONSTRAINT ... NOT VALID 支持这一点。 (这意味着“跳过验证”,即使听起来您是在说它无效。:shrug:)

那么,我可以让 add_foreign_key 不验证吗?

最佳答案

来自手册:ActiveRecord::ConnectionAdapters::SchemaStatements#add_foreign_key

:validate

(Postgres only) Specify whether or not the constraint should be validated. Defaults to true.

因此,要在不停机的情况下向现有外键约束添加级联删除:

remove_foreign_key :address, column: :user_id
add_foreign_key :address, :user_id, :users, on_delete: :cascade, validate: false

我最初使用 add_foreign_key "NOT VALID" 搜索这个答案,但我在文档、StackOverflow 等中没有找到有用的结果。希望这个问题和答案能帮助我再次找到这个答案下次我需要它。

关于ruby-on-rails - Rails ActiveRecord 迁移以使用 'NOT VALID' 参数添加外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56527693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com