Insert or Update: Error undefined is not an object (evaluating 'col.name')

Hi, I'm trying to implement Insert or Update
export async function insertOrUpdateUser(user: UserInsert) {
const db = await getDatabase();

return await db
.insert(users)
.values(user)
.onConflictDoUpdate({
target: users.id,
set: user
});
}
export async function insertOrUpdateUser(user: UserInsert) {
const db = await getDatabase();

return await db
.insert(users)
.values(user)
.onConflictDoUpdate({
target: users.id,
set: user
});
}
I get this error:
TypeError: undefined is not an object (evaluating 'col.name')
at /app/node_modules/drizzle-orm/pg-core/dialect.js:74:41
at buildUpdateSet (/app/node_modules/drizzle-orm/pg-core/dialect.js:72:6)
at onConflictDoUpdate (/app/node_modules/drizzle-orm/pg-core/query-builders/insert.js:57:19)
at /app/src/db/schemas/users.ts:43:15
at processTicksAndRejections (:61:76)
TypeError: undefined is not an object (evaluating 'col.name')
at /app/node_modules/drizzle-orm/pg-core/dialect.js:74:41
at buildUpdateSet (/app/node_modules/drizzle-orm/pg-core/dialect.js:72:6)
at onConflictDoUpdate (/app/node_modules/drizzle-orm/pg-core/query-builders/insert.js:57:19)
at /app/src/db/schemas/users.ts:43:15
at processTicksAndRejections (:61:76)
Any idea what it means ?
15 Replies
Pascal Mattes
Pascal Mattes•2y ago
Where do you get "users" from?
Cyber Grandma
Cyber GrandmaOP•2y ago
users is my table name
export const users = pgTable('users', {...
export const users = pgTable('users', {...
Pascal Mattes
Pascal Mattes•2y ago
Okay so you do import users in the file where the function "insertOrUpdateUser" is?
Cyber Grandma
Cyber GrandmaOP•2y ago
Yes, it's in the same exact file There is no TS Error at transpile time, the errors comes from within drizzle's module
Pascal Mattes
Pascal Mattes•2y ago
Okay. We are doing this the exact same way and for us it is working. Thats why i was asking šŸ™‚
Cyber Grandma
Cyber GrandmaOP•2y ago
mmh If I do that:
return await db
.insert(users)
.values(user)
.onConflictDoUpdate({
target: users.id,
set: {
firstName: user.firstName,
middleName: user.middleName,
lastName: user.lastName,
fullName: user.fullName,
.....
},
});
return await db
.insert(users)
.values(user)
.onConflictDoUpdate({
target: users.id,
set: {
firstName: user.firstName,
middleName: user.middleName,
lastName: user.lastName,
fullName: user.fullName,
.....
},
});
It works, that's puzzling
Pascal Mattes
Pascal Mattes•2y ago
What version of drizzle-orm are you using?
Cyber Grandma
Cyber GrandmaOP•2y ago
"drizzle-orm": "^0.29.0",
Oh, I think I know why
Pascal Mattes
Pascal Mattes•2y ago
šŸ™‚ I think there has to be a problem with your user object then
Cyber Grandma
Cyber GrandmaOP•2y ago
My user object has additional properties than columns in the database And I think drizzle doesn't handle that Thanks for your help ā¤ļø
Pascal Mattes
Pascal Mattes•2y ago
Yes that might be the case. We are using an object which only has the properties drizzle expects
Cyber Grandma
Cyber GrandmaOP•2y ago
I'll stick with this non-elegant solution while i'm working on integrating all user properties
Pascal Mattes
Pascal Mattes•2y ago
You're welcome šŸ™‚
Cyber Grandma
Cyber GrandmaOP•2y ago
Have a great rest of your day ;)
Pascal Mattes
Pascal Mattes•2y ago
You too!

Did you find this page helpful?