2015-08-15 2 views
3

Я следую https://robots.thoughtbot.com/testing-a-phoenix-elixir-json-apiНевозможно создать новую таблицу Postgres для Phoenix эликсира в

И я пытаюсь создать миграцию.

Когда я бегу перемешайте ecto.migrate я получаю:

/code/mpa:.mix ecto.migrate 
** (exit) exited in: GenServer.call(#PID<0.141.0>, {:query, "CREATE TABLE IF NOT EXISTS \"schema_migrations\" (\"version\" bigint PRIMARY KEY, \"inserted_at\" timestamp)", []}, :infinity) 
    ** (EXIT) %Postgrex.Error{message: nil, postgres: %{code: :invalid_catalog_name, file: "postinit.c", line: "794", message: "database \"mpa_dev\" does not exist", pg_code: "3D000", routine: "InitPostgres", severity: "FATAL"}} 
    (elixir) lib/gen_server.ex:356: GenServer.call/3 
    (postgrex) lib/postgrex/connection.ex:102: Postgrex.Connection.query/4 
    (ecto) lib/ecto/adapters/postgres/connection.ex:31: Ecto.Adapters.Postgres.Connection.query/4 
    (ecto) lib/ecto/adapters/sql.ex:228: Ecto.Adapters.SQL.query/7 
    (ecto) lib/ecto/pool.ex:159: Ecto.Pool.do_run/4 
    (ecto) lib/ecto/adapters/sql.ex:216: Ecto.Adapters.SQL.query/6 
    (ecto) lib/ecto/adapters/sql.ex:191: Ecto.Adapters.SQL.query/5 
    (elixir) lib/enum.ex:1261: Enum."-reduce/3-lists^foldl/2-0-"/3 

, но я просто создал таблицу. Проверка в Postgres:

~:.psql -d template1 
psql (9.4.4) 
Type "help" for help. 

template1=# CREATE TABLE mpa_dev(); 
ERROR: relation "mpa_dev" already exists 
template1=# 

почему я получаю эту ошибку &, как я могу создать таблицу?

ответ

1

Как видно из сообщения об ошибке:

"базы данных \" mpa_dev \ "не существует"

Вам необходимо создать базу данных с именем "mpa_dev":

createdb mpa_dev 

и запустить

mix ecto.migrate 

Если вы хотите, чтобы имя базы данных было template1 (как вы упомянули в вашем примере), отредактируйте имя базы данных в config/dev.exs и снова запустите mix ecto.migrate.

1

сообщение об ошибке жалуется, что базы данных «mpa_dev» не существует, и вы проверяете для существования таблицы «mpa_dev» во встроенном в template1 базы данных.

Я полагаю, вы создали таблицу в шаблоне базы данных1, когда вы хотели создать отдельную базу данных. При подключении к template1, вы можете создать с помощью команды базы данных:

CREATE DATABASE mpa_dev; 

См: CREATE DATABASE в руководстве. Вы также можете использовать команду командной строки createdb из оболочки.

Также обратите внимание на то, что создание шаблонов в шаблоне1 не является идеальной задачей, поскольку шаблон шаблона по умолчанию используется для создания любых новых баз данных, создаваемых с использованием CREATE DATABASE. Поскольку вы создали таблицу в шаблоне1, каждая новая создаваемая вами база данных будет содержать эту таблицу с этого момента. Я бы рекомендовал отказаться от этой таблицы, прежде чем делать что-либо еще.

1

Другие ответы (предоставленные harmic и emaillenin) предоставляют способ создания базы данных. Я просто хочу указать третий вариант, если у вас есть разрешение, которое вы можете сделать:

mix ecto.create 

Будет также создана база данных. Это полезно для работы с любым хранилищем. http://hexdocs.pm/ecto/0.15.0/Mix.Tasks.Ecto.Create.html