Я не ясно, о том, как индекс внедренный хранится в виде Структуры JSONB с Ecto2/Postgres 9.4+Индексация JSONB встраиваемых моделей Ecto2 в Postgres 9.4+
У меня есть схемы с двумя встроенными структурами с использованием embeds_one и embeds_many. Это ecto: поля карты, представленные в Postgres как JSONB. Мне интересно, как я могу быть уверенным, что они индексируются (используя Gin?) Для быстрых запросов? Я не уверен, что это произойдет автоматически, если мне нужно добавить индекс в мою миграцию или если мне нужно сделать это вручную, используя psql и т. Д.
Просто ищите разъяснения относительно того, как это работает. Спасибо!
defmodule App.Repo.Migrations.CreateClient
def change do
create table(:clients) do
add :name, :string
add :settings, :map
add :roles, {:array, :map}, default: []
timestamps()
end
// This works for normal schema/model fields
create index(:clients, [:name], unique: true, using: :gin)
// BUT CAN I INDEX MY EMBEDS HERE?
// GUESS:
create index(:clients, [:settings], using: :gin)
end
end
defmodule App.Client do
schema "client" do
field :name, :string
embeds_one :settings, Settings // single fixed schema "Settings" model
embeds_many :roles, Role // array of "Role" models
end
end
defmodule Settings do
use Ecto.Model
embedded_schema do // ALSO
field :name, :string // are types relevant?
field :x_count, :integer // stored as strings (INDEXED?)
field :is_active, :boolean // deserialized via cast?
end
end
defmodule Role do
use Ecto.Model
embedded_schema do
field :token
field :display_english
field :display_spanish
end
end
, который определенно подходит для полей верхнего уровня в модели клиента, но я прошу проиндексировать поля JSONB: map – errata
Ну, идите [здесь] (https://www.postgresql.org/docs/current/static /datatype-json.html) и посмотрите раздел 'jsonb Indexing', синтаксис в основном одинаковый для столбцов jsonb, как и для обычных, поэтому мой первый пример должен работать, если вы не добавите определенные параметры для индекса, для которого вы 'd использовать 'execute' – JustMichael