sea-orm icon indicating copy to clipboard operation
sea-orm copied to clipboard

Migration fresh command cannot drop types with Postgresql

Open vdebergue opened this issue 1 year ago • 2 comments

Description

Steps to Reproduce

  1. Write a migration that enables citext on postgresql:
CREATE EXTENSION IF NOT EXISTS citext;
  1. Apply the migration on a clean postgresql db
  2. Run the command migration command fresh to clean the database cargo run -- fresh
  3. The command returns an error:
...
Dropping all types
Dropping type 'citext'
Execution Error: error returned from database: cannot drop type citext because extension citext requires it

Expected Behavior

The fresh command executes without error. Either it deletes the extension or it only deletes types that can be deleted or it continues without an error

Actual Behavior

Command runs with an error

See: https://github.com/SeaQL/sea-orm/blob/master/sea-orm-migration/src/migrator.rs#L330-L342

Reproduces How Often

Always

Workarounds

  • Don't use citext extension
  • Avoid using the fresh command and use other commands like refresh and write my own down script to drop the citext extension before hand

Reproducible Example

  • Start a postgresql database
  • Execute manually: CREATE EXTENSION IF NOT EXISTS citext;
  • Run the command sea-orm-cli migrate fresh

Versions

sea-orm = "0.12"

postgresql = 16

vdebergue avatar May 07 '24 16:05 vdebergue

Same. Should drop extensions before dropping types.

cpunion avatar Dec 16 '24 08:12 cpunion

I got the same issue with the vector extension, I found a workaround :

In the down function :

async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        let tx = manager.get_connection().begin().await?;

        tx.execute(sea_orm::Statement::from_string(
            manager.get_database_backend(),
            "DROP EXTENSION vector CASCADE",
        ))
        .await?;

        tx.commit().await?;

        // my other stuff

        Ok(())
}

And then I use sea-orm-cli migrate refresh, I did not manage to make it work with sea-orm-cli migrate fresh.

cimandef avatar Apr 14 '25 14:04 cimandef