Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

We used SQLite at my company to allow users to write SQL queries against their db. When we hit the limit of it, we had to switch to Postgres. That migration is quite difficult and I wish we had used Postgres from the start. 20/20 hindsight but that was my first thought.


Did you use WAL?


For anyone wondering why: I was working on a hobby project a few years ago that had to do a lot of inserts in a SQLite DB. Performance was ok, but it wasn't great either. Turning on WAL greatly sped up performance. In both cases just a single thread was writing to the database.

With the WAL turned off (the default), when you start a transaction SQLite will duplicate the data into a new file, change the original file, and delete the backup file when the transaction is committed. With WAL turned on it will write each change to a journal file, and merge this into the main file periodically (by default when the change file grows to 1000 entries) - so only a single write is needed.


Were you using an ORM? I ask because most people use database switching as a selling point for using an ORM. I'm rather indifferent on the matter, but I'm curious.


Ha! This selling point is just one in a miserable litany of poor reasons to use an ORM - you absolutely cannot simply switch between databases without doing some work to ensure that the data is migrated correctly and the SQL statements translate properly.


Yeah, but verification of correctness is much less work than implementation.


As an alternative to an ORM, there is another great abstraction layer that works across a large number of databases. It's called SQL!


Until you realize that not even booleans are standardized between SQL dialects...


That's true in theory, but unfortunately you can still run in to issues when different databases support different parts of SQL, and the db you're migrating from has different features than the one you're migrating to.


There are a huge number of differences in the SQL supported by different engines. You can't just switch from one to another, unless you're only using a small subset of SQL to begin with.


How do you insert a row and get the automatically set Id set by the database portably? That’s a standard create operation.


You still have to migrate the data. I faced the same kind of dilemma, but with MySQL, and kind of noped out when I got to stuff like [0].

[0] https://stackoverflow.com/a/87531/1210797


An ORM does indeed force you to write lowest common denominator code but I wouldn't rely on that.


Do you have any good articles or posts you can think of for managing the migration, in case there're some lifesavers out there.


Not an article, but I've used pgloader for this purpose in the past:

https://pgloader.readthedocs.io/en/latest/

Great tool, I can't recommend it enough.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: