Electric.Shapes.Partitions (electric v1.2.4)

View Source

Keeps track of shapes defined on partitioned tables and re-writes transactions to send an equivalent change on the root partitioned table for every change to a partition of that table.

Summary

Functions

Update the partition information table with the given shape.

Handle relation changes from the replication stream, expanding changes to partitions into the partition root as appropriate.

Handle transactions from the replication stream, updating the partition mapping as appropriate.

Remove a shape that was previously added under the given id.

Types

options()

@type options() :: [{:inspector, Electric.Postgres.Inspector.inspector()}]

partition_table()

@type partition_table() :: Electric.relation()

root_table()

@type root_table() :: Electric.relation()

shape_id()

@type shape_id() :: term()

t()

@type t() :: %Electric.Shapes.Partitions{
  active: non_neg_integer(),
  inspector: Electric.Postgres.Inspector.inspector(),
  partition_ownership: %{required(Electric.relation()) => MapSet.t(shape_id())},
  partitions: %{required(partition_table()) => root_table()}
}

Functions

add_shape(state, shape_id, shape)

@spec add_shape(t(), shape_id(), Electric.Shapes.Shape.t()) :: t()

Update the partition information table with the given shape.

If the shape is defined on a partitioned table (not a partition of that table) then this will expand the mapping function to add a change to the partition root for every change to a partition of that root.

handle_relation(state, relation)

@spec handle_relation(t(), Electric.Replication.Changes.Relation.t()) ::
  {:ok, t()} | {:error, :connection_not_available}

Handle relation changes from the replication stream, expanding changes to partitions into the partition root as appropriate.

handle_transaction(state, transaction)

Handle transactions from the replication stream, updating the partition mapping as appropriate.

new(opts)

@spec new(options()) :: t()

remove_shape(state, shape_id)

@spec remove_shape(t(), shape_id()) :: t()

Remove a shape that was previously added under the given id.

If that shape was defined on a partitioned table, this will clean up the partition mapping table.