The error is foreign_key_constraint
(scenario 1)
Scenario 1
use :serial in the migration
do not cast :id
foreign_key_constraint error insert legacy data:
[priv/repo/seed_1_insert_legacy_data_to_migrated_db.exs:207: (file)]
%MusicTitle{} #=> %Word.Schema.MusicTitle{
__meta__: #Ecto.Schema.Metadata<:built, "musictitles">,
id: nil,
language_id: nil,
localizedname: nil,
uuid: nil,
music_id: nil,
inserted_at: nil,
updated_at: nil
}
|> MusicTitle.changeset(attrs) #=> #Ecto.Changeset<
action: nil,
changes: %{
uuid: "37a724f4-cc91-74e6-ca5d-e33b9f9e8d45",
language_id: "en",
localizedname: "title",
music_id: 35
},
errors: [],
data: #Word.Schema.MusicTitle<>,
valid?: true
>
[debug] QUERY ERROR db=3.1ms idle=10.1ms
INSERT INTO "musictitles" ("uuid","language_id","localizedname","music_id","inserted_at","updated_at") VALUES ($1,$2,$3,$4,$5,$6) RETURNING "id" ["37a724f4-cc91-74e6-ca5d-e33b9f9e8d45", "en", "title", 35, ~N[2023-12-04 14:49:29], ~N[2023-12-04 14:49:29]]
↳ Enum."-map/2-lists^map/1-1-"/2, at: lib/enum.ex:1693
** (Ecto.ConstraintError) constraint error when attempting to insert struct:
* "musictitles_music_id_fkey" (foreign_key_constraint)
If you would like to stop this constraint violation from raising an
exception and instead add it as an error to your changeset, please
call `foreign_key_constraint/3` on your changeset with the constraint
`:name` as an option.
The changeset has not defined any constraint.
(ecto 3.10.3) lib/ecto/repo/schema.ex:804: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
(elixir 1.15.2) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
(ecto 3.10.3) lib/ecto/repo/schema.ex:788: Ecto.Repo.Schema.constraints_to_errors/3
(ecto 3.10.3) lib/ecto/repo/schema.ex:769: Ecto.Repo.Schema.apply/4
(ecto 3.10.3) lib/ecto/repo/schema.ex:377: anonymous fn/15 in Ecto.Repo.Schema.do_insert/4
(elixir 1.15.2) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
(elixir 1.15.2) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
priv/repo/seed_1_insert_legacy_data_to_migrated_db.exs:192: (file)
(elixir 1.15.2) lib/code.ex:1435: Code.require_file/2
(mix 1.15.2) lib/mix/tasks/run.ex:146: Mix.Tasks.Run.run/5
(mix 1.15.2) lib/mix/tasks/run.ex:85: Mix.Tasks.Run.run/1
(mix 1.15.2) lib/mix/task.ex:447: anonymous fn/3 in Mix.Task.run_task/5
(mix 1.15.2) lib/mix/cli.ex:92: Mix.CLI.run_task/2
Scenario 2
use :serial in the migration
cast :id
unique_constraint error, insert on new row:
iex(5)> %Word.Schema.MediaMusic{} |> Word.Schema.MediaMusic.changeset(attrs) |> Repo.insert()
[debug] QUERY ERROR db=4.6ms queue=1.1ms idle=756.0ms
INSERT INTO "mediamusic" ("path","uuid","duration","language_id","localizedname","audio_urls","media_format","media_urls","size_bytes","view_count","music_id","inserted_at","updated_at") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13) RETURNING "id" ["a/path", "185660f4-b15a-4089-99f8-1ba9cd5f2e96", 0.0, "en", "untitled", [], :audio, [], 0, 0, 1, ~U[2023-12-04 14:46:34Z], ~U[2023-12-04 14:46:34Z]]
↳ :erl_eval.do_apply/7, at: erl_eval.erl:746
** (Ecto.ConstraintError) constraint error when attempting to insert struct:
* "mediamusic_pkey" (unique_constraint)
If you would like to stop this constraint violation from raising an
exception and instead add it as an error to your changeset, please
call `unique_constraint/3` on your changeset with the constraint
`:name` as an option.
The changeset has not defined any constraint.
(ecto 3.10.3) lib/ecto/repo/schema.ex:804: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
(elixir 1.15.2) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
(ecto 3.10.3) lib/ecto/repo/schema.ex:788: Ecto.Repo.Schema.constraints_to_errors/3
(ecto 3.10.3) lib/ecto/repo/schema.ex:769: Ecto.Repo.Schema.apply/4
(ecto 3.10.3) lib/ecto/repo/schema.ex:377: anonymous fn/15 in Ecto.Repo.Schema.do_insert/4