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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -1
  3. data/README.md +1 -1
  4. data/lib/pg_trunk/core/railtie/custom_types.rb +5 -6
  5. data/lib/pg_trunk/operations/check_constraints/add_check_constraint.rb +18 -12
  6. data/lib/pg_trunk/operations/check_constraints/drop_check_constraint.rb +18 -10
  7. data/lib/pg_trunk/operations/check_constraints/rename_check_constraint.rb +12 -6
  8. data/lib/pg_trunk/operations/check_constraints/validate_check_constraint.rb +6 -2
  9. data/lib/pg_trunk/operations/composite_types/change_composite_type.rb +24 -18
  10. data/lib/pg_trunk/operations/composite_types/create_composite_type.rb +10 -9
  11. data/lib/pg_trunk/operations/composite_types/drop_composite_type.rb +25 -23
  12. data/lib/pg_trunk/operations/composite_types/rename_composite_type.rb +3 -3
  13. data/lib/pg_trunk/operations/domains/change_domain.rb +27 -24
  14. data/lib/pg_trunk/operations/domains/create_domain.rb +11 -11
  15. data/lib/pg_trunk/operations/domains/drop_domain.rb +19 -13
  16. data/lib/pg_trunk/operations/domains/rename_domain.rb +3 -1
  17. data/lib/pg_trunk/operations/enums/change_enum.rb +13 -11
  18. data/lib/pg_trunk/operations/enums/create_enum.rb +9 -9
  19. data/lib/pg_trunk/operations/enums/drop_enum.rb +18 -10
  20. data/lib/pg_trunk/operations/enums/rename_enum.rb +3 -1
  21. data/lib/pg_trunk/operations/foreign_keys/add_foreign_key.rb +23 -17
  22. data/lib/pg_trunk/operations/foreign_keys/drop_foreign_key.rb +17 -11
  23. data/lib/pg_trunk/operations/foreign_keys/rename_foreign_key.rb +11 -5
  24. data/lib/pg_trunk/operations/functions/change_function.rb +24 -21
  25. data/lib/pg_trunk/operations/functions/create_function.rb +34 -26
  26. data/lib/pg_trunk/operations/functions/drop_function.rb +28 -18
  27. data/lib/pg_trunk/operations/functions/rename_function.rb +6 -2
  28. data/lib/pg_trunk/operations/materialized_views/change_materialized_view.rb +24 -17
  29. data/lib/pg_trunk/operations/materialized_views/create_materialized_view.rb +37 -29
  30. data/lib/pg_trunk/operations/materialized_views/drop_materialized_view.rb +20 -10
  31. data/lib/pg_trunk/operations/materialized_views/refresh_materialized_view.rb +3 -1
  32. data/lib/pg_trunk/operations/materialized_views/rename_materialized_view.rb +8 -4
  33. data/lib/pg_trunk/operations/procedures/change_procedure.rb +22 -18
  34. data/lib/pg_trunk/operations/procedures/create_procedure.rb +26 -18
  35. data/lib/pg_trunk/operations/procedures/drop_procedure.rb +18 -10
  36. data/lib/pg_trunk/operations/procedures/rename_procedure.rb +6 -2
  37. data/lib/pg_trunk/operations/statistics/create_statistics.rb +32 -24
  38. data/lib/pg_trunk/operations/statistics/drop_statistics.rb +26 -18
  39. data/lib/pg_trunk/operations/statistics/rename_statistics.rb +3 -1
  40. data/lib/pg_trunk/operations/triggers/change_trigger.rb +9 -7
  41. data/lib/pg_trunk/operations/triggers/create_trigger.rb +26 -20
  42. data/lib/pg_trunk/operations/triggers/drop_trigger.rb +16 -10
  43. data/lib/pg_trunk/operations/views/change_view.rb +20 -14
  44. data/lib/pg_trunk/operations/views/create_view.rb +18 -10
  45. data/lib/pg_trunk/operations/views/drop_view.rb +19 -9
  46. data/lib/pg_trunk/operations/views/rename_view.rb +6 -2
  47. data/lib/pg_trunk/version.rb +1 -1
  48. metadata +1 -1
@@ -16,28 +16,36 @@
16
16
  # # The operation drops a enumerated type identified by its
17
17
  # # qualified name (it can include a schema).
18
18
  # #
