pg_trunk 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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