In Postgres, users can define case insensitive column by using the :citext
type/extension. Postgres documentation
CREATE TABLE users (
email CITEXT PRIMARY KEY,
pass TEXT NOT NULL
);
Elixir, Postgres
In your migration: file for an Elixir application, you could add the following to make the email case-sensitiveness.
execute "CREATE EXTENSION IF NOT EXISTS citext"
create table(:users) do
...
add :email, :citext
...
end
This means your Postgres DB will perform a downcase()
If for some reason your database does not support case insensitive columns, you can explicitly downcase values before inserting/updating them:
# Using elixir and ecto
cast(data, params, [:email])
|> update_change(:email, &String.downcase/1)
|> unique_constraint(:email)