Raised when a row's keys differ from the first row's keys.
The Postgres adapter reads the table's column list from the keys of the
first row, so every row must have exactly the same keys. Without this check
a key missing from a later row would be inserted as NULL, and an extra key
would be silently dropped. The message names the table, the offending row's
index, and the keys that differ.
If your rows legitimately vary — optional fields from an external source, for example — normalize them before copying, choosing explicitly which columns every row provides:
defaults = %{name: nil, email: nil}
rows = Enum.map(raw_rows, &Map.merge(defaults, &1))
Summary
Types
@type t() :: %Blink.RowError{ __exception__: true, extra: [term()], index: non_neg_integer(), missing: [term()], table_name: String.t() }