19
- # # drop_enum "finances.currency"
19
+ # # ```ruby
20
+ # # drop_enum "finances.currency"
21
+ # # ```
20
22
  # #
21
23
  # # To make the operation invertible, use the same options
22
24
  # # as in the `create_enum` operation.
23
25
  # #
24
- # # drop_enum "finances.currency" do |e|
25
- # # e.values "BTC", "EUR", "GBP", "USD"
26
- # # e.value "JPY" # the alternative way to add a value
27
- # # e.comment <<~COMMENT
28
- # # The list of values for supported currencies.
29
- # # COMMENT
30
- # # end
26
+ # # ```ruby
27
+ # # drop_enum "finances.currency" do |e|
28
+ # # e.values "BTC", "EUR", "GBP", "USD"
29
+ # # e.value "JPY" # the alternative way to add a value
30
+ # # e.comment <<~COMMENT
31
+ # # The list of values for supported currencies.
32
+ # # COMMENT
33
+ # # end
34
+ # # ```
31
35
  # #
32
36
  # # With the `force: :cascade` option the operation would remove
33
37
  # # all the objects that use the type.
34
38
  # #
35
- # # drop_enum "finances.currency", force: :cascade
39
+ # # ```ruby
40
+ # # drop_enum "finances.currency", force: :cascade
41
+ # # ```
36
42
  # #
37
43
  # # With the `if_exists: true` option the operation won't fail
38
44
  # # even when the view was absent in the database.
39
45
  # #
40
- # # drop_enum "finances.currency", if_exists: true
46
+ # # ```ruby
47
+ # # drop_enum "finances.currency", if_exists: true
48
+ # # ```
41
49
  # #
42
50
  # # Both options make a migration irreversible due to uncertainty
43
51
  # # of the previous state of the database.
@@ -10,7 +10,9 @@
10
10
  # #
11
11
  # # @example:
12
12
  # #
13
- # # rename_enum "currencies", to: "finances.currency"
13
+ # # ```ruby
14
+ # # rename_enum "currencies", to: "finances.currency"
15
+ # # ```
14
16
  # #
15
17
  # # The operation is always reversible.
16
18
  # def rename_enum(name, to:); end
@@ -26,29 +26,35 @@
26
26
  # # The table and reference of the new key must be set explicitly.
27
27
  # # All the rest (including the name) can be generated by default:
28
28
  # #
29
- # # # same as `..., column: 'role_id', primary_key: 'id'`
30
- # # add_foreign_key :users, :roles
29
+ # # ```ruby
30
+ # # # same as `..., column: 'role_id', primary_key: 'id'`
31
+ # # add_foreign_key :users, :roles
32
+ # # ```
31
33
  # #
32
34
  # # The block syntax can be used for any argument:
33
35
  # #
34
- # # add_foreign_key do |k|
35
- # # k.table "users"
36
- # # k.reference "roles"
37
- # # k.column "role_id" # (generated by default from reference and pk)
38
- # # k.primary_key "id" # (default)
39
- # # k.on_update :cascade # :restrict (default)
40
- # # k.on_delete :cascade # :restrict (default)
41
- # # k.name "user_roles_fk" # can be generated
42
- # # k.comment "Phone is 10+ chars long"
43
- # # end
36
+ # # ```ruby
37
+ # # add_foreign_key do |k|
38
+ # # k.table "users"
39
+ # # k.reference "roles"
40
+ # # k.column "role_id" # (generated by default from reference and pk)
41
+ # # k.primary_key "id" # (default)
42
+ # # k.on_update :cascade # :restrict (default)
43
+ # # k.on_delete :cascade # :restrict (default)
44
+ # # k.name "user_roles_fk" # can be generated
45
+ # # k.comment "Phone is 10+ chars long"
46
+ # # end
47
+ # # ```
44
48
  # #
45
49
  # # Composite foreign keys are supported as well:
46
50
  # #
47
- # # add_foreign_key "users", "roles" do |k|
48
- # # k.columns %w[role_name role_id]
49
- # # k.primary_key %w[name id] # Requires unique index
50
- # # k.match :full # :partial, :simple (default)
51
- # # end
51
+ # # ```ruby
52
+ # # add_foreign_key "users", "roles" do |k|
53
+ # # k.columns %w[role_name role_id]
54
+ # # k.primary_key %w[name id] # Requires unique index
55
+ # # k.match :full # :partial, :simple (default)
56
+ # # end
57
+ # # ```
52
58
  # #
