pg_online_schema_change 0.7.1 → 0.7.3

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: c49f895f91c72ef491002660c994088b9d527db88d3b5d77cbb851771a2f2ac8
4
- data.tar.gz: d57329d32657cd64edb60b8c174c6fc32f4279a202548b5132407e98c59f2f9e
3
+ metadata.gz: 70f01145ab63bcb06e4aea9e79b8dc5ac1bf5cc37749964589d2dc940214d8c4
4
+ data.tar.gz: 52f2b7e5fe1b793f1f8a414972d282a41661eb0045b65d095b65b4c9ab2d6a2a
5
5
  SHA512:
6
- metadata.gz: 963c4c9751301d029857f021b40d033d50f9b8865548a5d8bd752ed4c03a4cf1e5b016c5129e771db45df1e2677a8e29b5c2b488f152932238e7158e4c3a2a8b
7
- data.tar.gz: bc8c559ade623ea76794cf1756642474cf32eee08406f884503b9450e1d5b39233778dd77b7fcd56327c140ba046279b21a1a1a64b5ac606bf5c2119cea6b350
6
+ metadata.gz: d4d0c36d71d4aa8020063c63bba2358ffd2d088ad9da21ce3419a8916acbd74c80dfefd5a134423e708ef6b72f444dcbf0ebfd6ba4ff26956d562c258a94fbcc
7
+ data.tar.gz: c73369d1a69a0824474d5a930411b2f2eee0e7ac61986fb7b8df47d84e010da2cb35fec6e054e5e8986e6877f1992f256b420404a41f1cdd85620f8f1b9a3bb1
data/.rubocop.yml CHANGED
@@ -24,7 +24,7 @@ Layout/SpaceAroundEqualsInParameterDefault:
24
24
 
25
25
  Metrics/AbcSize:
26
26
  Enabled: true
27
- Max: 40
27
+ Max: 45
28
28
  Exclude:
29
29
  - "spec/**/*"
30
30
 
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2022-03-13 19:35:49 UTC using RuboCop version 1.23.0.
3
+ # on 2022-09-24 14:22:44 UTC using RuboCop version 1.23.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -9,7 +9,7 @@
9
9
  # Offense count: 2
10
10
  # Configuration parameters: CountComments, CountAsOne.
11
11
  Metrics/ClassLength:
12
- Max: 250
12
+ Max: 266
13
13
 
14
14
  # Offense count: 2
15
15
  # Configuration parameters: IgnoredMethods.
@@ -26,7 +26,7 @@ Packaging/GemspecGit:
26
26
  Exclude:
27
27
  - 'pg_online_schema_change.gemspec'
28
28
 
29
- # Offense count: 67
29
+ # Offense count: 68
30
30
  # Configuration parameters: CountAsOne.
31
31
  RSpec/ExampleLength:
32
32
  Max: 55
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
 
2
- ## [0.6.0] - 2022-03-13
2
+ ## [0.7.2] - 2022-09-17
3
+ * Update primary key sequence on shadow table https://github.com/shayonj/pg-osc/pull/72
4
+ - Thanks to @brycethornton for the report
5
+
6
+ ## [0.7.1] - 2022-03-13
7
+ * Bump pg to `1.3.4` https://github.com/shayonj/pg-osc/commit/d086c19d4f273dc960491cbedf9e0602d812896b
8
+
9
+ ## [0.7.0] - 2022-03-13
3
10
  * Move CI to Github Actions in https://github.com/shayonj/pg-osc/pull/64
4
11
  * Set --password as optional since it is deprecated in https://github.com/shayonj/pg-osc/pull/66
5
12
  * Smoke tests in https://github.com/shayonj/pg-osc/pull/65
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pg_online_schema_change (0.7.0)
4
+ pg_online_schema_change (0.7.3)
5
5
  ougai (~> 2.0.0)
6
6
  pg (~> 1.3.2)
7
7
  pg_query (~> 2.1.3)
@@ -14,7 +14,6 @@ GEM
14
14
  coderay (1.1.3)
