运行mix ecto.setup时,Elixir Postgres错误42501?

时间:2018-08-11 18:11:11

标签: postgresql elixir ecto phoenix

我正在尝试一个phoenix项目(source),但是无法设置数据库。

运行mix ecto.setup时出现此错误:(Postgrex.Error) ERROR 42501 (insufficient_privilege): permission denied to create extension "citext...

我知道几乎有一个确切的SO thread问类似的问题,但该帖子没有答案。

我去了psql并跑了CREATE EXTENSION citext;,但是我仍然遇到同样的问题。

有人可以将我指向正确的位置,以便我可以设置适当的用户权限,以便我可以成功运行mix ecto.setup吗?

我正在运行Phoenix v1.3.2和elixir 1.6.2。

我还有另一个凤凰项目,可以成功运行mix ecto.setup。我在下面列出了config / dev.exs的一部分以进行比较。

内部rumbl / config / dev.exs(成功)

# Configure your database
config :rumbl, Rumbl.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "rumbl_dev",
  hostname: "localhost",
  pool_size: 10

mango / config / dev.exs内部(错误)

# Configure your database
config :mango, Mango.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "mango_dev",
  hostname: "localhost",
  pool_size: 10

我遇到问题的项目的仓库位于here。这是我没有问题的另一个凤凰项目,也许会有所帮助:here

2 个答案:

答案 0 :(得分:2)

您必须以超级用户身份连接才能安装扩展citext

原因是此扩展创建了C函数,并且仅限于超级用户。

答案 1 :(得分:0)

找出解决方案。我认为这是Laurenz的回答和我在四处修补的结合。

我去psql并列出了所有用户\l,发现我的用户名iggy被列为所有者

...
iggy                            | iggy     | UTF8     | en_US.UTF-8 | en_US.UTF-8 
...

我做了psql -U iggy并且跑了CREATE EXTENSION citext;

我在username内更改了dev.exs

config :mango, Mango.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "iggy",
  password: "postgres",
  database: "mango_dev",
  hostname: "localhost",
  pool_size: 10

然后我跑了mix ecto.setup,瞧!它运行得很完美。有点奇怪,因为我的其他项目具有完全相同的dev.exs配置,并且我的用户名列为postgres(在这里工作),而只有iggy在这里工作。