pg_trunk 0.1.1 → 0.1.2
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 +4 -4
- data/CHANGELOG.md +5 -1
- data/README.md +1 -1
- data/lib/pg_trunk/core/railtie/custom_types.rb +5 -6
- data/lib/pg_trunk/operations/check_constraints/add_check_constraint.rb +18 -12
- data/lib/pg_trunk/operations/check_constraints/drop_check_constraint.rb +18 -10
- data/lib/pg_trunk/operations/check_constraints/rename_check_constraint.rb +12 -6
- data/lib/pg_trunk/operations/check_constraints/validate_check_constraint.rb +6 -2
- data/lib/pg_trunk/operations/composite_types/change_composite_type.rb +24 -18
- data/lib/pg_trunk/operations/composite_types/create_composite_type.rb +10 -9
- data/lib/pg_trunk/operations/composite_types/drop_composite_type.rb +25 -23
- data/lib/pg_trunk/operations/composite_types/rename_composite_type.rb +3 -3
- data/lib/pg_trunk/operations/domains/change_domain.rb +27 -24
- data/lib/pg_trunk/operations/domains/create_domain.rb +11 -11
- data/lib/pg_trunk/operations/domains/drop_domain.rb +19 -13
- data/lib/pg_trunk/operations/domains/rename_domain.rb +3 -1
- data/lib/pg_trunk/operations/enums/change_enum.rb +13 -11
- data/lib/pg_trunk/operations/enums/create_enum.rb +9 -9
- data/lib/pg_trunk/operations/enums/drop_enum.rb +18 -10
- data/lib/pg_trunk/operations/enums/rename_enum.rb +3 -1
- data/lib/pg_trunk/operations/foreign_keys/add_foreign_key.rb +23 -17
- data/lib/pg_trunk/operations/foreign_keys/drop_foreign_key.rb +17 -11
- data/lib/pg_trunk/operations/foreign_keys/rename_foreign_key.rb +11 -5
- data/lib/pg_trunk/operations/functions/change_function.rb +24 -21
- data/lib/pg_trunk/operations/functions/create_function.rb +34 -26
- data/lib/pg_trunk/operations/functions/drop_function.rb +28 -18
- data/lib/pg_trunk/operations/functions/rename_function.rb +6 -2
- data/lib/pg_trunk/operations/materialized_views/change_materialized_view.rb +24 -17
- data/lib/pg_trunk/operations/materialized_views/create_materialized_view.rb +37 -29
- data/lib/pg_trunk/operations/materialized_views/drop_materialized_view.rb +20 -10
- data/lib/pg_trunk/operations/materialized_views/refresh_materialized_view.rb +3 -1
- data/lib/pg_trunk/operations/materialized_views/rename_materialized_view.rb +8 -4
- data/lib/pg_trunk/operations/procedures/change_procedure.rb +22 -18
- data/lib/pg_trunk/operations/procedures/create_procedure.rb +26 -18
- data/lib/pg_trunk/operations/procedures/drop_procedure.rb +18 -10
- data/lib/pg_trunk/operations/procedures/rename_procedure.rb +6 -2
- data/lib/pg_trunk/operations/statistics/create_statistics.rb +32 -24
- data/lib/pg_trunk/operations/statistics/drop_statistics.rb +26 -18
- data/lib/pg_trunk/operations/statistics/rename_statistics.rb +3 -1
- data/lib/pg_trunk/operations/triggers/change_trigger.rb +9 -7
- data/lib/pg_trunk/operations/triggers/create_trigger.rb +26 -20
- data/lib/pg_trunk/operations/triggers/drop_trigger.rb +16 -10
- data/lib/pg_trunk/operations/views/change_view.rb +20 -14
- data/lib/pg_trunk/operations/views/create_view.rb +18 -10
- data/lib/pg_trunk/operations/views/drop_view.rb +19 -9
- data/lib/pg_trunk/operations/views/rename_view.rb +6 -2
- data/lib/pg_trunk/version.rb +1 -1
- metadata +1 -1
@@ -12,14 +12,18 @@
|
|
12
12
|
# # A materialized view can be renamed by changing both the name
|
13
13
|
# # and the schema (namespace) it belongs to.
|
14
14
|
# #
|
15
|
-
# #
|
15
|
+
# # ```ruby
|
16
|
+
# # rename_materialized_view "views.admin_users", to: "admins"
|
17
|
+
# # ```
|
16
18
|
# #
|
17
19
|
# # With the `if_exists: true` option, the operation won't fail
|
18
20
|
# # even when the view wasn't existed.
|
19
21
|
# #
|
20
|
-
# #
|
21
|
-
# #
|
22
|
-
# #
|
22
|
+
# # ```ruby
|
23
|
+
# # rename_materialized_view "admin_users",
|
24
|
+
# # to: "admins",
|
25
|
+
# # if_exists: true
|
26
|
+
# # ```
|
23
27
|
# #
|
24
28
|
# # At the same time, the option makes a migration irreversible
|
25
29
|
# # due to uncertainty of the previous state of the database.
|
@@ -17,31 +17,35 @@
|
|
17
17
|
# # You can change any property except for the name
|
18
18
|
# # (use `rename_function` instead) and `language`.
|
19
19
|
# #
|
20
|
-
# #
|
21
|
-
# #
|
22
|
-
# #
|
23
|
-
# #
|
24
|
-
# # p.security :invoker
|
25
|
-
# # p.comment "Multiplies 2 integers"
|
20
|
+
# # ```ruby
|
21
|
+
# # change_procedure "metadata.set_foo(a int)" do |p|
|
22
|
+
# # p.body <<~SQL
|
23
|
+
# # SET foo = a
|
26
24
|
# # SQL
|
25
|
+
# # p.security :invoker
|
26
|
+
# # p.comment "Multiplies 2 integers"
|
27
|
+
# # SQL
|
28
|
+
# # ```
|
27
29
|
# #
|
28
30
|
# # The example above is not invertible because of uncertainty
|
29
31
|
# # about the previous state of body and comment.
|
30
32
|
# # To define them, use a from options (available in a block syntax only):
|
31
33
|
# #
|
32
|
-
# #
|
33
|
-
# #
|
34
|
-
# #
|
35
|
-
# #
|
36
|
-
# # SET foo = -a
|
37
|
-
# # SQL
|
38
|
-
# # p.comment <<~MSG, from: <<~MSG
|
39
|
-
# # Multiplies 2 integers
|
40
|
-
# # MSG
|
41
|
-
# # Multiplies ints
|
42
|
-
# # MSG
|
43
|
-
# # p.security :invoker
|
34
|
+
# # ```ruby
|
35
|
+
# # change_procedure "metadata.set_foo(a int)" do |p|
|
36
|
+
# # p.body <<~SQL, from: <<~SQL
|
37
|
+
# # SET foo = a
|
44
38
|
# # SQL
|
39
|
+
# # SET foo = -a
|
40
|
+
# # SQL
|
41
|
+
# # p.comment <<~MSG, from: <<~MSG
|
42
|
+
# # Multiplies 2 integers
|
43
|
+
# # MSG
|
44
|
+
# # Multiplies ints
|
45
|
+
# # MSG
|
46
|
+
# # p.security :invoker
|
47
|
+
# # SQL
|
48
|
+
# # ```
|
45
49
|
# #
|
46
50
|
# # Like in the other operations, the procedure can be
|
47
51
|
# # identified by a qualified name (with types of arguments).
|
@@ -23,37 +23,45 @@
|
|
23
23
|
# #
|
24
24
|
# # The procedure can be created either using inline syntax
|
25
25
|
# #
|
26
|
-
# #
|
27
|
-
# #
|
28
|
-
# #
|
29
|
-
# #
|
26
|
+
# # ```ruby
|
27
|
+
# # create_procedure "metadata.set_foo(a int)",
|
28
|
+
# # language: :sql,
|
29
|
+
# # body: "SET foo = a",
|
30
|
+
# # comment: "Sets foo value"
|
31
|
+
# # ```
|
30
32
|
# #
|
31
33
|
# # or using a block:
|
32
34
|
# #
|
33
|
-
# #
|
34
|
-
# #
|
35
|
-
# #
|
36
|
-
# #
|
37
|
-
# #
|
38
|
-
# # p.security :invoker # (default), also :definer
|
39
|
-
# # p.comment "Multiplies 2 integers"
|
35
|
+
# # ```ruby
|
36
|
+
# # create_procedure "metadata.set_foo(a int)" do |p|
|
37
|
+
# # p.language "sql" # (default)
|
38
|
+
# # p.body <<~SQL
|
39
|
+
# # SET foo = a
|
40
40
|
# # SQL
|
41
|
+
# # p.security :invoker # (default), also :definer
|
42
|
+
# # p.comment "Multiplies 2 integers"
|
43
|
+
# # SQL
|
44
|
+
# # ```
|
41
45
|
# #
|
42
46
|
# # With a `replace_existing: true` option,
|
43
47
|
# # it will be created using the `CREATE OR REPLACE` clause.
|
44
48
|
# # In this case the migration is irreversible because we
|
45
49
|
# # don't know if and how to restore its previous definition.
|
46
50
|
# #
|
47
|
-
# #
|
48
|
-
# #
|
49
|
-
# #
|
51
|
+
# # ```ruby
|
52
|
+
# # create_procedure "set_foo(a int)",
|
53
|
+
# # body: "SET foo = a",
|
54
|
+
# # replace_existing: true
|
55
|
+
# # ```
|
50
56
|
# #
|
51
57
|
# # A procedure without arguments is supported as well
|
52
58
|
# #
|
53
|
-
# #
|
54
|
-
# #
|
55
|
-
# #
|
56
|
-
# #
|
59
|
+
# # ```ruby
|
60
|
+
# # # the same as "do_something()"
|
61
|
+
# # create_procedure "do_something" do |p|
|
62
|
+
# # # ...
|
63
|
+
# # end
|
64
|
+
# # ```
|
57
65
|
# def create_procedure(name, **options, &block); end
|
58
66
|
# end
|
59
67
|
module PGTrunk::Operations::Procedures
|
@@ -18,31 +18,39 @@
|
|
18
18
|
# #
|
19
19
|
# # A procedure can be dropped by a plain name:
|
20
20
|
# #
|
21
|
-
# #
|
21
|
+
# # ```ruby
|
22
|
+
# # drop_procedure "set_foo"
|
23
|
+
# # ```
|
22
24
|
# #
|
23
25
|
# # If several overloaded procedures have the name,
|
24
26
|
# # then you must specify the signature having
|
25
27
|
# # types of attributes at least:
|
26
28
|
# #
|
27
|
-
# #
|
29
|
+
# # ```ruby
|
30
|
+
# # drop_procedure "set_foo(int)"
|
31
|
+
# # ```
|
28
32
|
# #
|
29
33
|
# # In both cases above the operation is irreversible. To make it
|
30
34
|
# # inverted you have to provide a full signature along with
|
31
35
|
# # the body definition. The other options are supported as well:
|
32
36
|
# #
|
33
|
-
# #
|
34
|
-
# #
|
35
|
-
# #
|
36
|
-
# #
|
37
|
-
# #
|
38
|
-
# # p.security :invoker # (default), also :definer
|
39
|
-
# # p.comment "Multiplies 2 integers"
|
37
|
+
# # ```ruby
|
38
|
+
# # drop_procedure "metadata.set_foo(a int)" do |p|
|
39
|
+
# # p.language "sql" # (default)
|
40
|
+
# # p.body <<~SQL
|
41
|
+
# # SET foo = a
|
40
42
|
# # SQL
|
43
|
+
# # p.security :invoker # (default), also :definer
|
44
|
+
# # p.comment "Multiplies 2 integers"
|
45
|
+
# # SQL
|
46
|
+
# # ```
|
41
47
|
# #
|
42
48
|
# # The operation can be called with `if_exists` option. In this case
|
43
49
|
# # it would do nothing when no procedure existed.
|
44
50
|
# #
|
45
|
-
# #
|
51
|
+
# # ```ruby
|
52
|
+
# # drop_procedure "metadata.set_foo(a int)", if_exists: true
|
53
|
+
# # ```
|
46
54
|
# #
|
47
55
|
# # Notice, that this option make the operation irreversible because of
|
48
56
|
# # uncertainty about the previous state of the database.
|
@@ -13,11 +13,15 @@
|
|
13
13
|
# #
|
14
14
|
# # If there are no overloaded procedures, then you can use a plain name:
|
15
15
|
# #
|
16
|
-
# #
|
16
|
+
# # ```ruby
|
17
|
+
# # rename_procedure "math.set_foo", to: "public.foo_setup"
|
18
|
+
# # ```
|
17
19
|
# #
|
18
20
|
# # otherwise the types of attributes must be explicitly specified.
|
19
21
|
# #
|
20
|
-
# #
|
22
|
+
# # ```ruby
|
23
|
+
# # rename_procedure "math.set_foo(int)", to: "public.foo_setup"
|
24
|
+
# # ```
|
21
25
|
# #
|
22
26
|
# # Any specification of attributes in `to:` option
|
23
27
|
# # is ignored because they cannot be changed anyway.
|
@@ -19,40 +19,48 @@
|
|
19
19
|
# #
|
20
20
|
# # The statistics can be created with explicit name:
|
21
21
|
# #
|
22
|
-
# #
|
23
|
-
# #
|
24
|
-
# #
|
25
|
-
# #
|
26
|
-
# #
|
27
|
-
# #
|
22
|
+
# # ```ruby
|
23
|
+
# # create_statistics "users_stats" do |s|
|
24
|
+
# # s.table "users"
|
25
|
+
# # s.columns "family", "name"
|
26
|
+
# # s.kinds :dependencies, :mcv, :ndistinct
|
27
|
+
# # s.comment "Statistics for users' names and families"
|
28
|
+
# # SQL
|
29
|
+
# # ```
|
28
30
|
# #
|
29
31
|
# # The name can be generated as well:
|
30
32
|
# #
|
31
|
-
# #
|
32
|
-
# #
|
33
|
-
# #
|
34
|
-
# #
|
35
|
-
# #
|
36
|
-
# #
|
33
|
+
# # ```ruby
|
34
|
+
# # create_statistics do |s|
|
35
|
+
# # s.table "users"
|
36
|
+
# # s.columns "family", "name"
|
37
|
+
# # s.kinds :dependencies, :mcv, :ndistinct
|
38
|
+
# # s.comment "Statistics for users' names and families"
|
39
|
+
# # SQL
|
40
|
+
# # ```
|
37
41
|
# #
|
38
42
|
# # Since v14 PostgreSQL have supported expressions in addition to columns:
|
39
43
|
# #
|
40
|
-
# #
|
41
|
-
# #
|
42
|
-
# #
|
43
|
-
# #
|
44
|
-
# #
|
45
|
-
# #
|
46
|
-
# #
|
44
|
+
# # ```ruby
|
45
|
+
# # create_statistics "users_stats" do |s|
|
46
|
+
# # s.table "users"
|
47
|
+
# # s.columns "family"
|
48
|
+
# # s.expression "length(name)"
|
49
|
+
# # s.kinds :dependencies, :mcv, :ndistinct
|
50
|
+
# # s.comment "Statistics for users' name lengths and families"
|
51
|
+
# # SQL
|
52
|
+
# # ```
|
47
53
|
# #
|
48
54
|
# # as well as statistics for the sole expression (kinds must be blank)
|
49
55
|
# # by columns of some table.
|
50
56
|
# #
|
51
|
-
# #
|
52
|
-
# #
|
53
|
-
# #
|
54
|
-
# #
|
55
|
-
# #
|
57
|
+
# # ```ruby
|
58
|
+
# # create_statistics "users_stats" do |s|
|
59
|
+
# # s.table "users"
|
60
|
+
# # s.expression "length(name || ' ' || family)"
|
61
|
+
# # s.comment "Statistics for full name lengths"
|
62
|
+
# # SQL
|
63
|
+
# # ```
|
56
64
|
# #
|
57
65
|
# # Use `if_not_exists: true` to suppress error in case the statistics
|
58
66
|
# # has already been created. This option, though, makes the migration
|
@@ -19,38 +19,46 @@
|
|
19
19
|
# #
|
20
20
|
# # A statistics can be dropped by its name only:
|
21
21
|
# #
|
22
|
-
# #
|
22
|
+
# # ```ruby
|
23
|
+
# # drop_statistics "my_stats"
|
24
|
+
# # ```
|
23
25
|
# #
|
24
26
|
# # Such operation is irreversible. To make it inverted
|
25
27
|
# # you have to provide a full definition:
|
26
28
|
# #
|
27
|
-
# #
|
28
|
-
# #
|
29
|
-
# #
|
30
|
-
# #
|
31
|
-
# #
|
32
|
-
# #
|
33
|
-
# # s.kinds :dependency, :mcv, :ndistinct
|
34
|
-
# # p.comment "Statistics for name, firstname, and rough age"
|
29
|
+
# # ```ruby
|
30
|
+
# # drop_statistics "users_stat" do |s|
|
31
|
+
# # s.table "users"
|
32
|
+
# # s.columns "firstname", "name"
|
33
|
+
# # s.expression <<~SQL
|
34
|
+
# # round(age, 10)
|
35
35
|
# # SQL
|
36
|
+
# # s.kinds :dependency, :mcv, :ndistinct
|
37
|
+
# # s.comment "Statistics for name, firstname, and rough age"
|
38
|
+
# # SQL
|
39
|
+
# # ```
|
36
40
|
# #
|
37
41
|
# # If the statistics was anonymous (used the generated name),
|
38
42
|
# # it can be dropped without defining the name as well:
|
39
43
|
# #
|
40
|
-
# #
|
41
|
-
# #
|
42
|
-
# #
|
43
|
-
# #
|
44
|
-
# #
|
45
|
-
# #
|
46
|
-
# # s.kinds :dependency, :mcv, :ndistinct
|
47
|
-
# # p.comment "Statistics for name, firstname, and rough age"
|
44
|
+
# # ```ruby
|
45
|
+
# # drop_statistics do |s|
|
46
|
+
# # s.table "users"
|
47
|
+
# # s.columns "firstname", "name"
|
48
|
+
# # s.expression <<~SQL
|
49
|
+
# # round(age, 10)
|
48
50
|
# # SQL
|
51
|
+
# # s.kinds :dependency, :mcv, :ndistinct
|
52
|
+
# # s.comment "Statistics for name, firstname, and rough age"
|
53
|
+
# # SQL
|
54
|
+
# # ```
|
49
55
|
# #
|
50
56
|
# # The operation can be called with `if_exists` option. In this case
|
51
57
|
# # it would do nothing when no statistics existed.
|
52
58
|
# #
|
53
|
-
# #
|
59
|
+
# # ```ruby
|
60
|
+
# # drop_statistics "unknown_statistics", if_exists: true
|
61
|
+
# # ```
|
54
62
|
# #
|
55
63
|
# # Notice, that this option make the operation irreversible because of
|
56
64
|
# # uncertainty about the previous state of the database.
|
@@ -11,7 +11,9 @@
|
|
11
11
|
# # A custom statistics can be renamed by changing both the name
|
12
12
|
# # and the schema (namespace) it belongs to.
|
13
13
|
# #
|
14
|
-
# #
|
14
|
+
# # ```ruby
|
15
|
+
# # rename_statistics "math.my_stat", to: "public.my_stats"
|
16
|
+
# # ```
|
15
17
|
# #
|
16
18
|
# # The operation is always reversible.
|
17
19
|
# def rename_statistics(name, to:); end
|
@@ -13,13 +13,15 @@
|
|
13
13
|
# #
|
14
14
|
# # The trigger can be changed using `CREATE OR REPLACE TRIGGER` command:
|
15
15
|
# #
|
16
|
-
# #
|
17
|
-
# #
|
18
|
-
# #
|
19
|
-
# #
|
20
|
-
# #
|
21
|
-
# #
|
22
|
-
# #
|
16
|
+
# # ```ruby
|
17
|
+
# # change_trigger "users", "do_something" do |t|
|
18
|
+
# # t.function "do_something()", from: "do_something_different()"
|
19
|
+
# # t.for_each :row # from: :statement
|
20
|
+
# # t.type :after, from: :before
|
21
|
+
# # t.events %i[insert update], from: %i[insert]
|
22
|
+
# # t.comment "Does something useful", from: ""
|
23
|
+
# # end
|
24
|
+
# # ```
|
23
25
|
# def create_trigger(table, name = nil, **options, &block); end
|
24
26
|
# end
|
25
27
|
module PGTrunk::Operations::Triggers
|
@@ -25,34 +25,40 @@
|
|
25
25
|
# #
|
26
26
|
# # The trigger can be created either using inline syntax
|
27
27
|
# #
|
28
|
-
# #
|
29
|
-
# #
|
30
|
-
# #
|
31
|
-
# #
|
32
|
-
# #
|
33
|
-
# #
|
28
|
+
# # ```ruby
|
29
|
+
# # create_trigger "users", "do_something",
|
30
|
+
# # function: "do_something()",
|
31
|
+
# # for_each: :row,
|
32
|
+
# # type: :after,
|
33
|
+
# # events: %i[insert update],
|
34
|
+
# # comment: "Does something useful"
|
35
|
+
# # ```
|
34
36
|
# #
|
35
37
|
# # or using a block:
|
36
38
|
# #
|
37
|
-
# #
|
38
|
-
# #
|
39
|
-
# #
|
40
|
-
# #
|
41
|
-
# #
|
42
|
-
# #
|
43
|
-
# #
|
44
|
-
# #
|
45
|
-
# #
|
39
|
+
# # ```ruby
|
40
|
+
# # create_trigger do |t|
|
41
|
+
# # t.table "users"
|
42
|
+
# # t.name "do_something"
|
43
|
+
# # t.function "do_something()"
|
44
|
+
# # t.for_each :row
|
45
|
+
# # t.type :after
|
46
|
+
# # t.events %i[insert update]
|
47
|
+
# # t.comment "Does something useful"
|
48
|
+
# # end
|
49
|
+
# # ```
|
46
50
|
# #
|
47
51
|
# # With a `replace_existing: true` option,
|
48
52
|
# # it will be created using the `CREATE OR REPLACE` clause.
|
49
53
|
# # (Available in PostgreSQL v14+).
|
50
54
|
# #
|
51
|
-
# #
|
52
|
-
# #
|
53
|
-
# #
|
54
|
-
# #
|
55
|
-
# #
|
55
|
+
# # ```ruby
|
56
|
+
# # create_trigger "users", "do_something",
|
57
|
+
# # function: "do_something()",
|
58
|
+
# # type: :after,
|
59
|
+
# # events: %i[insert update],
|
60
|
+
# # replace_previous: true
|
61
|
+
# # ```
|
56
62
|
# #
|
57
63
|
# # In this case the migration is irreversible because we
|
58
64
|
# # don't know if and how to restore its previous definition.
|
@@ -25,18 +25,22 @@
|
|
25
25
|
# #
|
26
26
|
# # A trigger can be dropped by a table and name:
|
27
27
|
# #
|
28
|
-
# #
|
28
|
+
# # ```ruby
|
29
|
+
# # drop_trigger "users", "do_something"
|
30
|
+
# # ```
|
29
31
|
# #
|
30
32
|
# # the default name can be restored from its attributes as well.
|
31
33
|
# #
|
32
|
-
# #
|
33
|
-
# #
|
34
|
-
# #
|
35
|
-
# #
|
36
|
-
# #
|
37
|
-
# #
|
38
|
-
# #
|
39
|
-
# #
|
34
|
+
# # ```ruby
|
35
|
+
# # drop_trigger "users" do |t|
|
36
|
+
# # t.function "send_notifications()"
|
37
|
+
# # t.for_each :row
|
38
|
+
# # t.type :after
|
39
|
+
# # t.events %i[update]
|
40
|
+
# # t.columns %w[email phone]
|
41
|
+
# # t.comment "Does something"
|
42
|
+
# # end
|
43
|
+
# # ```
|
40
44
|
# #
|
41
45
|
# # Notice, that you have to specify all attributes to make
|
42
46
|
# # the operation reversible.
|
@@ -44,7 +48,9 @@
|
|
44
48
|
# # The operation can be called with `if_exists` option. In this case
|
45
49
|
# # it would do nothing when no trigger existed.
|
46
50
|
# #
|
47
|
-
# #
|
51
|
+
# # ```ruby
|
52
|
+
# # drop_trigger "users", "unknown_trigger", if_exists: true
|
53
|
+
# # ```
|
48
54
|
# #
|
49
55
|
# # This option, though, makes the operation irreversible because of
|
50
56
|
# # uncertainty of the previous state of the database.
|
@@ -12,20 +12,24 @@
|
|
12
12
|
# #
|
13
13
|
# # The operation replaces the view with a new definition(s):
|
14
14
|
# #
|
15
|
-
# #
|
16
|
-
# #
|
17
|
-
# #
|
18
|
-
# #
|
19
|
-
# #
|
20
|
-
# #
|
21
|
-
# #
|
15
|
+
# # ```ruby
|
16
|
+
# # change_view "admin_users" do |v|
|
17
|
+
# # v.sql_definition: <<~SQL, from: <<~SQL
|
18
|
+
# # SELECT id, name FROM users WHERE admin;
|
19
|
+
# # SQL
|
20
|
+
# # SELECT * FROM users WHERE admin;
|
21
|
+
# # SQL
|
22
|
+
# # end
|
23
|
+
# # ```
|
22
24
|
# #
|
23
25
|
# # For some compatibility to the `scenic` gem, we also support
|
24
26
|
# # adding a definition via its version:
|
25
27
|
# #
|
26
|
-
# #
|
27
|
-
# #
|
28
|
-
# #
|
28
|
+
# # ```ruby
|
29
|
+
# # change_view "admin_users" do |v|
|
30
|
+
# # v.version 2, from: 1
|
31
|
+
# # end
|
32
|
+
# # ```
|
29
33
|
# #
|
30
34
|
# # It is expected, that both `db/views/admin_users_v01.sql`
|
31
35
|
# # and `db/views/admin_users_v02.sql` to contain SQL snippets.
|
@@ -36,10 +40,12 @@
|
|
36
40
|
# # You can also (re)set a comment describing the view,
|
37
41
|
# # and the check option (either `:local` or `:cascaded`):
|
38
42
|
# #
|
39
|
-
# #
|
40
|
-
# #
|
41
|
-
# #
|
42
|
-
# #
|
43
|
+
# # ```ruby
|
44
|
+
# # change_view "admin_users" do |v|
|
45
|
+
# # v.check :local, from: :cascaded
|
46
|
+
# # v.comment "Admin users only", from: ""
|
47
|
+
# # end
|
48
|
+
# # ```
|
43
49
|
# def change_view(name, **options, &block); end
|
44
50
|
# end
|
45
51
|
module PGTrunk::Operations::Views
|
@@ -18,14 +18,18 @@
|
|
18
18
|
# #
|
19
19
|
# # The operation creates the view using its `sql_definition`:
|
20
20
|
# #
|
21
|
-
# #
|
22
|
-
# #
|
23
|
-
# #
|
21
|
+
# # ```ruby
|
22
|
+
# # create_view("views.admin_users", sql_definition: <<~SQL)
|
23
|
+
# # SELECT id, name FROM users WHERE admin;
|
24
|
+
# # SQL
|
25
|
+
# # ```
|
24
26
|
# #
|
25
27
|
# # For compatibility to the `scenic` gem, we also support
|
26
28
|
# # adding a definition via its version:
|
27
29
|
# #
|
28
|
-
# #
|
30
|
+
# # ```ruby
|
31
|
+
# # create_view "admin_users", version: 1
|
32
|
+
# # ```
|
29
33
|
# #
|
30
34
|
# # It is expected, that a `db/views/admin_users_v01.sql`
|
31
35
|
# # to contain the SQL snippet.
|
@@ -33,17 +37,21 @@
|
|
33
37
|
# # You can also set a comment describing the view, and the check option
|
34
38
|
# # (either `:local` or `:cascaded`):
|
35
39
|
# #
|
36
|
-
# #
|
37
|
-
# #
|
38
|
-
# #
|
39
|
-
# #
|
40
|
-
# #
|
40
|
+
# # ```ruby
|
41
|
+
# # create_view "admin_users" do |v|
|
42
|
+
# # v.sql_definition "SELECT id, name FROM users WHERE admin;"
|
43
|
+
# # v.check :local
|
44
|
+
# # v.comment "Admin users only"
|
45
|
+
# # end
|
46
|
+
# # ```
|
41
47
|
# #
|
42
48
|
# # With the `replace_existing: true` option the operation
|
43
49
|
# # would use `CREATE OR REPLACE VIEW` command, so it
|
44
50
|
# # can be used to "update" (or reload) the existing view.
|
45
51
|
# #
|
46
|
-
# #
|
52
|
+
# # ```ruby
|
53
|
+
# # create_view "admin_users", version: 1, replace_existing: true
|
54
|
+
# # ```
|
47
55
|
# #
|
48
56
|
# # This option makes an operation irreversible due to uncertainty
|
49
57
|
# # of the previous state of the database.
|
@@ -21,30 +21,40 @@
|
|
21
21
|
# # The operation drops the existing view identified by its
|
22
22
|
# # qualified name (it can include a schema).
|
23
23
|
# #
|
24
|
-
# #
|
24
|
+
# # ```ruby
|
25
|
+
# # drop_view "views.admin_users"
|
26
|
+
# # ```
|
25
27
|
# #
|
26
28
|
# # To make the operation invertible, use the same options
|
27
29
|
# # as in the `create_view` operation.
|
28
30
|
# #
|
29
|
-
# #
|
30
|
-
# #
|
31
|
-
# #
|
32
|
-
# #
|
33
|
-
# #
|
31
|
+
# # ```ruby
|
32
|
+
# # drop_view "views.admin_users" do |v|
|
33
|
+
# # v.sql_definition "SELECT name, email FROM users WHERE admin;"
|
34
|
+
# # v.check :local
|
35
|
+
# # v.comment "Admin users only"
|
36
|
+
# # end
|
37
|
+
# # ```
|
34
38
|
# #
|
35
39
|
# # You can also use a version-base SQL definition like:
|
36
40
|
# #
|
37
|
-
# #
|
41
|
+
# # ```ruby
|
42
|
+
# # drop_view "views.admin_users", revert_to_version: 1
|
43
|
+
# # ```
|
38
44
|
# #
|
39
45
|
# # With the `force: :cascade` option the operation would remove
|
40
46
|
# # all the objects which depend on the view.
|
41
47
|
# #
|
42
|
-
# #
|
48
|
+
# # ```ruby
|
49
|
+
# # drop_view "views.admin_users", force: :cascade
|
50
|
+
# # ```
|
43
51
|
# #
|
44
52
|
# # With the `if_exists: true` option the operation won't fail
|
45
53
|
# # even when the view was absent in the database.
|
46
54
|
# #
|
47
|
-
# #
|
55
|
+
# # ```ruby
|
56
|
+
# # drop_view "views.admin_users", if_exists: true
|
57
|
+
# # ```
|
48
58
|
# #
|
49
59
|
# # Both options make an operation irreversible due to uncertainty
|
50
60
|
# # of the previous state of the database.
|