Packages
electric
1.3.2
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/snapshot_error.ex
defmodule Electric.SnapshotError do
alias Electric.SnapshotError
defexception [:message, :type, :original_error]
def table_lock_timeout do
%SnapshotError{
type: :table_lock_timeout,
message: "Snapshot timed out while waiting for a table lock"
}
end
def connection_not_available do
%SnapshotError{
type: :connection_not_available,
message: "Database connection not available"
}
end
def slow_snapshot_query(ttf_ms) do
%SnapshotError{
type: :slow_snapshot_query,
message:
"Snapshot query took too long to return data (cancelled after #{ttf_ms}ms). Please ensure snapshot queries are using an index to avoid taking up all database connections."
}
end
def from_error(%DBConnection.ConnectionError{reason: :queue_timeout} = error) do
%SnapshotError{
type: :queue_timeout,
message: "Snapshot creation failed because of a connection pool queue timeout",
original_error: error
}
end
def from_error(%Postgrex.Error{postgres: %{code: code}} = error)
when code in ~w|undefined_function undefined_table undefined_column|a do
%SnapshotError{
type: :schema_changed,
message: "Schema changed while creating snapshot",
original_error: error
}
end
def from_error(%Postgrex.Error{postgres: %{code: :insufficient_privilege}} = error) do
%SnapshotError{
type: :missing_privilege,
message: "Unable to create initial snapshot: " <> error.postgres.message,
original_error: error
}
end
def from_error(
%Postgrex.Error{
postgres: %{
code: :undefined_object,
message: "publication " <> _ = message,
severity: "ERROR",
pg_code: "42704"
}
} = error
) do
%SnapshotError{
type: :missing_publication,
message: message,
original_error: error
}
end
def from_error(%Postgrex.Error{} = error) do
%SnapshotError{
type: :unknown,
message: error.postgres.message,
original_error: error
}
end
def from_error(%Electric.DbConfigurationError{} = error) do
%SnapshotError{
type: error.type,
message: error.message,
original_error: error
}
end
def from_error(%File.Error{} = error) do
%SnapshotError{
type: :storage,
message: Exception.message(error),
original_error: error
}
end
def from_error(%SnapshotError{} = error), do: error
def from_error(error) do
%SnapshotError{
type: :unknown,
message: Exception.message(error),
original_error: error
}
end
end