Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to store array with Ecto using Postgres

I would like to store an array of floating point values with Ecto using Postgres. I'm using Ecto with the Phoenix Framework and Elixir.

How would I define my model and migration for this?

I haven't tried much, except searching the web, which didn't find anything useful :-(

I did try defining a model with a schema like this:

  schema "my_model" do     field :my_array, :array      timestamps   end 

which gave an error "invalid or unknown type :array for field :my_array"

like image 367
Josh Petitt Avatar asked Oct 11 '15 13:10

Josh Petitt


2 Answers

I found the answer in the list of primitive types for Ecto.Schema here:

Ecto.Schema

The answer is to define the type like this:

  schema "my_model" do     field :my_array, {:array, :float}      timestamps   end 
like image 63
Josh Petitt Avatar answered Sep 17 '22 16:09

Josh Petitt


As Josh wrote use the array type from Ecto.Schema

In the model:

schema "my_model" do   field :my_array, {:array, inner_type} end 

@neildaemond Migration:

alter table(:my_models) do   add :my_array, {:array, inner_type} end 

Replace inner_type with one of the valid types, such as :string.

You can also do the same thing with a map type:

schema "my_model" do   field :my_map, {:map, inner_type} end 
like image 42
Bartek Skwira Avatar answered Sep 17 '22 16:09

Bartek Skwira