53
59
  # # The operation is always invertible.
54
60
  # def add_foreign_key(table, reference, **options, &block); end
@@ -26,27 +26,33 @@
26
26
  # #
27
27
  # # The key can be identified by table/name (not invertible):
28
28
  # #
29
- # # drop_foreign_key "users", name: "user_roles_fk"
29
+ # # ```ruby
30
+ # # drop_foreign_key "users", name: "user_roles_fk"
31
+ # # ```
30
32
  # #
31
33
  # # To make it invertible use the same options like
32
34
  # # in the `add_foreign_key` operation.
33
35
  # #
34
- # # drop_foreign_key do |k|
35
- # # k.table "users"
36
- # # k.reference "roles"
37
- # # k.column "role_id"
38
- # # k.primary_key "id"
39
- # # k.on_update :cascade
40
- # # k.on_delete :cascade
41
- # # k.comment "Phone is 10+ chars long"
42
- # # end
36
+ # # ```ruby
37
+ # # drop_foreign_key do |k|
38
+ # # k.table "users"
39
+ # # k.reference "roles"
40
+ # # k.column "role_id"
41
+ # # k.primary_key "id"
42
+ # # k.on_update :cascade
43
+ # # k.on_delete :cascade
44
+ # # k.comment "Phone is 10+ chars long"
45
+ # # end
46
+ # # ```
43
47
  # #
44
48
  # # Notice that the name can be skipped, in this case we would
45
49
  # # find it in the database.
46
50
  # #
47
51
  # # The operation can be called with `if_exists` option.
48
52
  # #
49
- # # drop_foreign_key "users", name: "user_roles_fk", if_exists: true
53
+ # # ```ruby
54
+ # # drop_foreign_key "users", name: "user_roles_fk", if_exists: true
55
+ # # ```
50
56
  # #
51
57
  # # In this case the operation is always irreversible due to
52
58
  # # uncertainty of the previous state of the database.
@@ -17,17 +17,23 @@
17
17
  # #
18
18
  # # You can rename the foreign key constraint identified by its explicit name:
19
19
  # #
20
- # # rename_foreign_key :users,
21
- # # name: "user_roles_fk",
22
- # # to: "constraints.users_by_roles_fk"
20
+ # # ```ruby
21
+ # # rename_foreign_key :users,
22
+ # # name: "user_roles_fk",
23
+ # # to: "constraints.users_by_roles_fk"
24
+ # # ```
23
25
  # #
24
26
  # # The key can also be found in the database by table/reference/columns/pk
25
27
  # #
26
- # # rename_foreign_key :users, :roles, primary_key: "name", to: "user_roles"
28
+ # # ```ruby
29
+ # # rename_foreign_key :users, :roles, primary_key: "name", to: "user_roles"
30
+ # # ```
27
31
  # #
28
32
  # # If a new name is missed, then the name will be reset to the auto-generated one:
29
33
  # #
30
- # # rename_foreign_key :users, "user_roles_fk"
34
+ # # ```ruby
35
+ # # rename_foreign_key :users, "user_roles_fk"
36
+ # # ```
31
37
  # #
32
38
  # # The operation is always reversible.
33
39
  # def rename_foreign_key(table, reference, **options, &block); end
@@ -17,33 +17,36 @@
17
17
  # # You can change any property except for the name
18
18
  # # (use `rename_function` instead) and `language`.
19
19
  # #
20
- # # change_function "math.mult(int, int)" do |f|
21
- # # f.volatility :immutable, from: :stable
22
- # # f.parallel :safe, from: :restricted
23
- # # f.security :invoker
24
- # # f.leakproof true
25
- # # f.strict true
26
- # # f.cost 5.0
27
- # # # f.rows 1 (supported for functions returning sets of rows)
28
- # # SQL
20
+ # # ```ruby
21
+ # # change_function "math.mult(int, int)" do |f|
22
+ # # f.volatility :immutable, from: :stable
23
+ # # f.parallel :safe, from: :restricted
24
+ # # f.security :invoker
25
+ # # f.leakproof true
26
+ # # f.strict true
27
+ # # f.cost 5.0
28
+ # # # f.rows 1 (supported for functions returning sets of rows)
29
+ # # SQL
30
+ # # ```
29
31
  # #
