Hi,
since my project will require some analytics, I’ve decided to use Postgres + DuckDB via pg_duckdb extension. I’ve spinned up an official pgduckdb container, set up credentials, run mix ash.reset, added pg_duckdb to installed_extensions/0 and finally run mix ash.codegen install_pg_duckdb + mix ash.migrate, but I end up with:
Getting extensions in current project...
Running migration for AshPostgres.DataLayer...
09:31:07.612 [info] == Running 20251218083057 MyApp.Repo.Migrations.InstallPgDuckdbExtensions1.up/0 forward
09:31:07.619 [info] execute "CREATE EXTENSION IF NOT EXISTS \"pg_duckdb\""
09:31:07.670 [info] == Migrated 20251218083057 in 0.0s
** (Postgrex.Error) ERROR 42P01 (undefined_table) relation "schema_migrations" does not exist
query: INSERT INTO "schema_migrations" ("version","inserted_at") VALUES ($1,$2)
(ecto_sql 3.13.3) lib/ecto/adapters/sql.ex:1108: Ecto.Adapters.SQL.raise_sql_call_error/1
(ecto 3.13.5) lib/ecto/repo/schema.ex:1000: Ecto.Repo.Schema.apply/4
(ecto 3.13.5) lib/ecto/repo/schema.ex:500: anonymous fn/15 in Ecto.Repo.Schema.do_insert/4
(my_app 0.1.0) lib/my_app/repo.ex:2: MyApp.Repo.insert/2
(ecto_sql 3.13.3) lib/ecto/migrator.ex:338: anonymous fn/6 in Ecto.Migrator.async_migrate_maybe_in_transaction/7
(my_app 0.1.0) lib/my_app/repo.ex:2: anonymous fn/1 in MyApp.Repo."transaction (overridable 1)"/2
(ecto 3.13.5) lib/ecto/repo/transaction.ex:11: anonymous fn/3 in Ecto.Repo.Transaction.transact/4
(ecto_sql 3.13.3) lib/ecto/adapters/sql.ex:1468: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4
Here are some additional logs:
$ psql -U duck
psql (18.1 (Debian 18.1-1.pgdg12+2))
Type "help" for help.
duck=# \dx
List of installed extensions
Name | Version | Default version | Schema | Description
-----------+---------+-----------------+------------+------------------------------
pg_duckdb | 1.1.0 | 1.1.0 | public | DuckDB Embedded in Postgres
plpgsql | 1.0 | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
duck=# \c my_app_dev
You are now connected to database "my_app_dev" as user "duck".
my_app_dev=# \dx
List of installed extensions
Name | Version | Default version | Schema | Description
---------+---------+-----------------+------------+------------------------------
plpgsql | 1.0 | 1.0 | pg_catalog | PL/pgSQL procedural language
(1 row)
my_app_dev=# SELECT * FROM schema_migrations;
version | inserted_at
----------------+---------------------
20251210094714 | 2025-12-18 08:28:00
(1 row)
As you can see, schema_migrations table exists.






















