【问题标题】:Rails ActiveRecord migration to add foreign key with 'NOT VALID' parameterRails ActiveRecord 迁移以添加带有“NOT VALID”参数的外键
【发布时间】:2019-06-10 13:47:22
【问题描述】:

add_foreign_key 可以在 ALTER TABLE 命令中添加“NOT VALID”参数吗? (Postgres,如果重要的话)

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails activerecord foreign-keys


    【解决方案1】:

    RTFM:ActiveRecord::ConnectionAdapters::SchemaStatements#add_foreign_key

    :验证

    (仅限 Postgres)指定是否应验证约束。默认为真。

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

    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 等中没有找到有用的结果。希望这个问题和答案能帮助我在下次需要时再次找到该答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多