You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
When adding a value to an enum, the db diff algorithm renames the type, creates a new one with the new value, and then alters all objects that depend on it to use the newly created enum, then deletes the old enum. However, it does not update functions that use the enum as a parameter type.
To Reproduce
Steps to reproduce the behavior:
Create an enum type, with a table and a function that both use it
createtypeenum_type_1as enum ('val1', 'val2');
createtabletable_with_enum (
enum_col enum_type_1
);
createfunctionfunction_with_enum(param1 enum_type_1) returns void as $$
begin
raise notice '%', param1;
end;
$$ language plpgsql;
Add a value to the enum:
altertype enum_type_1 add value 'val3';
Generate a diff, which will result in:
altertype"public"."enum_type_1" rename to "enum_type_1__old_version_to_be_dropped";
createtype "public"."enum_type_1"as enum ('val1', 'val2', 'val3');
altertable"public"."table_with_enum" alter column enum_col type "public"."enum_type_1" using enum_col::text::"public"."enum_type_1";
droptype"public"."enum_type_1__old_version_to_be_dropped";
However, the function is not re-created with the new enum, so trying to run the diff results in this error: ERROR: cannot drop type enum_type_1__old_version_to_be_dropped because other objects depend on it (SQLSTATE 2BP01) At statement 3: drop type "public"."enum_type_1__old_version_to_be_dropped" because the function is still using "public"."enum_type_1__old_version_to_be_dropped".
Expected behavior
After the new enum is created with the extra val, the function that depends on it should be recreated with the new enum:
altertype"public"."enum_type_1" rename to "enum_type_1__old_version_to_be_dropped";
createtype "public"."enum_type_1"as enum ('val1', 'val2', 'val3');
altertable"public"."table_with_enum" alter column enum_col type "public"."enum_type_1" using enum_col::text::"public"."enum_type_1";
dropfunction function_with_enum(param1 enum_type_1__old_version_to_be_dropped);
createfunctionfunction_with_enum(param1 enum_type_1) returns void as $$
begin
raise notice '%', param1;
end;
$$ language plpgsql;
droptype"public"."enum_type_1__old_version_to_be_dropped";
System information
Rerun the failing command with --create-ticket flag.
Update: It looks like when I use supabase db diff --use-pg-schema it generates the following migration:
ALTERTYPE"public"."enum_type_1" ADD VALUE 'val3';
Which works just fine.
I am assuming this is because support for ALTER TYPE was added to postgres and Migra just doesn't know about it, or it is trying to be backwards compatible or something like that.
It looks like as a workaround, I will just manually alter the migration files to use ALTER TYPE whenever I modify an enum that is used as a function parameter type.
Glad that you've found a workaround using --use-pg-schema. We will probably switch the default diff tool once pg-schema-diff ships better support for views.
Describe the bug
When adding a value to an enum, the db diff algorithm renames the type, creates a new one with the new value, and then alters all objects that depend on it to use the newly created enum, then deletes the old enum. However, it does not update functions that use the enum as a parameter type.
To Reproduce
Steps to reproduce the behavior:
ERROR: cannot drop type enum_type_1__old_version_to_be_dropped because other objects depend on it (SQLSTATE 2BP01) At statement 3: drop type "public"."enum_type_1__old_version_to_be_dropped"
because the function is still using"public"."enum_type_1__old_version_to_be_dropped"
.Expected behavior
After the new enum is created with the extra val, the function that depends on it should be recreated with the new enum:
System information
Rerun the failing command with
--create-ticket
flag.Additional context
I made sure to use migra with
supabase db diff --use-migra
. I have also filed a ticket with Migra hereThe text was updated successfully, but these errors were encountered: