Ecto migration isn't creating schema in postgres

config :avocado, Avocado.Repo,
  migration_default_prefix: "avocadoz"
The database for Avocado.Repo has been created
[info] == Running 20190115121352 Avocado.Repo.Migrations.CreateUsers.change/0 forward
[info] create table avocadoz.users
** (Postgrex.Error) ERROR 3F000 (invalid_schema_name) schema "avocadoz" does not exist
    (ecto_sql) lib/ecto/adapters/sql.ex:620: Ecto.Adapters.SQL.raise_sql_call_error/1
    (elixir) lib/enum.ex:1314: Enum."-map/2-lists^map/1-0-"/2
    (ecto_sql) lib/ecto/adapters/sql.ex:707: Ecto.Adapters.SQL.execute_ddl/4
    (ecto_sql) lib/ecto/migration/runner.ex:301: Ecto.Migration.Runner.log_and_execute_ddl/3
    (ecto_sql) lib/ecto/migration/runner.ex:110: anonymous fn/2 in Ecto.Migration.Runner.flush/0
    (elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
    (ecto_sql) lib/ecto/migration/runner.ex:108: Ecto.Migration.Runner.flush/0
    (stdlib) timer.erl:166: :timer.tc/1
    (ecto_sql) lib/ecto/migration/runner.ex:26: Ecto.Migration.Runner.run/7
    (ecto_sql) lib/ecto/migrator.ex:211: Ecto.Migrator.attempt/7
    (ecto_sql) lib/ecto/migrator.ex:113: anonymous fn/4 in Ecto.Migrator.do_up/4
    (ecto_sql) lib/ecto/migrator.ex:193: anonymous fn/3 in Ecto.Migrator.run_maybe_in_transaction/5
    (ecto_sql) lib/ecto/adapters/sql.ex:814: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4
    (db_connection) lib/db_connection.ex:1349: DBConnection.run_transaction/4
    (ecto_sql) lib/ecto/migrator.ex:192: Ecto.Migrator.run_maybe_in_transaction/5
    (elixir) lib/task/supervised.ex:89: Task.Supervised.do_apply/2
    (elixir) lib/task/supervised.ex:38: Task.Supervised.reply/5
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3

I tried execute "create schema avocadoz;" and got:

** (RuntimeError) could not find migration runner process for #PID<0.91.0>
    (ecto_sql) lib/ecto/migration/runner.ex:288: Ecto.Migration.Runner.runner/0
    (ecto_sql) lib/ecto/migration/runner.ex:122: Ecto.Migration.Runner.execute/1
    priv/repo/migrations/20190115121352_create_users.exs:4: (module)
    (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
    (elixir) lib/code.ex:715: Code.load_file/2
    (ecto_sql) lib/ecto/migrator.ex:476: Ecto.Migrator.extract_module/2
    (ecto_sql) lib/ecto/migrator.ex:433: anonymous fn/5 in Ecto.Migrator.do_migrate/4
    (elixir) lib/enum.ex:3281: Enumerable.List.reduce/3
    (elixir) lib/enum.ex:1968: Enum.reduce_while/3
    (ecto_sql) lib/ecto/migrator.ex:427: Ecto.Migrator.migrate/4
    (ecto_sql) lib/ecto/adapters/sql.ex:814: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4
    (db_connection) lib/db_connection.ex:1349: DBConnection.run_transaction/4

I am not sure about this but perhaps you need to create by hand the avocadoz schema in postgres. By default postgres uses the public schema. Postgres schemas are totally unrelated to ecto schemas.

It was raising because I put the execute function outside of the change function.

2 Likes