When working with AshPostgres and extensions like vectors, you’ll need to tell Postgrex about custom types. Fortunately, this only requires a small configuration update.
First, create a new file at lib/postgrex_types.ex
and define a custom type module:
# lib/postgrex_types.ex
Postgrex.Types.define(
MyApp.PostgrexTypes,
[AshPostgres.Extensions.Vector] ++ Ecto.Adapters.Postgres.extensions(),
[]
)
Here we extend the default Postgres types with AshPostgres.Extensions.Vector
.
Next, add this type definition to your repo configuration.
config/dev.exs
config :my_app, MyApp.Repo,
types: MyApp.PostgrexTypes, # <--- Add this
username: "postgres",
password: "postgres",
hostname: "localhost",
database: "my_app_dev",
stacktrace: true,
show_sensitive_data_on_connection_error: true,
pool_size: 10
config/runtime.exs
config :my_app, MyApp.Repo,
# ssl: true,
url: database_url,
pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"),
# For machines with several cores, consider starting multiple pools of `pool_size`
# pool_count: 4,
socket_options: maybe_ipv6,
types: MyApp.PostgrexTypes # <--- Add this
config/test.exs
config :my_app, MyApp.Repo,
types: MyApp.PostgrexTypes, # <--- Add this
username: "postgres",
password: "postgres",
hostname: "localhost",
database: "my_app_test#{System.get_env("MIX_TEST_PARTITION")}",
pool: Ecto.Adapters.SQL.Sandbox,
pool_size: System.schedulers_online() * 2
By defining MyApp.PostgrexTypes
and updating your repo configuration in dev
, test
, and runtime
, your application will be able to handle custom Postgres types like vectors seamlessly.
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.