News for hackers. Stuff that matters.
Re:Just use Postgres for everything by efficax on Saturday December 10, 2022 @01:00PM (#33934888)
you can use postgres generated columns to keep the index field automatically consistent. https://www.postgresql.org/docs/current/ddl-generated-column...
Re:Just use Postgres for everything by VWWHFSfQ on Saturday December 10, 2022 @01:06PM (#33934961)
I've seen this kind of thing a lot before and I'm saying that it's almost never needed. All you're doing is building your own bespoke indexing system on top of a database that is doing it (much better) already.
Re:Just use Postgres for everything by giantrobot on Saturday December 10, 2022 @02:36PM (#33935975)
You're augmenting the indexing system. By using hashes you get a column with fixed predictable size. If the average size of your large strings is larger than 16 bytes (or 32 bytes if you store the hex string) you'll get more rows per memory page. If you've got many millions of rows the savings adds up. A little bit of savings let's a smaller DB instance go farther.
Re:Just use Postgres for everything by jamal-kumar on Saturday December 10, 2022 @04:53PM (#33937254)
Oh wow that makes perfect sense, I see exactly why this solution would work better now, very good point.

The other thing is that if you're inserting your emails in without running some ToLower() function on them first in the validation, you're probably making a bit of a mistake. There's some other discussion in the thread about this.

Re:Just use Postgres for everything by giantrobot on Saturday December 10, 2022 @07:11PM (#33938484)
You should definitely normalize e-mails before hashing or doing any comparison on the back end. Especially if you've had a stage during account creation where you verified delivery of that normalized address. When you take in an address later you normalize the input and compare it to your stored value (that itself was normalized before storage).
Re:Just use Postgres for everything by indymike on Saturday December 10, 2022 @04:00PM (#33936745)
This is using the DB as designed. Not a bespoke solution.