30
32
  # # The example above is not invertible because of uncertainty
31
33
  # # about the previous volatility, parallelism, and cost.
32
34
  # # To define them, use a from options (available in a block syntax only):
33
35
  # #
34
- # # change_function "math.mult(a int, b int)" do |f|
35
- # # f.body <<~SQL, from: <<~SQL
36
- # # SELECT a * b;
37
- # # SQL
38
- # # SELECT min(a * b, 1);
39
- # # SQL
40
- # # f.volatility :immutable, from: :volatile
41
- # # f.parallel :safe, from: :unsafe
42
- # # f.leakproof true
43
- # # f.strict true
44
- # # f.cost 5.0, from: 100.0
45
- # # # f.rows 1, from: 0
36
+ # # ```ruby
37
+ # # change_function "math.mult(a int, b int)" do |f|
38
+ # # f.body <<~SQL, from: <<~SQL
39
+ # # SELECT a * b;
40
+ # # SQL
41
+ # # SELECT min(a * b, 1);
46
42
  # # SQL
43
+ # # f.volatility :immutable, from: :volatile
44
+ # # f.parallel :safe, from: :unsafe
45
+ # # f.leakproof true
46
+ # # f.strict true
47
+ # # f.cost 5.0, from: 100.0
48
+ # # SQL
49
+ # # ```
47
50
  # #
48
51
  # # Like in the other operations, the function can be
49
52
  # # identified by a qualified name (with types of arguments).
@@ -26,46 +26,54 @@
26
26
  # #
27
27
  # # The function can be created either using inline syntax
28
28
  # #
29
- # # create_function "math.mult(a int, b int) int",
30
- # # language: :sql,
31
- # # body: "SELECT a * b",
32
- # # volatility: :immutable,
33
- # # leakproof: true,
34
- # # comment: "Multiplies 2 integers"
29
+ # # ```ruby
30
+ # # create_function "math.mult(a int, b int) int",
31
+ # # language: :sql,
32
+ # # body: "SELECT a * b",
33
+ # # volatility: :immutable,
34
+ # # leakproof: true,
35
+ # # comment: "Multiplies 2 integers"
36
+ # # ```
35
37
  # #
36
38
  # # or using a block:
37
39
  # #
38
- # # create_function "math.mult(a int, b int) int" do |f|
39
- # # f.language "sql" # (default)
40
- # # f.body <<~SQL
41
- # # SELECT a * b;
42
- # # SQL
43
- # # f.volatility :immutable # :stable, :volatile (default)
44
- # # f.parallel :safe # :restricted, :unsafe (default)
45
- # # f.security :invoker # (default), also :definer
46
- # # f.leakproof true
47
- # # f.strict true
48
- # # f.cost 5.0
49
- # # # f.rows 1 (supported for functions returning sets of rows)
50
- # # f.comment "Multiplies 2 integers"
40
+ # # ```ruby
41
+ # # create_function "math.mult(a int, b int) int" do |f|
42
+ # # f.language "sql" # (default)
43
+ # # f.body <<~SQL
44
+ # # SELECT a * b;
51
45
  # # SQL
46
+ # # f.volatility :immutable # :stable, :volatile (default)
47
+ # # f.parallel :safe # :restricted, :unsafe (default)
48
+ # # f.security :invoker # (default), also :definer
49
+ # # f.leakproof true
50
+ # # f.strict true
51
+ # # f.cost 5.0
52
+ # # # f.rows 1 (supported for functions returning sets of rows)
53
+ # # f.comment "Multiplies 2 integers"
54
+ # # SQL
55
+ # # ```
52
56
  # #
53
57
  # # With a `replace_existing: true` option,
54
58
  # # it will be created using the `CREATE OR REPLACE` clause.
55
59
  # # In this case the migration is irreversible because we
56
60
  # # don't know if and how to restore its previous definition.
57
61
  # #
58
- # # create_function "math.mult(a int, b int) int",
59
- # # body: "SELECT a * b",
60
- # # replace_existing: true
62
+ # # ```ruby
63
+ # # create_function "math.mult(a int, b int) int",
64
+ # # body: "SELECT a * b",
65
+ # # replace_existing: true
66
+ # # ```
61
67
  # #
62
68
  # # We presume a function without arguments should have
63
69
  # # no arguments and return `void` like
