# Supavisor tenant seed — run once at container boot, between migrate and # server (see the supavisor service `command` in docker-compose.prod.yml). # Adapted from supabase/docker's pooler.exs: creates the tenant whose # external_id external clients carry in their username # (postgres.), with the pgbouncer manager user and the # get_auth auth_query (volumes/db/pooler.sql) resolving all other roles. {:ok, _} = Application.ensure_all_started(:supavisor) {:ok, version} = case Supavisor.Repo.query!("select version()") do %{rows: [[ver]]} -> Supavisor.Helpers.parse_pg_version(ver) _ -> nil end params = %{ "external_id" => System.get_env("POOLER_TENANT_ID"), "db_host" => System.get_env("POSTGRES_HOST") || "db", "db_port" => System.get_env("POSTGRES_PORT"), "db_database" => System.get_env("POSTGRES_DB"), "require_user" => false, "auth_query" => "SELECT * FROM pgbouncer.get_auth($1)", "default_max_clients" => System.get_env("POOLER_MAX_CLIENT_CONN"), "default_pool_size" => System.get_env("POOLER_DEFAULT_POOL_SIZE"), "default_parameter_status" => %{"server_version" => version}, "users" => [%{ "db_user" => "pgbouncer", "db_password" => System.get_env("POSTGRES_PASSWORD"), "mode_type" => System.get_env("POOLER_POOL_MODE"), "pool_size" => System.get_env("POOLER_DEFAULT_POOL_SIZE"), "is_manager" => true }] } if !Supavisor.Tenants.get_tenant_by_external_id(params["external_id"]) do {:ok, _} = Supavisor.Tenants.create_tenant(params) end