exwiw 0.4.7 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6bf23b63e169e4f28dceda8611fe1dc599ed3fba7565a063ac11d7e66e84816e
4
- data.tar.gz: 4768cb5990bc6bb534e38bf458d814ad7be4ff57cc4ecb02565aae245078a7d1
3
+ metadata.gz: 72b680a3d71a0511019bfc4a7ceff70854f4345597949c3256622f46a1121bfb
4
+ data.tar.gz: 1f4b1504f08be2d321f4aaf3c20f297b42fda0ec0646bb0442a29ea3bf79f6a2
5
5
  SHA512:
6
- metadata.gz: bd2b11ab17de73e205639bc917cdd4bff23a793caa282c23f1a987b3391a6bc1550e65078924f82c6e63bdc03c22a9e37b0b1977c2602f5fbe0940b68dd92c13
7
- data.tar.gz: 78681a8c80263454d9bcaef29282de2bf1853b478dd2025382b2a0e4dfe089ea14af8dd970cd0127c8ddf2b71f9a3306024959303052102592203487d387e5a7
6
+ metadata.gz: 0b03406b8239eae881f84f44788763d781c159a037683e1bce78b9dec857fb831cab296cff352768d5bbe1566ca4f207f064d9552f2c8aa8dd358fb447d47800
7
+ data.tar.gz: 87c8e6bc6d959e20813001ee4b6be684e323e8674f3d3e500e2ef7f6b9e0381e4cb4a8129e38bab24b447d7f688a7622f0a80c601a673d20b1331b719db82703
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.4.8] - 2026-06-11
6
+
7
+ ### Added
8
+
9
+ - PostgreSQL: schema dump now includes `CREATE EXTENSION IF NOT EXISTS` statements for user-installed extensions (e.g. `btree_gist`, `pgcrypto`, `uuid-ossp`). Extensions are emitted before any `CREATE TYPE` or `CREATE TABLE` definitions so the dump can be restored on a clean database without manually pre-installing extensions. Non-public schema extensions include a `SCHEMA` clause. ([#92](https://github.com/heyinc/exwiw/pull/92))
10
+
5
11
  ## [0.4.7] - 2026-06-10
6
12
 
7
13
  ### Fixed
@@ -52,6 +52,7 @@ module Exwiw
52
52
  raise "pg_dump failed (exit #{status.exitstatus}): #{stderr}"
53
53
  end
54
54
 
55
+ # Enums are prepended first, then extensions — so extensions end up at the top of the output.
55
56
  enum_types = query_enum_types(table_names)
56
57
  unless enum_types.empty?
57
58
  enum_ddl = DdlPostprocessor.create_type_enum_statements(enum_types)
@@ -59,6 +60,17 @@ module Exwiw
59
60
  stdout = enum_ddl + stdout
60
61
  end
61
62
 
63
+ extensions = query_extensions
64
+ unless extensions.empty?
65
+ ext_ddl = extensions.map do |extname, schema|
66
+ stmt = "CREATE EXTENSION IF NOT EXISTS #{connection.quote_ident(extname)}"
67
+ stmt += " SCHEMA #{connection.quote_ident(schema)}" unless schema == "public"
68
+ "#{stmt};"
69
+ end.join("\n") + "\n\n"
70
+ @logger.debug(" Found #{extensions.size} extension(s) to prepend.")
71
+ stdout = ext_ddl + stdout
72
+ end
73
+
62
74
  idempotent = stdout
63
75
  idempotent = DdlPostprocessor.add_if_not_exists_to_create_schema(idempotent)
64
76
  idempotent = DdlPostprocessor.add_if_not_exists_to_create_sequence(idempotent)
@@ -368,6 +380,17 @@ module Exwiw
368
380
  end
369
381
  end
370
382
 
383
+ private def query_extensions
384
+ sql = <<~SQL
385
+ SELECT e.extname, n.nspname
386
+ FROM pg_extension e
387
+ JOIN pg_namespace n ON n.oid = e.extnamespace
388
+ WHERE e.extname != 'plpgsql'
389
+ ORDER BY e.extname
390
+ SQL
391
+ connection.exec(sql).map { |row| [row["extname"], row["nspname"]] }
392
+ end
393
+
371
394
  private def query_enum_types(table_names)
372
395
  return [] if table_names.empty?
373
396
 
data/lib/exwiw/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Exwiw
4
- VERSION = "0.4.7"
4
+ VERSION = "0.4.8"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exwiw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7
4
+ version: 0.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shia