For some breaking changes, refer to official migration docs from drizzle. Apart from that, just a perfect and precise tutorial for drizzle. Kudos Kyle.
incredible. ❤ one video packs a ton of information. worth the one hour spent listening and grasping the concepts of not just drizzle but also postgres and sql database essentials.
Thanks for the video. Drizzle is indeed pretty nice, but their documentation could be improved. Tried to set it up with SQLite and it took me a long time to figure out, and the help of a blog that someone who encountered the same issues as I did fortunately wrote. They should be clearer on the different steps, where to put what code (which files and dicrectory) and such. The whole system of migrations is also still pretty confusing so far.
Let me save someone some time if you're getting an error like [PostgresError: unrecognized configuration parameter 'schema'] when trying to migrate. I copied and pasted my DATABASE_URL with the '?schema=public' param at the end. Check yours before diving too deep. :) Thanks for the video Kyle!
Great tutorial and very well explained! :) Could I request a follow-up video on how to handle migration sync between local dev environment and the production environment?
28:18 Thank you again for sharing your knowledge and efforts, Kyle. I have a question to ask while I'm watching this video. at 28:18 about the foreign key, // One way of handle a foreign key was like... export const UserPreferencesTable = pgTable("userPrefenrences", { id: uuid("id").primaryKey().defaultRandon(), userId: uuid("userId").references() }); // Another way of handle a foreign key... export const PostCategoryTable = pgTable("postCategory", { id: uuid("postId").references(() => PostCategoryTable.id).notNull(), categoryId: uuid("categoryId").references(() => CategoryTable.id).notNull() }, table => { pk: primaryKey({ columns: [table.postId, table.categoryId]}) }); Assuming, first one just refers to a foreign column, while second one is creating actual foreign key for foreign key, am I right?
Just sharing, if you or anyone of you are deleting a typographical error. You can hold ctrl (in Windows) or hold option (in Mac) then press backspace to delete the whole string instead of manually backspacing in deleting each character, just something that will help a lot (or not) in expediting the entire coding experience. Great video btw :salute:
So in in Rails, I get these commands from the get-go: db:create, db:migrate db:rollback, db:drop etc and they do exactly as you imagine. Why doesn't drizzle ship them directly but instead require to write them myself?
I mean sure you should learn SQL first, but then if you want to prevent SQL injections manually or ignore type checking and find out whether it works or not during runtime, or want to manually review all the code for DB migrations to other DB (e.g. mysql to postgresql) you can use raw SQL
what about error handeling with custom error messages
3 หลายเดือนก่อน
I created a repo following this tutorial and using neon for postgres Github rogercastaneda/drizzle-neon-pg-example. I also have the same implementation using sqlite (with turso) Github rogercastaneda/drizzle-turso-example
But how do i update a table (eg. addidng a new column) without deleting the existing data in that? So far everytime I've done that the data gets the deleted and the drizzle doc doesn't include any information about how this would be done? Any suggestions are appreciated
30:13 that’s why you should not use orms. Let’s think we have a production database, we want to add a new column which can not be a null. What are we going to do? Deleting whole table? This must be fixed. The same issue was in Strapi 2 years ago and my cluster died because of the db migration.
@@QuangPham-tj7kq actually you could struggle with this version too. defineCofig's configuration has been changed in the new version of drizzle-kit. Look at the documentation.
Dear Kyle, This Tutorial is fine. The challenge I always have with you, is that you talk too fast. Now, can you help me check out how to set up a project that will use Postgres, Drizzle and SvelteKit? You are to show how to connect these 3, and get them working together. Regards.
For a small end of the year project in IT study, is it useful to use migration? I'm still struggling to understand the whole scope of migration in database
It has a few bugs. It replaces keys, changes the names of primary keys, and what's worse, by generating too long names it causes errors and does not add indexes correctly. It is incompatible with what Workbench generates.
Great tutorial, thank you. but, I am getting this error TypeError: Cannot read properties of undefined (reading 'Symbol(drizzle:Columns)') when I am trying to insert to a table. The migrate works perfectly fine, so can connect to the db. Here is the code. import "dotenv/config" import { db } from "./drizzle/db" import { tBrand } from "./drizzle/schema" async function main() { await db.insert(tBrand).values({ name: 'Andrew'}) } main() The db is a neon postgres db. thanks
I'm watching this tutorial and nothing works. in drizzle.config.ts db credentials connectionString not on type. driver is not assignable to type '"aws-data-api". aws-data-api is the only option I'm given for driver. What the hell is going on.
Prisma schemas are so easy to read and understand. The prisma extensions also formats them pretty neat 😂. A sql schema is easier to read than drizzle imo
It seems that they changed the configuration object. This is from the official documentation: import { defineConfig } from 'drizzle-kit' export default defineConfig({ schema: "./schema.ts", dialect: 'postgresql', dbCredentials: { url: process.env.DB_URL, }, verbose: true, strict: true, })
OMG...how many wrappers do you need to simply access a SQL database ? These are solutions looking for a problem that does not exist :-( In my use cases I just load a million data records into my app. The browser and OS can handle that...
(mentioned the code missing below) I think you are missing a step when you set relation between many to many relation fir you have to set many(PostCategory) then you have to create another relation which is one(Post) one(Category) with reference and fieldId to connect each other with PostCategoryTable. I am talking about this step you are missing export const usersToGroupsRelations = relations(postToCategory, ({ one }) => ({ group: one(PostTable, { fields: [postToCategory.postId], references: [PostTable.id], }), user: one(CategoryTable, { fields: [postToCategory.categoryId], references: [CategoryTable.id], }), }));
u know what else allows me to avoid writing raw sql queries? fookin any LLM bro, u said the query and it gives u the sql. fk these orms. raw sql is what runs im the background either way
elite video. 60-minutes, no fluff, no ads, well organized, from the documentation. greatest hair in the business.
60 minutes, and every minute is right on point, no water. Thank you for the video!
For some breaking changes, refer to official migration docs from drizzle. Apart from that, just a perfect and precise tutorial for drizzle. Kudos Kyle.
OMG bro i was knee deep in a real time data migration in a project for work and drizzle is the perfect solution.
incredible. ❤
one video packs a ton of information. worth the one hour spent listening and grasping the concepts of not just drizzle but also postgres and sql database essentials.
I swear you read my mind, just in time! Thanks Kyle
Thanks for the video. Drizzle is indeed pretty nice, but their documentation could be improved. Tried to set it up with SQLite and it took me a long time to figure out, and the help of a blog that someone who encountered the same issues as I did fortunately wrote. They should be clearer on the different steps, where to put what code (which files and dicrectory) and such. The whole system of migrations is also still pretty confusing so far.
You should add a pull request to improve it
Let me save someone some time if you're getting an error like [PostgresError: unrecognized configuration parameter 'schema'] when trying to migrate. I copied and pasted my DATABASE_URL with the '?schema=public' param at the end. Check yours before diving too deep. :) Thanks for the video Kyle!
very insightful video on Drizzle ORM. I would love to see a course on a full blown project with Next.js and Drizzle ...
Thank you, I was just looking for a Drizzle course, it seems like an orm that is currently very efficient
🙏✨Maybe, you should make a database tutorial series on backend.
the timing of this video and my learning thirst for DRIZZLE is right on time.... thanks
Drizzle such a good ORM
I listened only 15 seconds of the video, but exactly know that till the end of the day, my bd successfully deployed to the Vercel using Drizzle)
Great tutorial and very well explained! :) Could I request a follow-up video on how to handle migration sync between local dev environment and the production environment?
I waited this for so long and now it is here! Thanks Kyle!
Can we get the link for the notion notes please ?
Thank you, Kyle.
28:18
Thank you again for sharing your knowledge and efforts, Kyle.
I have a question to ask while I'm watching this video.
at 28:18
about the foreign key,
// One way of handle a foreign key was like...
export const UserPreferencesTable = pgTable("userPrefenrences", {
id: uuid("id").primaryKey().defaultRandon(),
userId: uuid("userId").references()
});
// Another way of handle a foreign key...
export const PostCategoryTable = pgTable("postCategory", {
id: uuid("postId").references(() => PostCategoryTable.id).notNull(),
categoryId: uuid("categoryId").references(() => CategoryTable.id).notNull()
}, table => {
pk: primaryKey({ columns: [table.postId, table.categoryId]})
});
Assuming, first one just refers to a foreign column, while second one is creating actual foreign key for foreign key, am I right?
Crazy timing bro, just started a project using drizzle a couple of weeks back
Really nice video mate. Hope you cover the dynamic query in upcoming video 🎉🎉❤
Just sharing, if you or anyone of you are deleting a typographical error. You can hold ctrl (in Windows) or hold option (in Mac) then press backspace to delete the whole string instead of manually backspacing in deleting each character, just something that will help a lot (or not) in expediting the entire coding experience.
Great video btw :salute:
So in in Rails, I get these commands from the get-go: db:create, db:migrate db:rollback, db:drop etc and they do exactly as you imagine. Why doesn't drizzle ship them directly but instead require to write them myself?
Developers will do everything but learn SQL
And CSS
nmp. Should have made it intuitive from the start
@@chudchadanstud even still ORMs are not a solution then it's a bandage
I mean sure you should learn SQL first, but then if you want to prevent SQL injections manually or ignore type checking and find out whether it works or not during runtime, or want to manually review all the code for DB migrations to other DB (e.g. mysql to postgresql) you can use raw SQL
go cry in a corner
Hey Kyle, can we get. video on how you plan your projects?
what about error handeling with custom error messages
I created a repo following this tutorial and using neon for postgres Github rogercastaneda/drizzle-neon-pg-example. I also have the same implementation using sqlite (with turso) Github rogercastaneda/drizzle-turso-example
Github link?
@@Shubham-yc6nz TH-cam does not allow me to post urls. Add the following to the Github url rogercastaneda/drizzle-neon-pg-example
Got everything working, thank you for this super tutorial, really clear!
Thanks!
Well i lot interest on in relationships, going back to use prisma
It would have been nice to also share the code
In 1 month, none of commands for drizzle work now, new version is out and so much has changed
awesome. as always
But how do i update a table (eg. addidng a new column) without deleting the existing data in that? So far everytime I've done that the data gets the deleted and the drizzle doc doesn't include any information about how this would be done? Any suggestions are appreciated
30:13 that’s why you should not use orms. Let’s think we have a production database, we want to add a new column which can not be a null. What are we going to do? Deleting whole table? This must be fixed. The same issue was in Strapi 2 years ago and my cluster died because of the db migration.
Newbie to relational db here, in this part what exactly should i do when i encounter this kind of issue?
Hands down the best drizzle video, they should pin it to their website lol. Amazing job!
Good tutorial. I won’t use it though as I will never utter the words ‘I am proficient in drizzle’.
it's an absolute nightmare, that returning function doesn't exist for mysql, I went through docs, cannot see a way to get at least "last insert id"
if you see pg is not found in driver, install drizzle-kit version 0.20.14
I struggled a lot
thanks for saving my day
@@QuangPham-tj7kq actually you could struggle with this version too. defineCofig's configuration has been changed in the new version of drizzle-kit. Look at the documentation.
@23:30 - is it still a 'serial' here if that's how you did it in the original table? loving the video though :)
Dear Kyle,
This Tutorial is fine.
The challenge I always have with you, is that you talk too fast.
Now, can you help me check out how to set up a project that will use Postgres, Drizzle and SvelteKit?
You are to show how to connect these 3, and get them working together.
Regards.
For a small end of the year project in IT study, is it useful to use migration? I'm still struggling to understand the whole scope of migration in database
It has a few bugs. It replaces keys, changes the names of primary keys, and what's worse, by generating too long names it causes errors and does not add indexes correctly. It is incompatible with what Workbench generates.
How can I push a new item to an array field? And how to remove one specific item?
is Drizzle ready for production?
is there no repo? :(
Anyone? Github
anyone know the difference between Postgres.JS and the node-posgres (pg) packages seems that node-posgres is used a lot more
Amazing content 🔥🔥
Where are the compiled notes Kyle?
can i do nested inserts like prisma in drizzle if yes how ? like i want to create user with posts
I'm yet to adopt this as i heard they truncate tables a lot during migration. Until it gets better i don't think I'll.
Laravel hardly truncates tables
Thanks for nice video
Thanks, bro, this is what I'm looking for.🙏
Please make an in-depth tutorial on tanstack router
Very nice video
Thanks Kyle, it helped me a lot!
If you are new to SQL, use Drizzle. If you know SQL already, use Prisma.
so wait, the 1:1 and 1:M references are the same?
Please share your notes, that would be helpful
Great tutorial, thank you. but, I am getting this error TypeError: Cannot read properties of undefined (reading 'Symbol(drizzle:Columns)') when I am trying to insert to a table. The migrate works perfectly fine, so can connect to the db. Here is the code.
import "dotenv/config"
import { db } from "./drizzle/db"
import { tBrand } from "./drizzle/schema"
async function main() {
await db.insert(tBrand).values({ name: 'Andrew'})
}
main()
The db is a neon postgres db. thanks
sorted.
I'm watching this tutorial and nothing works. in drizzle.config.ts db credentials connectionString not on type. driver is not assignable to type '"aws-data-api". aws-data-api is the only option I'm given for driver. What the hell is going on.
why do we need this prisma replacement though?
Wow i just completed watching prisma in 60mins
Is this code available somewhere?
Prisma's schema syntax is way superior to this. It also helps with relationships. Drizzle's schema files is a mess.
Prisma schemas are so easy to read and understand. The prisma extensions also formats them pretty neat 😂. A sql schema is easier to read than drizzle imo
yeah but it so slow
Nice
This is killing me Internal error: TypeError: Cannot read properties of undefined (reading 'referencedTable')
I had divided everything into three files, and that's why it doesn't work. If I put everything in a single schema file, it works perfectly.
is there a repo of your work here?
ORM = Object Relational Mapper
interesting, ts tells me "pg" is not a possible value for "driver"
It seems that they changed the configuration object. This is from the official documentation:
import { defineConfig } from 'drizzle-kit'
export default defineConfig({
schema: "./schema.ts",
dialect: 'postgresql',
dbCredentials: {
url: process.env.DB_URL,
},
verbose: true,
strict: true,
})
@@ognjenmarceta yess thats what I was using now, thanks for the answer tho :D
Eloquent -> Drizzle
3 months later and the video is already outdated...
The same general principles still apply. Grow the fck up and stop crying.
@@malcolmn.5222 Fk off, guy's just sharing accurate info. Yes, the video is outdated. That is helpful to know.
Im late, but why is it outdated?
I love you
OMG...how many wrappers do you need to simply access a SQL database ? These are solutions looking for a problem that does not exist :-(
In my use cases I just load a million data records into my app. The browser and OS can handle that...
drizzle drizzle :)
well it get complicated when you have a big database with alot of tables
🚨 🚨🚨🚨🚨🚨🚨🚨 BREAKING CHANGES 🚨🚨🚨🚨🚨🚨🚨🚨BREAKING CHANGES 🚨🚨🚨🚨🚨🚨🚨🚨BREAKING CHANGES 🚨🚨🚨🚨🚨🚨🚨🚨
Пушка!
First View🤩
f
just use firebase lol
skill issue ?
Kyle you were my inspiration for starting web dev, kyle please i need help debugging an error in my server code, i am using nodejs, please i need help
Give us YOUR note😒
Prisma is Good but Drizzle is Better
Devin AI can replace frontend developer anybody reply me pls
(mentioned the code missing below) I think you are missing a step when you set relation between many to many relation fir you have to set many(PostCategory) then you have to create another relation which is one(Post) one(Category) with reference and fieldId to connect each other with PostCategoryTable.
I am talking about this step you are missing
export const usersToGroupsRelations = relations(postToCategory, ({ one }) => ({
group: one(PostTable, {
fields: [postToCategory.postId],
references: [PostTable.id],
}),
user: one(CategoryTable, {
fields: [postToCategory.categoryId],
references: [CategoryTable.id],
}),
}));
but you just made an ecommerce tutorial with next.js/ prisma?!!
can we get something Auth + crud + nextjs?
Nextjs + Auth + CRUD with Drizzle and how to host it on the cloud 🎉
Drizzle , prisma what next
New drizzle.config.ts file -
import { config } from 'dotenv';
import { defineConfig } from 'drizzle-kit';
config({ path: '.env.local' });
export default defineConfig({
schema: './src/drizzle/schema.ts',
out: './src/drizzle/migrations',
dialect: 'postgresql',
dbCredentials: {
url: process.env.POSTGRES_URL!,
},
verbose: true,
strict: true,
});
can you give me link of your github repo where you have implemented this code , I am facing issue generating migration files - thanks
I didn't know sql hate is this strong💀
u know what else allows me to avoid writing raw sql queries? fookin any LLM bro, u said the query and it gives u the sql. fk these orms. raw sql is what runs im the background either way