activerecord-clean-db-structure 0.2.6 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +12 -12
- data/README.md +7 -1
- data/lib/activerecord-clean-db-structure/clean_dump.rb +41 -16
- data/lib/activerecord-clean-db-structure/railtie.rb +2 -0
- data/lib/activerecord-clean-db-structure/tasks/clean_db_structure.rake +13 -1
- data/lib/activerecord-clean-db-structure/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6ee2c62ab134b71d0ccce4e02928038c983c4403
|
4
|
+
data.tar.gz: 6264e28734c7ca2066fefbd2a6ef3dc68e68c1c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf88f74415c68337f2b9f409a358085d4d71c64be4696a942b973a2d34c420024f9bde791f3edb120c1df26357d8c3d0f5d47ed94892437b63ef72b388ae5175
|
7
|
+
data.tar.gz: 1b086ae9152601942d7999ab0491c2d5d4e812e34208688f5bd8d8437530d74c868b0ca6a5639b237b2cb9cdd80c3caa1cd7871c601100b586ee748a86fe5def
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.3.0 2019-05-07
|
4
|
+
|
5
|
+
* Add "ignore_ids" option to allow disabling of primary key substitution logic [#12](https://github.com/lfittl/activerecord-clean-db-structure/pull/12) [Vladimir Dementyev](https://github.com/palkan)
|
6
|
+
* Compatibility with Rails 6 multi-database configuration
|
7
|
+
|
8
|
+
|
3
9
|
## 0.2.6 2018-03-11
|
4
10
|
|
5
11
|
* Fix regular expressions to support schema qualification changes in 10.3
|
data/Gemfile.lock
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
activerecord-clean-db-structure (0.
|
4
|
+
activerecord-clean-db-structure (0.3.0)
|
5
5
|
activerecord (>= 4.2)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activemodel (5.
|
11
|
-
activesupport (= 5.
|
12
|
-
activerecord (5.
|
13
|
-
activemodel (= 5.
|
14
|
-
activesupport (= 5.
|
15
|
-
arel (
|
16
|
-
activesupport (5.
|
10
|
+
activemodel (5.2.3)
|
11
|
+
activesupport (= 5.2.3)
|
12
|
+
activerecord (5.2.3)
|
13
|
+
activemodel (= 5.2.3)
|
14
|
+
activesupport (= 5.2.3)
|
15
|
+
arel (>= 9.0)
|
16
|
+
activesupport (5.2.3)
|
17
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (
|
18
|
+
i18n (>= 0.7, < 2)
|
19
19
|
minitest (~> 5.1)
|
20
20
|
tzinfo (~> 1.1)
|
21
|
-
arel (
|
22
|
-
concurrent-ruby (1.
|
23
|
-
i18n (
|
21
|
+
arel (9.0.0)
|
22
|
+
concurrent-ruby (1.1.5)
|
23
|
+
i18n (1.6.0)
|
24
24
|
concurrent-ruby (~> 1.0)
|
25
25
|
minitest (5.11.3)
|
26
26
|
rake (0.9.6)
|
data/README.md
CHANGED
@@ -30,7 +30,13 @@ Currently the library assumes all your `id` columns are either SERIAL, BIGSERIAL
|
|
30
30
|
|
31
31
|
Multi-column primary keys, as well as tables that don't have `id` as the primary key are not supported right now, and might lead to wrong output.
|
32
32
|
|
33
|
-
|
33
|
+
You can disable this part of the _cleaning_ process in your `config/environments/<environment>.rb` (or `config/application.rb`):
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
Rails.application.configure do
|
37
|
+
config.activerecord_clean_db_structure.ignore_ids = true
|
38
|
+
end
|
39
|
+
```
|
34
40
|
|
35
41
|
## Authors
|
36
42
|
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module ActiveRecordCleanDbStructure
|
2
2
|
class CleanDump
|
3
|
-
attr_reader :dump
|
4
|
-
|
3
|
+
attr_reader :dump, :options
|
4
|
+
|
5
|
+
def initialize(dump, options = {})
|
5
6
|
@dump = dump
|
7
|
+
@options = options
|
6
8
|
end
|
7
9
|
|
8
10
|
def run
|
@@ -33,20 +35,22 @@ module ActiveRecordCleanDbStructure
|
|
33
35
|
# Remove useless comment lines
|
34
36
|
dump.gsub!(/^--$/, '')
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
38
|
+
unless options[:ignore_ids] == true
|
39
|
+
# Reduce noise for id fields by making them SERIAL instead of integer+sequence stuff
|
40
|
+
#
|
41
|
+
# This is a bit optimistic, but works as long as you don't have an id field thats not a sequence/uuid
|
42
|
+
dump.gsub!(/^ id integer NOT NULL(,)?$/, ' id SERIAL PRIMARY KEY\1')
|
43
|
+
dump.gsub!(/^ id bigint NOT NULL(,)?$/, ' id BIGSERIAL PRIMARY KEY\1')
|
44
|
+
dump.gsub!(/^ id uuid DEFAULT (public\.)?uuid_generate_v4\(\) NOT NULL(,)?$/, ' id uuid DEFAULT \1uuid_generate_v4() PRIMARY KEY\2')
|
45
|
+
dump.gsub!(/^ id uuid DEFAULT (public\.)?gen_random_uuid\(\) NOT NULL(,)?$/, ' id uuid DEFAULT \1gen_random_uuid() PRIMARY KEY\2')
|
46
|
+
dump.gsub!(/^CREATE SEQUENCE [\w\.]+_id_seq\s+(AS integer\s+)?START WITH 1\s+INCREMENT BY 1\s+NO MINVALUE\s+NO MAXVALUE\s+CACHE 1;$/, '')
|
47
|
+
dump.gsub!(/^ALTER SEQUENCE [\w\.]+_id_seq OWNED BY .*;$/, '')
|
48
|
+
dump.gsub!(/^ALTER TABLE ONLY [\w\.]+ ALTER COLUMN id SET DEFAULT nextval\('[\w\.]+_id_seq'::regclass\);$/, '')
|
49
|
+
dump.gsub!(/^ALTER TABLE ONLY [\w\.]+\s+ADD CONSTRAINT [\w\.]+_pkey PRIMARY KEY \(id\);$/, '')
|
50
|
+
dump.gsub!(/^-- Name: (\w+\s+)?id; Type: DEFAULT$/, '')
|
51
|
+
dump.gsub!(/^-- .*_id_seq; Type: SEQUENCE.*/, '')
|
52
|
+
dump.gsub!(/^-- Name: (\w+\s+)?\w+_pkey; Type: CONSTRAINT$/, '')
|
53
|
+
end
|
50
54
|
|
51
55
|
# Remove inherited tables
|
52
56
|
inherited_tables_regexp = /-- Name: ([\w_\.]+); Type: TABLE\n\n[^;]+?INHERITS \([\w_\.]+\);/m
|
@@ -62,6 +66,27 @@ module ActiveRecordCleanDbStructure
|
|
62
66
|
dump.gsub!(index_regexp, '')
|
63
67
|
end
|
64
68
|
|
69
|
+
# Remove partitioned tables
|
70
|
+
partitioned_tables_regexp = /-- Name: ([\w_\.]+); Type: TABLE\n\n[^;]+?PARTITION OF [\w_\.]+\n[^;]+?;/m
|
71
|
+
partitioned_tables = dump.scan(partitioned_tables_regexp).map(&:first)
|
72
|
+
dump.gsub!(partitioned_tables_regexp, '')
|
73
|
+
partitioned_tables.each do |partitioned_table|
|
74
|
+
dump.gsub!(/ALTER TABLE ONLY (public\.)?#{partitioned_table}[^;]+;/, '')
|
75
|
+
dump.gsub!(/-- Name: #{partitioned_table} [^;]+; Type: DEFAULT/, '')
|
76
|
+
|
77
|
+
index_regexp = /CREATE INDEX ([\w_]+) ON (public\.)?#{partitioned_table}[^;]+;/m
|
78
|
+
dump.scan(index_regexp).map(&:first).each do |partitioned_table_index|
|
79
|
+
dump.gsub!("-- Name: #{partitioned_table_index}; Type: INDEX ATTACH", '')
|
80
|
+
dump.gsub!("-- Name: #{partitioned_table_index}; Type: INDEX", '')
|
81
|
+
dump.gsub!(/ALTER INDEX ([\w_\.]+) ATTACH PARTITION (public\.)?#{partitioned_table_index};/, '')
|
82
|
+
end
|
83
|
+
dump.gsub!(index_regexp, '')
|
84
|
+
|
85
|
+
dump.gsub!(/-- Name: #{partitioned_table}_pkey; Type: INDEX ATTACH\n\n[^;]+?ATTACH PARTITION (public\.)?#{partitioned_table}_pkey;/, '')
|
86
|
+
end
|
87
|
+
# This is mostly done to allow restoring Postgres 11 output on Postgres 10
|
88
|
+
dump.gsub!(/CREATE INDEX ([\w_]+) ON ONLY/, 'CREATE INDEX \\1 ON')
|
89
|
+
|
65
90
|
# Remove whitespace between schema migration INSERTS to make editing easier
|
66
91
|
dump.gsub!(/^(INSERT INTO schema_migrations .*)\n\n/, "\\1\n")
|
67
92
|
|
@@ -2,12 +2,24 @@ require 'activerecord-clean-db-structure/clean_dump'
|
|
2
2
|
|
3
3
|
Rake::Task['db:structure:dump'].enhance do
|
4
4
|
filenames = ENV['DB_STRUCTURE']
|
5
|
+
|
6
|
+
if ActiveRecord::VERSION::MAJOR >= 6
|
7
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each do |spec_name|
|
8
|
+
filenames ||= Rails.application.config.paths['db'].map do |path|
|
9
|
+
File.join(path, spec_name + '_structure.sql')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
5
14
|
filenames ||= Rails.application.config.paths['db'].map do |path|
|
6
15
|
File.join(path, 'structure.sql')
|
7
16
|
end
|
8
17
|
|
9
18
|
filenames.each do |filename|
|
10
|
-
cleaner = ActiveRecordCleanDbStructure::CleanDump.new(
|
19
|
+
cleaner = ActiveRecordCleanDbStructure::CleanDump.new(
|
20
|
+
File.read(filename),
|
21
|
+
**Rails.application.config.activerecord_clean_db_structure
|
22
|
+
)
|
11
23
|
cleaner.run
|
12
24
|
File.write(filename, cleaner.dump)
|
13
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-clean-db-structure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Fittl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|
79
79
|
rubyforge_project:
|
80
|
-
rubygems_version: 2.
|
80
|
+
rubygems_version: 2.6.13
|
81
81
|
signing_key:
|
82
82
|
specification_version: 4
|
83
83
|
summary: Automatic cleanup for the Rails db/structure.sql file (ActiveRecord/PostgreSQL)
|