15
15
  diff-lcs (1.5.0)
16
16
  google-protobuf (3.19.4)
17
- google-protobuf (3.19.4-x86_64-linux)
18
17
  method_source (1.0.0)
19
18
  oj (3.13.11)
20
19
  ougai (2.0.0)
@@ -71,6 +70,7 @@ GEM
71
70
 
72
71
  PLATFORMS
73
72
  arm64-darwin-20
73
+ arm64-darwin-21
74
74
  x86_64-linux
75
75
 
76
76
  DEPENDENCIES
data/README.md CHANGED
@@ -205,6 +205,7 @@ docker run --network host -it --rm shayonj/pg-osc:latest \
205
205
  --drop
206
206
  ```
207
207
  ## Caveats
208
+ - Partitioned tables are not supported as of yet. Pull requests and ideas welcome.
208
209
  - A primary key should exist on the table; without it, `pg-osc` will raise an exception
209
210
  - This is because - currently there is no other way to uniquely identify rows during replay.
210
211
  - `pg-osc` will acquire `ACCESS EXCLUSIVE` lock on the parent table twice during the operation.
@@ -259,6 +260,16 @@ rvm use 3.0.0
259
260
 
260
261
  To install this gem onto your local machine, run `bundle exec rake install`.
261
262
 
263
+ ### Local testing
264
+ ```
265
+ docker compose up
266
+
267
+ pgbench --initialize -s 10 --foreign-keys --host localhost -U jamesbond -d postgres
268
+ pgbench -T 60000 -c 5 --host localhost -U jamesbond -d postgres
269
+
270
+ bundle exec bin/pg-online-schema-change perform -a 'ALTER TABLE pgbench_accounts ALTER COLUMN aid TYPE BIGINT' -d "postgres" -h "localhost" -u "jamesbond" -w "password"
271
+ ```
272
+
262
273
  ## Releasing
263
274
 
264
275
  - Bump version in `version.rb`
@@ -238,7 +238,10 @@ module PgOnlineSchemaChange
238
238
  rows = Replay.rows_to_play(opened)
239
239
  Replay.play!(rows, opened)
240
240
 
241
+ query_for_primary_key_refresh = Query.query_for_primary_key_refresh(shadow_table, primary_key, client.table, opened)
242
+
241
243
  sql = <<~SQL
244
+ #{query_for_primary_key_refresh};
242
245
  ALTER TABLE #{client.table} RENAME to #{old_primary_table};
243
246
  ALTER TABLE #{shadow_table} RENAME to #{client.table};
244
247
  #{referential_foreign_key_statements}
@@ -319,6 +319,28 @@ module PgOnlineSchemaChange
319
319
  FROM ONLY #{client.table}
320
320
  SQL
321
321
  end
322
+
323
+ def primary_key_sequence(shadow_table, primary_key, opened)
324
+ query = <<~SQL
325
+ SELECT pg_get_serial_sequence(\'#{shadow_table}\', \'#{primary_key}\') as sequence_name
326
+ SQL
327
+
328
+ result = run(client.connection, query, opened)
329
+
330
+ result.map do |row|
331
+ row["sequence_name"]
332
+ end&.first
333
+ end
334
+
335
+ def query_for_primary_key_refresh(shadow_table, primary_key, table, opened)
336
+ sequence_name = primary_key_sequence(shadow_table, primary_key, opened)
337
+
338
+ return "" if sequence_name.nil?
339
+
340
+ <<~SQL
341
+ SELECT setval((select pg_get_serial_sequence(\'#{shadow_table}\', \'#{primary_key}\')), (SELECT max(#{primary_key}) FROM #{table})+1);
342
+ SQL
343
+ end
322
344
  end
323
345
  end
324
346
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgOnlineSchemaChange
4
- VERSION = "0.7.1"
4
+ VERSION = "0.7.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_online_schema_change
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shayon Mukherjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-13 00:00:00.000000000 Z
11
+ date: 2022-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ougai