RUNNb
RUNNb
DTDrizzle Team
Created by RUNNb on 1/20/2025 in #help
Constraint does not exist when running migration
This is happening because one of my tables was looking like this:
export const profiles = pgTable('profiles', {
userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' });
... rest of the columns
});
export const profiles = pgTable('profiles', {
userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' });
... rest of the columns
});
Then on a new migration I've added the onUpdate
export const profiles = pgTable('profiles', {
userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade', onUpdate: 'cascade' });
... rest of the columns
});
export const profiles = pgTable('profiles', {
userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade', onUpdate: 'cascade' });
... rest of the columns
});
This change made the migration file to have to alter table to change the constraint
DO $$ BEGIN
ALTER TABLE "profiles" ADD CONSTRAINT "profiles_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE cascade;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
DO $$ BEGIN
ALTER TABLE "profiles" ADD CONSTRAINT "profiles_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE cascade ON UPDATE cascade;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
And now when I run this specific migration I'm facing the error: "Constraint 'profiles_user_id_users_id_fk' of relation "profiles" does not exist" Any tips how to solve this?
2 replies
DTDrizzle Team
Created by RUNNb on 11/10/2024 in #help
Rollback not happening on tx.rollback() [PG DRIVER]
export async function createRestaurantMenuMutation({
label,
type,
availabilityDate,
categories,
}: CreateRestaurantMenuProps) {
let error: string | undefined;

try {
await db.transaction(async (tx) => {
const createMenu = await db
.insert(menus)
.values(restaurantMenuParse.data)
.returning()
.execute();

if (!createMenu[0]) {
error = "Não foi possível criar o menu.";
tx.rollback();
}

categories.forEach(async (category) => {
const categoryParse =
await createMenuCategorySchema.safeParseAsync({
...category,
});

if (!categoryParse.success) {
console.error(
"Error parsing category: ",
categoryParse.error,
);
error = "Existe um erro nos dados inseridos.";
tx.rollback();
}

const createCategory = await tx
.insert(menuCategories)
.values({
name: category.name,
menuId: createMenu[0]!.id,
})
.returning()
.execute();

if (!createCategory[0]) {
error = `Ocorreu um erro a criar a categoria ${category.name}. `;
tx.rollback();
}
});
return {
...createMenu[0],
categories,
};
});
} catch (e) {
console.log("Exception creating menu: ", { e });
throw new Error(error);
}
}
export async function createRestaurantMenuMutation({
label,
type,
availabilityDate,
categories,
}: CreateRestaurantMenuProps) {
let error: string | undefined;

try {
await db.transaction(async (tx) => {
const createMenu = await db
.insert(menus)
.values(restaurantMenuParse.data)
.returning()
.execute();

if (!createMenu[0]) {
error = "Não foi possível criar o menu.";
tx.rollback();
}

categories.forEach(async (category) => {
const categoryParse =
await createMenuCategorySchema.safeParseAsync({
...category,
});

if (!categoryParse.success) {
console.error(
"Error parsing category: ",
categoryParse.error,
);
error = "Existe um erro nos dados inseridos.";
tx.rollback();
}

const createCategory = await tx
.insert(menuCategories)
.values({
name: category.name,
menuId: createMenu[0]!.id,
})
.returning()
.execute();

if (!createCategory[0]) {
error = `Ocorreu um erro a criar a categoria ${category.name}. `;
tx.rollback();
}
});
return {
...createMenu[0],
categories,
};
});
} catch (e) {
console.log("Exception creating menu: ", { e });
throw new Error(error);
}
}
I've tried a couple different approachs (throwing errors etc, keeps the same issue)
7 replies