unique_index
würde nicht einen zusammengesetzten Primärschlüssel erstellen, wie in dem Beispiel der Frage gezeigt. Es erzeugt eine einzigartige Einschränkung.
Wenn Sie einen zusammengesetzten Primärschlüssel erstellen wollen (beachten Sie: nicht zu empfehlen, wenn sie mit Ecto arbeiten), there's more information here:
Migration:
defmodule HelloPhoenix.Repo.Migrations.CreatePlayer do
use Ecto.Migration
def change do
create table(:players, primary_key: false) do
add :first_name, :string, primary_key: true
add :last_name, :string, primary_key: true
add :position, :string
add :number, :integer
...
Schema:
defmodule HelloPhoenix.Player do
use Ecto.Schema
@primary_key false
schema "players" do
field :first_name, :string, primary_key: true
field :last_name, :string, primary_key: true
field :position, :string
field :number, :integer
...
In den meisten Fällen ist unique_index
aber was Sie wollen.
Dies sollte als akzeptierte Antwort imo markiert werden. @TheSquad, hat: Name_Ihr_Constraint muss entweder sein: Col1 oder: Col2 in diesem Zusammenhang? Referenz: https://hexdocs.pm/ecto/Ecto.Changeset.html#unique_constraint/3 – Olshansk
absolut nicht, können Sie jedes Atom, das Sie möchten, eine umfassende Fehlermeldung haben, wenn die Einschränkung nicht erfüllt ist – TheSquad