无法为Elixir的Phoenix创建新的Postgres表

时间:2015-08-15 01:41:43

标签: postgresql elixir phoenix-framework

我正在关注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;我该如何创建表格?

3 个答案:

答案 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