Ecto Plugin — Uni

def list_users_raw do prefix = UniEcto.Plugin.get_tenant_prefix() Repo.query("SELECT * FROM #prefix.users") end What if your Settings table is global and Orders is per-tenant?

| Library | Strategy | Best For | | :--- | :--- | :--- | | | PostgreSQL Schemas | Most Elixir SaaS apps (Gold standard) | | Uni Ecto Plugin | Custom (Configurable) | Developers needing fine-grained control | | Apartment (Rails) | Row-level (Legacy) | Not recommended for Elixir | | Ash Framework Multi-Tenancy | Resource Layer | Large, complex domain models | uni ecto plugin

If you are an Elixir developer using Phoenix Framework and Ecto, you have likely heard the siren call of the . def list_users_raw do prefix = UniEcto

The uni_ecto_plugin provides a migration helper: otp_app: :my_app use UniEcto.Plugin

defmodule MyApp.Repo do use Ecto.Repo, otp_app: :my_app use UniEcto.Plugin, prefix_key: :tenant_prefix def all_tenants do # Could be a DB query or a static list ["public", "tenant_customer_a", "tenant_customer_b"] end end Step 3: Generate the Tenant Migrations The plugin usually provides a generator:

Alternatively, use the plugin's CLI: