我正在关注https://robots.thoughtbot.com/testing-a-phoenix-elixir-json-api
我正在尝试创建迁移。
当我运行mix 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=#
为什么我会收到此错误&amp;我该如何创建表格?
答案 0 :(得分:1)
错误消息是抱怨数据库“mpa_dev”不存在,并且您正在检查内置数据库模板1中是否存在 table “mpa_dev”
我猜你是想在创建一个单独的数据库时在数据库template1中创建了一个表。如果连接到template1,您将使用命令
创建数据库CREATE DATABASE mpa_dev;
请参阅手册中的CREATE DATABASE。您还可以使用shell中的命令行createdb命令。
另请注意,通常在template1中创建表并不是一个好主意,因为template1是用于创建使用CREATE DATABASE创建的任何新数据库的默认模板。由于您已在template1中创建了一个表,因此您创建的每个新数据库都将包含此表。我会建议你在做其他事情之前放弃那张桌子。
答案 1 :(得分:1)
其他两个答案(由harmic和emaillenin提供)提供了一种创建数据库的方法。如果您有权限可以,我只想指出第三个选项:
canvTex.toBlob(function (blob) {
uploader.send(blob, function (error, downloadUrl) {
//...
});
});
这也将创建数据库。这有利于使用任何存储后端。 http://hexdocs.pm/ecto/0.15.0/Mix.Tasks.Ecto.Create.html
答案 2 :(得分:0)
message: "database \"mpa_dev\" does not exist"
我猜数据库不存在。
我会这样做:
mix ecto.create
mix ecto.migrate