我目前正在进行一系列迁移,这些迁移创建了一些带有引用和一些唯一索引的表。当我想用mix ecto.migrate迁移表时,这似乎工作得很好,但是如果我想回滚,mix ecto.rollback会弹出下面的错误。在回滚期间,我是否需要更改迁移以添加一些内容来处理索引?
迁移步骤:
defmodule App.Repo.Migrations.CreateTokens do
use Ecto.Migration
def change do
create table(:tokens) do
add :token, :string
add :user_id, r
几天前,我开始在Postgres数据库中使用Elixir和Phoenix Framework (v0.12.0)。我正在尝试创建一个具有UUID主键的表,与顺序缺省值相比,我更喜欢UUID主键。
在使用mix phoenix.gen.html生成模型和迁移文件并遵循Phoenix文档中的其他步骤之后,我进行了更改
def model do
quote do
use Ecto.Model
end
end
在web.ex中
def model do
quote do
use Ecto.Model
@primary_key {:id, :uuid,
我最近迁移到了phoenix和ecto的最新版本。
现在我已经根据ecto changelog修改了一个模型的代码。
defmodule Spaces.Tag do
use Spaces.Web, :model
#Changed to below
defmodule Spaces.Tag do
use Ecto.Schema
我有没有给(CompileError) web/models/tag.ex:23: undefined function cast/4.买什么遗漏的东西?
我的mix.exs相关代码
defp deps do
[{:phoenix, "~>
我正在向我的方案中添加一个utc时区感知列。但是,在我的数据库中,输入了带有out区域的时间戳(0)的列。
我做错什么了?我的计划是这样的:
defmodule Transaction do
use Ecto.Schema
import Ecto.Changeset
schema "transaction" do
field :platform_transaction_at, :utc_datetime
end
end
我的迁移文件看起来像
defmodule Transaction.Migrations.AddPlatformT
我已经开始学习phoenix框架,在尝试创建我的迁移时遇到了一些麻烦,以下是我的方案:
defmodule Lclp.User do
use Ecto.Schema
import Ecto.Changeset
alias Lclp.User
schema "users" do
field :email, :string
field :name, :string
field :password, :string, virtual: true
field :password_hash, :string
field :use
类似于这个问题:,我有一个Ecto迁移,在这里我想要创建一些新的表,但是也要从一个不同的存储库迁移一些数据。例如:
defmodule MyApp.Repo.Migrations.CreateFoo do
use Ecto.Migration
import Ecto.Query
def change do
create table(:foo) do
add(:status, :text)
end
flush()
execute &import_from_AnotherApp/0
end
defp import_fro
我在我的项目中遵循伞式应用程序结构。我正在编写访问层应用程序,它没有单独的回购,但需要迁移特定的表和关系才能工作。我不想为它创建单独的回购,让它变得复杂,以保持信任等。
我已经尝试了两种方法--
defmodule Data.Repo.Migrations.CreateActions do
use Ecto.Migration
def change do
# First approach
opts = []
file_path = ExAcl.SeedHelper.priv_path_for("20181129092126_create_actions
我有一个列:from,它最初的类型是{:array, :string}。现在,我希望将该列迁移为:string类型,将数组的第一个条目作为新值。
在Rails中,您可以使用迁移中的一些自定义逻辑来完成这个任务。我试图对Ecto进行同样的处理,但是由于模式验证和更改集错误,我遇到了一些问题。
defmodule Assistant.Repo.Migrations.ChangeFromFieldOnMails do
use Ecto.Migration
def up do
dict_of_froms =
Assistant.Mail
|> Assis
我已经打开了一个bash终端进行编译。然后打开另一个iex终端,打开命令是iex -S mix。
修改前的代码如下:
defmodule Mirror.Imports.Product do
use Ecto.Schema
import Ecto.Changeset
def test do
IO.inspect("hello world")
end
在编译后,代码如下:
def test do
IO.inspect("hello world1")
end
第一个终端中的编译命令如下:
mix compile
我发现在第二个ie
我无法成功地运行Ecto迁移来删除一个唯一的索引,该索引在最初创建时提供了一个:name属性(因此没有使用默认索引名)。但是,我现在无法删除该索引,因为似乎Ecto试图寻找一个名称不正确的索引(尽管我已经提供了它)。
惟一索引最初是通过如下迁移创建的:
def change do
create(
unique_index("foo", [:bar_id],
where: "rejected IS NULL AND accepted IS NULL)",
name: :bar_pending_index
)
)
en
我尝试使用和配置和,就像它们在自述中所描述的那样。不幸的是我犯了个错误。我怎么才能修好它?
mix phoenix.new my_app --database mysql
cd my_app
mix ecto.create
mix deps.get
mix phoenix.gen.html User users name
mix arc.g avatar
mix ecto.gen.migration add_avatar_to_users
该迁移的代码:
defmodule MyApp.Repo.Migrations.AddAvatarToUsers do
use Ecto.Migrati
我有一个项目,其中的数据库是redshift,我在phoenix项目中使用Postgrex适配器,在本地我使用postgresql,一切工作正常,但当我部署并尝试运行迁移时,我收到了这个错误。
15:39:27.201 [error] Could not create schema migrations table. This error usually happens due to the following:
* The database does not exist
* The "schema_migrations" table, which Ecto uses
我尝试进行以下迁移:
defmodule Shopper.Repo.Migrations.MakeNameUniqueShopper do
use Ecto.Migration
def change do
create unique_index :shoppers, [:name]
end
end
还尝试了create unique_index :shoppers, [:name], name: :name_unique、create unique_index :shoppers, [:name], name: "name_unique"和create i
使用PostgreSQL,我们可以这样做:
CREATE TYPE order_status AS ENUM ('placed','shipping','delivered')
在中,没有本地类型来映射Postgres的枚举类型。此为枚举结构提供自定义类型,但它映射到数据库中的整数。我可以很容易地使用这个库,但我更喜欢使用随数据库附带的本机枚举类型。
Ecto还提供了一种创建的方法,但据我所见,自定义类型必须映射到本地Ecto类型.
有人知道这是否可以用Ecto的模式来完成吗?如果是,迁移将如何工作?