pg_online_schema_change 0.8.1 → 0.9.0
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 +4 -0
- data/Gemfile.lock +1 -1
- data/lib/pg_online_schema_change/orchestrate.rb +16 -0
- data/lib/pg_online_schema_change/query.rb +21 -0
- data/lib/pg_online_schema_change/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b959611ab7bbaabb457ac51ee7b25c7449962d8a3ff39986251bfaf2c890a4f
|
4
|
+
data.tar.gz: a8cff6b404a625b2f1e3099d5ccec6d35ad4e0346e0016bc7837dced67664f88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4685933d5e8e5d59f6f4301ad36a1fba2002c7f02f851aea36e9f61f8ab435c7f52b26ee475488adfedb5c8ab872d923619de2c7c0a8f907df50be411a5cc97
|
7
|
+
data.tar.gz: 44071e34f1caf2078f909c64c87250ff723cff53a31b2f049475bbbac79cbf6b8cf1881d1d9bad456da9287824aceb3c74777841f0a0f28cca5f40cae2a5b60f
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -66,6 +66,7 @@ module PgOnlineSchemaChange
|
|
66
66
|
replay_and_swap!
|
67
67
|
run_analyze!
|
68
68
|
validate_constraints!
|
69
|
+
replace_views!
|
69
70
|
drop_and_cleanup!
|
70
71
|
|
71
72
|
logger.info("All tasks successfully completed")
|
@@ -297,6 +298,21 @@ module PgOnlineSchemaChange
|
|
297
298
|
Query.run(client.connection, validate_statements)
|
298
299
|
end
|
299
300
|
|
301
|
+
def replace_views!
|
302
|
+
view_definitions = Query.view_definitions_for(client, old_primary_table)
|
303
|
+
view_definitions.each do |definition|
|
304
|
+
definition.each do |view_name, view_definition|
|
305
|
+
view_definition = view_definition.gsub(old_primary_table, client.table)
|
306
|
+
|
307
|
+
logger.info("Replacing view #{view_name}")
|
308
|
+
sql = <<~SQL
|
309
|
+
CREATE OR REPLACE VIEW #{view_name} AS #{view_definition}
|
310
|
+
SQL
|
311
|
+
Query.run(client.connection, sql)
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
300
316
|
def drop_and_cleanup!
|
301
317
|
primary_drop = client.drop ? "DROP TABLE IF EXISTS #{old_primary_table};" : ""
|
302
318
|
audit_table_drop = audit_table ? "DROP TABLE IF EXISTS #{audit_table}" : ""
|
@@ -301,6 +301,27 @@ module PgOnlineSchemaChange
|
|
301
301
|
columns.first
|
302
302
|
end
|
303
303
|
|
304
|
+
def view_definitions_for(client, table)
|
305
|
+
query = <<~SQL
|
306
|
+
SELECT DISTINCT dependent_view.relname as view_name, pg_get_viewdef(dependent_view.relname::regclass) as view_definition
|
307
|
+
FROM pg_depend
|
308
|
+
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid
|
309
|
+
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid
|
310
|
+
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid
|
311
|
+
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
|
312
|
+
WHERE
|
313
|
+
source_ns.nspname = '#{client.schema}'
|
314
|
+
AND source_table.relname = '#{table}'
|
315
|
+
SQL
|
316
|
+
|
317
|
+
definitions = []
|
318
|
+
run(client.connection, query) do |result|
|
319
|
+
definitions = result.map { |row| {row["view_name"] => row["view_definition"].strip} }
|
320
|
+
end
|
321
|
+
|
322
|
+
definitions
|
323
|
+
end
|
324
|
+
|
304
325
|
# This function acquires the lock and keeps the transaction
|
305
326
|
# open. If a lock is acquired, its upon the caller
|
306
327
|
# to call COMMIT to end the transaction. If a lock
|
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.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shayon Mukherjee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ougai
|