64
70
  # #
65
- # # # the same as "do_something() void"
66
- # # create_function "do_something" do |f|
67
- # # # ...
68
- # # end
71
+ # # ```ruby
72
+ # # # the same as "do_something() void"
73
+ # # create_function "do_something" do |f|
74
+ # # # ...
75
+ # # end
76
+ # # ```
69
77
  # def create_function(name, **options, &block); end
70
78
  # end
71
79
  module PGTrunk::Operations::Functions
@@ -28,42 +28,52 @@
28
28
  # #
29
29
  # # A function can be dropped by a plain name:
30
30
  # #
31
- # # drop_function "multiply"
31
+ # # ```ruby
32
+ # # drop_function "multiply"
33
+ # # ```
32
34
  # #
33
35
  # # If several overloaded functions have the name,
34
36
  # # then you must specify the signature having
35
37
  # # types of attributes at least:
36
38
  # #
37
- # # drop_function "multiply(int, int)"
39
+ # # ```ruby
40
+ # # drop_function "multiply(int, int)"
41
+ # # ```
38
42
  # #
39
43
  # # In both cases above the operation is irreversible. To make it
40
44
  # # inverted you have to provide a full signature along with
41
45
  # # the body definition. The other options are supported as well:
42
46
  # #
43
- # # drop_function "math.mult(a int, b int) int" do |f|
44
- # # f.language "sql" # (default)
45
- # # f.body <<~SQL
46
- # # SELECT a * b;
47
- # # SQL
48
- # # f.volatility :immutable # :stable, :volatile (default)
49
- # # f.parallel :safe # :restricted, :unsafe (default)
50
- # # f.security :invoker # (default), also :definer
51
- # # f.leakproof true
52
- # # f.strict true
53
- # # f.cost 5.0
54
- # # # f.rows 1 (supported for functions returning sets of rows)
55
- # # f.comment "Multiplies 2 integers"
56
- # # end
47
+ # # ```ruby
48
+ # # drop_function "math.mult(a int, b int) int" do |f|
49
+ # # f.language "sql" # (default)
50
+ # # f.body <<~SQL
51
+ # # SELECT a * b;
52
+ # # SQL
53
+ # # f.volatility :immutable # :stable, :volatile (default)
54
+ # # f.parallel :safe # :restricted, :unsafe (default)
55
+ # # f.security :invoker # (default), also :definer
56
+ # # f.leakproof true
57
+ # # f.strict true
58
+ # # f.cost 5.0
59
+ # # # f.rows 1 (supported for functions returning sets of rows)
60
+ # # f.comment "Multiplies 2 integers"
61
+ # # end
62
+ # # ```
57
63
  # #
58
64
  # # The operation can be called with `if_exists` option. In this case
59
65
  # # it would do nothing when no function existed.
60
66
  # #
61
- # # drop_function "math.multiply(integer, integer)", if_exists: true
67
+ # # ```ruby
68
+ # # drop_function "math.multiply(integer, integer)", if_exists: true
69
+ # # ```
62
70
  # #
63
71
  # # Another operation-specific option `force: :cascade` enables
64
72
  # # to drop silently any object depending on the function.
65
73
  # #
66
- # # drop_function "math.multiply(integer, integer)", force: :cascade
74
+ # # ```ruby
75
+ # # drop_function "math.multiply(integer, integer)", force: :cascade
76
+ # # ```
67
77
  # #
68
78
  # # Both options make the operation irreversible because of
69
79
  # # uncertainty about the previous state of the database.
@@ -13,11 +13,15 @@
13
13
  # #
14
14
  # # If there are no overloaded functions, then you can use a plain name:
15
15
  # #
16
- # # rename_function "math.multiply", to: "public.product"
16
+ # # ```ruby
17
+ # # rename_function "math.multiply", to: "public.product"
18
+ # # ```
17
19
  # #
18
20
  # # otherwise the types of attributes must be explicitly specified.
19
21
  # #
20
- # # rename_function "math.multiply(int, int)", to: "public.product"
22
+ # # ```ruby
23
+ # # rename_function "math.multiply(int, int)", to: "public.product"
24
+ # # ```
21
25
  # #
22
26
  # # Any specification of attributes or returned values in `to:` option
23
27
  # # is ignored because they cannot be changed anyway.
@@ -12,15 +12,16 @@
12
12
  # #
