SeaORM迁移报错:外键约束引用的owner_id列不存在
SeaORM迁移报错:column "owner_id" referenced in foreign key constraint does not exist
问题原因
你在创建comment表的迁移中,只定义了外键关联OwnerId,但没有在表结构里添加owner_id这个列,PostgreSQL找不到对应的列,所以抛出错误。
修复方案
在Table::create()的.col()方法链中,添加OwnerId列的定义,确保列的类型和owner表的id类型完全匹配(假设owner.id是整数类型)。
修改后的迁移代码
use sea_orm_migration::prelude::*; use super::m20221106_182043_create_owner_table::Owner; #[derive(DeriveMigrationName)] pub struct Migration; #[async_trait::async_trait] impl MigrationTrait for Migration { async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( Table::create() .table(Comment::Table) .if_not_exists() .col( ColumnDef::new(Comment::Id) .integer() .not_null() .auto_increment() .primary_key(), ) .col(ColumnDef::new(Comment::Url).string().not_null()) .col(ColumnDef::new(Comment::Body).string().not_null()) .col(ColumnDef::new(Comment::IssueUrl).string().not_null()) .col(ColumnDef::new(Comment::CreatedAt).string()) .col(ColumnDef::new(Comment::UpdatedAt).string()) // 新增:定义owner_id列,类型与owner表的id一致 .col(ColumnDef::new(Comment::OwnerId).integer().not_null()) .foreign_key( ForeignKey::create() .name("fk-comment-owner_id") .from(Comment::Table, Comment::OwnerId) .to(Owner::Table, Owner::Id), ) .to_owned(), ) .await } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .drop_table(Table::drop().table(Comment::Table).to_owned()) .await } } #[derive(Iden)] pub enum Comment { Table, Id, Url, Body, IssueUrl, CreatedAt, UpdatedAt, OwnerId, }
额外注意
- 如果
owner表的id是uuid或其他类型,需要同步修改ColumnDef的类型(比如.uuid()),否则会因为类型不匹配触发新的报错。 - 执行
sea-orm-cli migrate fresh前,先确认所有外键引用的列都已在表中定义。
内容的提问来源于stack exchange,提问作者FRostri
相关产品推荐
相关产品推荐

