我正在尝试一个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
答案 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
在这里工作。