13
13
  # # The operation enables to alter a view without recreating
14
14
  # # its from scratch. You can rename columns, change their
15
- # # storage settings (how the column is TOAST-ed), or
16
- # # customize their statistics.
15
+ # # storage settings (how the column is TOAST-ed), or customize their statistics.
17
16
  # #
18
- # # change_materialized_view "admin_users" do |v|
19
- # # v.rename_column "name", to: "full_name"
20
- # # v.column "name", storage: "extended", from_storage: "expanded"
21
- # # v.column "admin", n_distinct: 2
22
- # # v.column "role", statistics: 100
23
- # # end
17
+ # # ```ruby
18
+ # # change_materialized_view "admin_users" do |v|
19
+ # # v.rename_column "name", to: "full_name"
20
+ # # v.column "name", storage: "extended", from_storage: "expanded"
21
+ # # v.column "admin", n_distinct: 2
22
+ # # v.column "role", statistics: 100
23
+ # # end
24
+ # # ```
24
25
  # #
25
26
  # # Notice that renaming will be done AFTER all changes even
26
27
  # # though the order of declarations can be different.
@@ -32,26 +33,32 @@
32
33
  # # In addition to changing columns, the operation enables
33
34
  # # to set a default clustering by given index:
34
35
  # #
35
- # # change_materialized_view "admin_users" do |v|
36
- # # v.cluster_on "admin_users_by_names_idx"
37
- # # end
36
+ # # ```ruby
37
+ # # change_materialized_view "admin_users" do |v|
38
+ # # v.cluster_on "admin_users_by_names_idx"
39
+ # # end
40
+ # # ```
38
41
  # #
39
42
  # # The clustering is invertible, but its inversion does nothing,
40
43
  # # keeping the clustering unchanged.
41
44
  # #
42
45
  # # The comment can also be changed:
43
46
  # #
44
- # # change_materialized_view "admin_users" do |v|
45
- # # v.comment "Admin users", from: "Admin users only"
46
- # # end
47
+ # # ```ruby
48
+ # # change_materialized_view "admin_users" do |v|
49
+ # # v.comment "Admin users", from: "Admin users only"
50
+ # # end
51
+ # # ```
47
52
  # #
48
53
  # # Notice, that without `from` option the operation is still
49
54
  # # invertible, but its inversion would delete the comment.
50
55
  # # It can also be reset to the blank string explicitly:
51
56
  # #
52
- # # change_materialized_view "admin_users" do |v|
53
- # # v.comment "", from: "Admin users only"
54
- # # end
57
+ # # ```ruby
58
+ # # change_materialized_view "admin_users" do |v|
59
+ # # v.comment "", from: "Admin users only"
60
+ # # end
61
+ # # ```
55
62
  # #
56
63
  # # With the `if_exists: true` option, the operation won't fail
57
64
  # # even when the view wasn't existed. At the same time,
@@ -18,14 +18,18 @@
18
18
  # #
19
19
  # # The operation creates the view using its `sql_definition`:
20
20
  # #
21
- # # create_materialized_view("views.admin_users", sql_definition: <<~SQL)
22
- # # SELECT id, name FROM users WHERE admin;
23
- # # SQL
21
+ # # ```ruby
22
+ # # create_materialized_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
- # # create_materialized_view "admin_users", version: 1
30
+ # # ```ruby
31
+ # # create_materialized_view "admin_users", version: 1
32
+ # # ```
29
33
  # #
30
34
  # # It is expected, that a `db/materialized_views/admin_users_v01.sql`
31
35
  # # to contain the SQL snippet.
@@ -35,41 +39,45 @@
35
39
  # # can be moved to another tablespace, but we don't support
36
40
  # # this feature yet).
37
41
  # #
38
- # # create_materialized_view "admin_users" do |v|
39
- # # v.tablespace "fast_ssd"
40
- # # v.sql_definition <<~SQL
41
- # # SELECT id, name, password, admin, on_duty
42
- # # FROM users
43
- # # WHERE admin
44
- # # SQL
45
- # # end
42
+ # # ```ruby
43
+ # # create_materialized_view "admin_users" do |v|
44
+ # # v.tablespace "fast_ssd"
45
+ # # v.sql_definition <<~SQL
46
+ # # SELECT id, name, password, admin, on_duty
47
+ # # FROM users
48
+ # # WHERE admin
49
+ # # SQL
50
+ # # end
51
+ # # ```
46
52
  # #
