I’m guessing that the above simply, implicitly adds a
field :id, :id, primary_key: true
In the SQL shell, do a DESCRIBE sources; and see what the type of the id column actually is. Given Ecto’s documentation I would expect a binary(16) for a UUID column - a standard :id will be some kind of integer.
If the id column is the wrong type, I’d start with
defmodule Stats.Repo.Migrations.CreateSourcesTable do
use Ecto.Migration
def change do
create table(:sources, primary_key: false) do
add :id, :binary_id, primary_key: true
add :nth, :integer, null: false
add :url, :string, null: false
add :contents, :text
end
create index("sources", [:nth], unique: true)
create index("sources", [:url], unique: true)
end
end
and go from there - i.e. see if it works or if it simply changes the problem.
defmodule Stats.Schema do
defmacro __using__(_) do
quote do
use Ecto.Schema
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
end
end
end
only has an effect on Schemas that use it - it doesn’t impact the migration at all - so there needs to be some kind of hint in the migration that the table is dealing with a :binary_id instead of a :id type.






















