Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir EXTO-无法删除自定义命名唯一索引_Elixir_Ecto - Fatal编程技术网

Elixir EXTO-无法删除自定义命名唯一索引

Elixir EXTO-无法删除自定义命名唯一索引,elixir,ecto,Elixir,Ecto,我无法成功运行EXTO迁移以删除最初创建时提供有:name属性的唯一索引(因此未使用默认索引名称)。然而,我现在无法删除该索引,因为似乎Ecto正在尝试查找名称不正确的索引(尽管我提供了它) 唯一索引最初是通过如下迁移创建的: def change do create( unique_index("foo", [:bar_id], where: "rejected IS NULL AND accepted IS NULL)",

我无法成功运行EXTO迁移以删除最初创建时提供有
:name
属性的唯一索引(因此未使用默认索引名称)。然而,我现在无法删除该索引,因为似乎Ecto正在尝试查找名称不正确的索引(尽管我提供了它)

唯一索引最初是通过如下迁移创建的:

def change do
  create(
    unique_index("foo", [:bar_id],
      where: "rejected IS NULL AND accepted IS NULL)",
      name: :bar_pending_index
    )
  )
end
当我检查psql shell中的表时,我看到这个索引如下所示:

"bar_pending_index" UNIQUE, btree (bar_id) WHERE rejected IS NULL AND accepted IS NULL
为了删除索引,我编写了以下迁移:

def up do
  drop index("foo", [:bar_pending_index])
end

def down do
  create(
    unique_index("foo", [:bar_id],
      where: "rejected IS NULL AND accepted IS NULL)",
      name: :bar_pending_index
    )
  )
end
但是,当我尝试运行此迁移时,会出现错误

14:01:56.573 [info]  == Running 20210610173741 MyApp.Repo.Migrations.DropIndex.up/0 forward

14:01:56.576 [info]  drop index foo_bar_pending_index_index
** (Postgrex.Error) ERROR 42704 (undefined_object) index "foo_bar_pending_index" does not exist

在我看来,它似乎在尝试应用通常认为是“默认”的命名约定,也就是说,它希望在索引名前面加上表名,并在索引名后面加上“index”一词。通过EXTO迁移删除自定义命名索引的适当方式是什么?谢谢大家!

当您执行
删除索引(“foo”,[:bar\u pending\u index])
时,您调用的函数与创建索引时使用的函数相同,类似于

查看这两个函数的文档,您会注意到第二个参数始终是要用于索引的列(例如
drop
drop index(“posts”,[:name])
由于列名称
:name
),因此有点模棱两可

因此,您应该做的实际上与创建索引的方式非常相似,例如:

drop index(“foo”,[:bar\u id],name::bar\u pending\u index)

啊,谢谢,这很有道理——从文档中我不清楚我是否可以在这里提供opts参数,但事实上,这确实起到了作用。