47
53
  # # You can also set a comment describing the view,
48
54
  # # and redefine the storage options for some TOAST-ed columns,
49
55
  # # as well as their custom statistics:
50
56
  # #
51
- # # create_materialized_view "admin_users" do |v|
52
- # # v.sql_definition <<~SQL
53
- # # SELECT id, name, password, admin, on_duty
54
- # # FROM users
55
- # # WHERE admin
56
- # # SQL
57
- # #
58
- # # v.column "password", storage: "external" # to avoid compression
59
- # # v.column "password", n_distinct: -1 # linear dependency
60
- # # v.column "admin", n_distinct: 1 # exact number of values
61
- # # v.column "on_duty", statistics: 2 # the total number of values
62
- # #
63
- # # v.comment "Admin users only"
64
- # # end
57
+ # # ```ruby
58
+ # # create_materialized_view "admin_users" do |v|
59
+ # # v.sql_definition <<~SQL
60
+ # # SELECT id, name, password, admin, on_duty
61
+ # # FROM users
62
+ # # WHERE admin
63
+ # # SQL
64
+ # # v.column "password", storage: "external" # to avoid compression
65
+ # # v.column "password", n_distinct: -1 # linear dependency
66
+ # # v.column "admin", n_distinct: 1 # exact number of values
67
+ # # v.column "on_duty", statistics: 2 # the total number of values
68
+ # # v.comment "Admin users only"
69
+ # # end
70
+ # # ```
65
71
  # #
66
72
  # # With the `replace_existing: true` option the operation
67
73
  # # would use `CREATE OR REPLACE VIEW` command, so it
68
74
  # # can be used to "update" (or reload) the existing view.
69
75
  # #
70
- # # create_materialized_view "admin_users",
71
- # # version: 1,
72
- # # replace_existing: true
76
+ # # ```ruby
77
+ # # create_materialized_view "admin_users",
78
+ # # version: 1,
79
+ # # replace_existing: true
80
+ # # ```
73
81
  # #
74
82
  # # This option makes the migration irreversible due to uncertainty
75
83
  # # of the previous state of the database.
@@ -20,31 +20,41 @@
20
20
  # # The operation drops a materialized view identified by its
21
21
  # # qualified name (it can include a schema).
22
22
  # #
23
- # # drop_materialized_view "views.admin_users"
23
+ # # ```ruby
24
+ # # drop_materialized_view "views.admin_users"
25
+ # # ```
24
26
  # #
25
27
  # # To make the operation invertible, use the same options
26
28
  # # as in the `create_view` operation.
27
29
  # #
28
- # # drop_materialized_view "views.admin_users" do |v|
29
- # # v.sql_definition "SELECT name, password FROM users WHERE admin;"
30
- # # v.column "password", storage: "external" # prevent compression
31
- # # v.with_data false
32
- # # v.comment "Admin users only"
33
- # # end
30
+ # # ```ruby
31
+ # # drop_materialized_view "views.admin_users" do |v|
32
+ # # v.sql_definition "SELECT name, password FROM users WHERE admin;"
33
+ # # v.column "password", storage: "external" # prevent compression
34
+ # # v.with_data false
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
- # # drop_materialized_view "admin_users", revert_to_version: 1
41
+ # # ```ruby
42
+ # # drop_materialized_view "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
- # # drop_materialized_view "admin_users", force: :cascade
48
+ # # ```ruby
49
+ # # drop_materialized_view "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
- # # drop_materialized_view "admin_users", if_exists: true
55
+ # # ```ruby
56
+ # # drop_materialized_view "admin_users", if_exists: true
57
+ # # ```
48
58
  # #
49
59
  # # Both options make a migration irreversible due to uncertainty
50
60
  # # of the previous state of the database.
@@ -12,7 +12,9 @@
12
12
  # # The operation enables refreshing a materialized view
13
13
  # # by reloading its underlying SQL query:
14
14
  # #
15
- # # refresh_materialized_view "admin_users"
15
+ # # ```ruby
16
+ # # refresh_materialized_view "admin_users"
17
+ # # ```
16
18
  # #
17
19
  # # The option `algorithm: :concurrently` acts exactly
18
20
  # # like in the `create_index` definition. You should