SQL is good actually. Using your database system to define your data model along with all of its constraints is much better than just scribbling out some Rust/TypeScript/Go datatypes and shitting them out into a schema with a new database migration every fucking commit.
Your SQL application does not need to be portable. You don't need an over-engineered rube-goldberg solution where you can slot out OracleDB for SQLite for fucking CSV documents. Your code SHOULD be ANSI/ISO standard, but it just needs to run on PostgreSQL. PostgeSQL is portable.
Thanks for coming to my TED talk.
use a good ORM, like Efcore
Having strict typing and references for accessing your db is essential for refactoring jobs. Having to fucking query where a property is used in stored procedures is pure hell. Deploying new versions of your code with migrations is also so much easier than orchestrating sql execution alongside code execution.
Being able to write
dbcontext.Users.Where(x => x.IsAdmin).Select(x => x.UserName).ToListAsync() and execute exactly the sql you would write is awesome, and not have to fuck around with sql is great.
Yeah, this. I recently tried TypeORM for a personal project and, well, it works. But, god, I wish it was way more mature like EFCore.