Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

SeaORM column "owner_id" referenced in foreign key constraint does not exist

I have an error with SeaORM, Rust and Postgres, I’m new in the world of the databases so sorry if this is a newbie question. I wanted to refresh the migrations with sea-orm-cli, but i got this error Execution Error: error returned from database: column "owner_id" referenced in foreign key constraint does not exist.

the full output of the command is this one:

Running `cargo run --manifest-path ./migration/Cargo.toml -- fresh -u postgres://postgres@localhost:5432/task_manager`
    Finished dev [unoptimized + debuginfo] target(s) in 0.54s
     Running `migration/target/debug/migration fresh -u 'postgres://postgres@localhost:5432/task_manager'`
Dropping table 'seaql_migrations'
Table 'seaql_migrations' has been dropped
Dropping table 'owner'
Table 'owner' has been dropped
Dropping all types
Applying all pending migrations
Applying migration 'm20221106_182043_create_owner_table'
Migration 'm20221106_182043_create_owner_table' has been applied
Applying migration 'm20221106_182552_create_comment_table'
Execution Error: error returned from database: column "owner_id" referenced in foreign key constraint does not exist

I thought it could be some problem with my code in the file called m20221106_182552_create_comment_table.rs, but I took a look to it and it doesn’t seems to be a problem.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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())
                    .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,
}

I was following this official tutorial from the SeaQL team but I don’t know if there is something outdated, hope you can help me with this.

>Solution :

You are missing the OwnerId column in the comments table. You have to create it first and then create the FK constraint on it.

See in the tutorial there is

                .col(ColumnDef::new(Chef::BakeryId).integer().not_null())
                .foreign_key(
                    ForeignKey::create()
                        .name("fk-chef-bakery_id")
                        .from(Chef::Table, Chef::BakeryId)
                        .to(Bakery::Table, Bakery::Id),
                )
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading