Packages

ash_postgres

2.4.3
2.10.0 2.9.1 2.9.0 2.8.0 2.7.0 2.6.32 2.6.31 2.6.30 2.6.29 2.6.28 2.6.27 2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 2.6.4 2.6.3 2.6.2 2.6.1 2.6.0 2.5.22 2.5.21 2.5.20 2.5.19 2.5.18 2.5.17 2.5.16 2.5.15 2.5.14 2.5.13 2.5.12 2.5.11 2.5.10 2.5.9 2.5.8 2.5.7 2.5.6 2.5.5 2.5.4 2.5.3 2.5.2 2.5.1 2.5.0 2.4.21 2.4.20 2.4.19 2.4.18 2.4.17 2.4.16 2.4.15 2.4.14 2.4.13 2.4.12 2.4.11 2.4.10 2.4.9 2.4.8 2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 2.3.1 2.3.0 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.19 2.1.18 2.1.17 2.1.15 2.1.14 2.1.13 2.1.12 2.1.11 2.1.10 2.1.9 2.1.8 2.1.6 2.1.5 2.1.4 2.1.3 2.1.2 2.1.1 2.1.0 2.0.12 2.0.11 2.0.10 2.0.9 2.0.8 2.0.7 2.0.6 2.0.5 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 2.0.0-rc.15 2.0.0-rc.14 2.0.0-rc.13 2.0.0-rc.12 2.0.0-rc.11 2.0.0-rc.10 2.0.0-rc.9 2.0.0-rc.8 2.0.0-rc.7 2.0.0-rc.6 2.0.0-rc.5 2.0.0-rc.4 2.0.0-rc.3 2.0.0-rc.2 2.0.0-rc.1 2.0.0-rc.0 1.5.30 1.5.29 1.5.28 1.5.27 1.5.26 1.5.25 1.5.24 1.5.23 1.5.22 1.5.21 1.5.20 1.5.19 1.5.18 1.5.17 1.5.16 1.5.15 1.5.14 1.5.13 1.5.12 1.5.11 1.5.10 1.5.9 1.5.8 1.5.7 1.5.6 1.5.5 1.5.4 1.5.3 1.5.2 1.5.1 1.5.0 1.4.0 1.3.68 1.3.67 1.3.66 1.3.65 1.3.64 1.3.63 1.3.62 1.3.61 1.3.60 1.3.59 1.3.58 1.3.56 1.3.55 1.3.54 1.3.53 1.3.52 1.3.51 1.3.50 1.3.49 1.3.48 1.3.47 1.3.46 1.3.45 1.3.44 1.3.43 1.3.42 1.3.41 1.3.40 1.3.39 1.3.38 1.3.37 1.3.36 1.3.35 1.3.34 1.3.33 1.3.32 1.3.31 1.3.30 1.3.29 1.3.28 1.3.26 1.3.25 1.3.24 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 1.3.18 1.3.17 1.3.16 1.3.15 1.3.14 1.3.12 1.3.11 1.3.10 1.3.9 1.3.8 1.3.6 1.3.5 1.3.4 1.3.3 1.3.2 1.3.1 1.3.0 1.3.0-rc.4 1.3.0-rc.3 1.3.0-rc.2 1.3.0-rc.0 1.2.6 1.2.5 1.2.4 1.2.3 1.2.2 1.2.1 1.2.0 1.2.0-rc.1 1.2.0-rc.0 1.1.3 1.1.2 1.1.1 1.1.0 1.0.0 1.0.0-rc.9 1.0.0-rc.8 1.0.0-rc.7 1.0.0-rc.6 1.0.0-rc.5 1.0.0-rc.4 1.0.0-rc.3 1.0.0-rc.2 1.0.0-rc.1 1.0.0-rc.0 1.0.0-pre.3 1.0.0-pre.2 1.0.0-pre.1 1.0.0-pre.0 0.43.0 0.42.0-rc.7 0.42.0-rc.6 0.42.0-rc.5 0.42.0-rc.4 0.42.0-rc.3 0.42.0-rc.1 0.42.0-rc.0 0.41.7 0.41.6 0.41.5 0.41.4 0.41.3 0.41.2 0.41.1 0.41.0-rc0 retired 0.41.0-rc.9 0.41.0-rc.8 0.41.0-rc.7 0.41.0-rc.6 0.41.0-rc.5 0.41.0-rc.4 0.41.0-rc.3 0.41.0-rc.2 0.41.0-rc.1 0.41.0-rc.0 0.40.11 0.40.10 0.40.9 0.40.8 0.40.7 0.40.6 0.40.5 0.40.4 0.40.3 0.40.2 0.40.1 0.40.0-rc5 0.40.0-rc4 0.40.0-rc3 0.40.0-rc2 0.40.0-rc1 0.39.0-rc0 0.38.11 0.38.10 0.38.9 0.38.8 0.38.7 0.38.6 0.38.5 0.38.4 0.38.3 0.38.2 0.38.1 0.38.0 0.37.8 0.37.7 0.37.6 0.37.5 0.37.4 0.37.3 0.37.2 0.37.1 0.37.0 0.36.5 0.36.4 0.36.3 0.36.2 0.36.1 0.36.0 0.35.5 0.35.4 0.35.3 0.35.1 0.34.5 0.34.4 0.34.3 0.34.2 0.34.1 0.34.0 0.33.1 0.33.0 0.32.2 0.32.1 0.32.0 0.31.1 0.30.1 0.29.6 0.29.5 0.29.4 0.29.3 0.29.2 0.29.1 0.28.1 0.28.0 0.27.0 0.26.2 0.26.1 0.26.0 0.25.5 0.25.4 0.25.3 0.25.2 0.25.1 0.25.0 0.24.0 0.23.2 0.23.1 0.23.0 0.22.1 0.22.0 0.21.0 0.20.1 0.20.0 0.19.0 0.18.0 0.17.0 0.16.1 0.15.0 0.14.0 0.13.0 0.12.1 0.12.0 0.11.2 0.10.0 0.9.0 0.8.0 0.7.0 0.6.0 0.5.0 0.4.0 0.3.0 0.2.1 0.2.0 0.1.4 0.1.3 0.1.2 0.1.1 0.1.1-rc.2 0.1.1-rc.1 0.1.1-rc.0 0.1.0

The PostgreSQL data layer for Ash Framework

Security advisory: This version has known vulnerabilities. View advisories

Current section

409 Versions

Jump to

Compare versions

6 files changed
+103 additions
-39 deletions
  @@ -5,6 +5,15 @@ See [Conventional Commits](Https://conventionalcommits.org) for commit guideline
5 5
6 6 <!-- changelog -->
7 7
8 + ## [v2.4.3](https://github.com/ash-project/ash_postgres/compare/v2.4.2...v2.4.3) (2024-09-27)
9 +
10 +
11 +
12 +
13 + ### Bug Fixes:
14 +
15 + * support pg <= 14 in resource generator, and update tests
16 +
8 17 ## [v2.4.2](https://github.com/ash-project/ash_postgres/compare/v2.4.1...v2.4.2) (2024-09-24)
  @@ -148,9 +148,24 @@ And finally, add the repo to your application
148 148 ...
149 149 ```
150 150
151 - #### Add AshPostgres to our resources
151 + <!-- tabs-close -->
152 152
153 - Now we can add the data layer to our resources. The basic configuration for a resource requires the `d:AshPostgres.postgres|table` and the `d:AshPostgres.postgres|repo`.
153 + ## Adding AshPostgres to your resources
154 +
155 + <!-- tabs-open -->
156 +
157 + ### With Igniter
158 +
159 + You can add `AshPostgres` to a resource with `mix ash.patch.extend Your.Resource.Name postgres`. For example:
160 +
161 + ```sh
162 + mix ash.patch.extend Helpdesk.Support.Ticket postgres
163 + mix ash.patch.extend Helpdesk.Support.Representative postgres
164 + ```
165 +
166 + ### Manually
167 +
168 + The basic configuration for a resource requires the `d:AshPostgres.postgres|table` and the `d:AshPostgres.postgres|repo`.
154 169
155 170 ```elixir
156 171 # in lib/helpdesk/support/ticket.ex
  @@ -178,12 +193,16 @@ Now we can add the data layer to our resources. The basic configuration for a re
178 193 end
179 194 ```
180 195
196 + <!-- tabs-close -->
197 +
181 198 #### Create the database and tables
182 199
183 200 First, we'll create the database with `mix ash.setup`.
184 201
185 202 Then we will generate database migrations. This is one of the many ways that AshPostgres can save time and reduce complexity.
186 203
204 + For example:
205 +
187 206 ```bash
188 207 mix ash.codegen add_tickets_and_representatives
189 208 ```
  @@ -200,8 +219,6 @@ Finally, we will create the local database and apply the generated migrations:
200 219 mix ash.setup
201 220 ```
202 221
203 - <!-- tabs-close -->
204 -
205 222 ### Try it out
206 223
207 224 This is based on the [Getting Started](https://hexdocs.pm/ash/getting_started.html) guide.
  @@ -1,7 +1,7 @@
1 1 {<<"links">>,
2 2 [{<<"GitHub">>,<<"https://github.com/ash-project/ash_postgres">>}]}.
3 3 {<<"name">>,<<"ash_postgres">>}.
4 - {<<"version">>,<<"2.4.2">>}.
4 + {<<"version">>,<<"2.4.3">>}.
5 5 {<<"description">>,<<"The PostgreSQL data layer for Ash Framework">>}.
6 6 {<<"elixir">>,<<"~> 1.13">>}.
7 7 {<<"app">>,<<"ash_postgres">>}.
  @@ -609,6 +609,8 @@ defmodule AshPostgres.DataLayer do
609 609 def can?(_, :async_engine), do: true
610 610 def can?(_, :bulk_create), do: true
611 611
612 + def can?(_, :action_select), do: true
613 +
612 614 def can?(resource, :update_query) do
613 615 # We can't currently support updating a record from a query
614 616 # if that record manages a tenant on update
  @@ -232,39 +232,75 @@ defmodule AshPostgres.ResourceGenerator.Spec do
232 232
233 233 defp add_indexes(spec) do
234 234 %Postgrex.Result{rows: index_rows} =
235 - spec.repo.query!(
236 - """
237 - SELECT
238 - i.relname AS index_name,
239 - ix.indisunique AS is_unique,
240 - NOT(ix.indnullsnotdistinct) AS nulls_distinct,
241 - pg_get_expr(ix.indpred, ix.indrelid) AS where_clause,
242 - am.amname AS using_method,
243 - idx.indexdef
244 - FROM
245 - pg_index ix
246 - JOIN
247 - pg_class i ON ix.indexrelid = i.oid
248 - JOIN
249 - pg_class t ON ix.indrelid = t.oid
250 - JOIN
251 - pg_am am ON i.relam = am.oid
252 - LEFT JOIN
253 - pg_constraint c ON c.conindid = ix.indexrelid AND c.contype = 'p'
254 - JOIN
255 - pg_indexes idx ON idx.indexname = i.relname AND idx.schemaname = 'public' -- Adjust schema name if necessary
256 - JOIN information_schema.tables ta
257 - ON ta.table_name = t.relname
258 - WHERE
259 - t.relname = $1
260 - AND ta.table_schema = $2
261 - AND c.conindid IS NULL
262 - GROUP BY
263 - i.relname, ix.indisunique, ix.indnullsnotdistinct, pg_get_expr(ix.indpred, ix.indrelid), am.amname, idx.indexdef;
264 - """,
265 - [spec.table_name, spec.schema],
266 - log: false
267 - )
235 + if Version.match?(spec.repo.min_pg_version(), ">= 15.0.0") do
236 + spec.repo.query!(
237 + """
238 + SELECT
239 + i.relname AS index_name,
240 + ix.indisunique AS is_unique,
241 + NOT(ix.indnullsnotdistinct) AS nulls_distinct,
242 + pg_get_expr(ix.indpred, ix.indrelid) AS where_clause,
243 + am.amname AS using_method,
244 + idx.indexdef
245 + FROM
246 + pg_index ix
247 + JOIN
248 + pg_class i ON ix.indexrelid = i.oid
249 + JOIN
250 + pg_class t ON ix.indrelid = t.oid
251 + JOIN
252 + pg_am am ON i.relam = am.oid
253 + LEFT JOIN
254 + pg_constraint c ON c.conindid = ix.indexrelid AND c.contype = 'p'
255 + JOIN
256 + pg_indexes idx ON idx.indexname = i.relname AND idx.schemaname = 'public' -- Adjust schema name if necessary
257 + JOIN information_schema.tables ta
258 + ON ta.table_name = t.relname
259 + WHERE
260 + t.relname = $1
261 + AND ta.table_schema = $2
262 + AND c.conindid IS NULL
263 + GROUP BY
264 + i.relname, ix.indisunique, ix.indnullsnotdistinct, pg_get_expr(ix.indpred, ix.indrelid), am.amname, idx.indexdef;
265 + """,
266 + [spec.table_name, spec.schema],
267 + log: false
268 + )
269 + else
270 + spec.repo.query!(
271 + """
272 + SELECT
273 + i.relname AS index_name,
274 + ix.indisunique AS is_unique,
275 + TRUE AS nulls_distinct,
276 + pg_get_expr(ix.indpred, ix.indrelid) AS where_clause,
277 + am.amname AS using_method,
278 + idx.indexdef
279 + FROM
280 + pg_index ix
281 + JOIN
282 + pg_class i ON ix.indexrelid = i.oid
283 + JOIN
284 + pg_class t ON ix.indrelid = t.oid
285 + JOIN
286 + pg_am am ON i.relam = am.oid
287 + LEFT JOIN
288 + pg_constraint c ON c.conindid = ix.indexrelid AND c.contype = 'p'
289 + JOIN
290 + pg_indexes idx ON idx.indexname = i.relname AND idx.schemaname = 'public' -- Adjust schema name if necessary
291 + JOIN information_schema.tables ta
292 + ON ta.table_name = t.relname
293 + WHERE
294 + t.relname = $1
295 + AND ta.table_schema = $2
296 + AND c.conindid IS NULL
297 + GROUP BY
298 + i.relname, ix.indisunique, pg_get_expr(ix.indpred, ix.indrelid), am.amname, idx.indexdef;
299 + """,
300 + [spec.table_name, spec.schema],
301 + log: false
302 + )
303 + end
268 304
269 305 %{
270 306 spec
Loading more files…