pghero 4.0.0 → 4.0.1
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 +6 -0
- data/lib/pghero/methods/sequences.rb +39 -17
- data/lib/pghero/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9a4cfe44cedeb0150487120c8cb8ffa17b319fe1950a0140cfab35b64e00a52b
|
|
4
|
+
data.tar.gz: ae1b6e6380230a166ccce42f9da6143364bf4ab58f041de2944e1a80dfc2f403
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d951a347d8018e5a04aafc24bf724774c6882e88e6b084756eda02d30b49c9cdea013b223c17c401dbe5d342f42b18687c1d332ac982e766efae5296ca4de359
|
|
7
|
+
data.tar.gz: 2d20b1f83a9d7d13e38f632f8f30d8c69c83a1e4d82351d51e3b8351dc0fc53bcad10202c9a7c88532457deeec8fa30bfef7dfc8b9c95f6d6311e87350593f98
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
## 4.0.1 (2026-08-15)
|
|
2
|
+
|
|
3
|
+
- Added sequences from identity columns
|
|
4
|
+
|
|
1
5
|
## 4.0.0 (2026-08-05)
|
|
2
6
|
|
|
7
|
+
See the upgrade notes for [Docker](guides/Docker.md#upgrading) or [Rails](guides/Rails.md#upgrading)
|
|
8
|
+
|
|
3
9
|
- Reduced space for historical query stats
|
|
4
10
|
- Added `disable_kill` option to disable killing queries and connections
|
|
5
11
|
- Added `unused_index_megabytes` option to set minimum size for unused indexes
|
|
@@ -2,13 +2,16 @@ module PgHero
|
|
|
2
2
|
module Methods
|
|
3
3
|
module Sequences
|
|
4
4
|
def sequences
|
|
5
|
-
# get columns with default values
|
|
6
|
-
# use
|
|
5
|
+
# get columns with default values and identity columns
|
|
6
|
+
# use pg_depend to get owned sequences (like pg_get_serial_sequence)
|
|
7
|
+
# use pg_get_expr to get correct default value for rest
|
|
7
8
|
# it's what information_schema.columns uses
|
|
8
9
|
# also, exclude temporary tables to prevent error
|
|
9
10
|
# when accessing across sessions
|
|
10
11
|
sequences = select_all <<~SQL
|
|
11
12
|
SELECT
|
|
13
|
+
sn.nspname AS schema,
|
|
14
|
+
s.relname AS sequence,
|
|
12
15
|
n.nspname AS table_schema,
|
|
13
16
|
c.relname AS table,
|
|
14
17
|
attname AS column,
|
|
@@ -20,32 +23,51 @@ module PgHero
|
|
|
20
23
|
pg_catalog.pg_class c ON c.oid = a.attrelid
|
|
21
24
|
INNER JOIN
|
|
22
25
|
pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
|
23
|
-
|
|
24
|
-
pg_catalog.
|
|
26
|
+
LEFT JOIN
|
|
27
|
+
pg_catalog.pg_depend dep ON dep.refclassid = 'pg_catalog.pg_class'::regclass
|
|
28
|
+
AND dep.refobjid = a.attrelid
|
|
29
|
+
AND dep.refobjsubid = a.attnum
|
|
30
|
+
AND dep.classid = 'pg_catalog.pg_class'::regclass
|
|
31
|
+
AND dep.objsubid = 0
|
|
32
|
+
AND dep.deptype IN ('i', 'a')
|
|
33
|
+
AND dep.objid IN (SELECT oid FROM pg_class WHERE relkind = 'S')
|
|
34
|
+
LEFT JOIN
|
|
35
|
+
pg_catalog.pg_class s ON s.oid = dep.objid
|
|
36
|
+
LEFT JOIN
|
|
37
|
+
pg_catalog.pg_namespace sn ON sn.oid = s.relnamespace
|
|
38
|
+
LEFT JOIN
|
|
39
|
+
pg_catalog.pg_attrdef d ON a.attrelid = d.adrelid
|
|
40
|
+
AND a.attnum = d.adnum
|
|
41
|
+
AND s.relkind IS NULL
|
|
25
42
|
WHERE
|
|
26
43
|
NOT a.attisdropped
|
|
27
44
|
AND a.attnum > 0
|
|
28
|
-
AND pg_get_expr(d.adbin, d.adrelid) LIKE 'nextval%'
|
|
29
|
-
AND
|
|
45
|
+
AND (pg_get_expr(d.adbin, d.adrelid) LIKE 'nextval%' OR s.relname IS NOT NULL)
|
|
46
|
+
AND c.relpersistence <> 't'
|
|
30
47
|
SQL
|
|
31
48
|
|
|
32
|
-
# parse out sequence
|
|
33
49
|
sequences.each do |column|
|
|
34
|
-
column[:max_value] =
|
|
50
|
+
column[:max_value] =
|
|
51
|
+
case column[:column_type]
|
|
52
|
+
when "smallint"
|
|
53
|
+
32767
|
|
54
|
+
when "integer"
|
|
55
|
+
2147483647
|
|
56
|
+
else
|
|
57
|
+
9223372036854775807
|
|
58
|
+
end
|
|
35
59
|
|
|
36
|
-
|
|
60
|
+
unless column[:sequence]
|
|
61
|
+
column[:schema], column[:sequence] = parse_default_value(column[:default_value])
|
|
62
|
+
end
|
|
37
63
|
column.delete(:default_value) if column[:sequence]
|
|
38
64
|
end
|
|
39
65
|
|
|
40
66
|
add_sequence_attributes(sequences)
|
|
41
67
|
|
|
42
68
|
last_value = {}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
select_all(sql).zip(slice) do |row, seq|
|
|
47
|
-
last_value[seq] = row[:last_value]
|
|
48
|
-
end
|
|
69
|
+
select_all("SELECT schemaname AS schema, sequencename AS sequence, COALESCE(last_value, start_value) AS last_value FROM pg_sequences").each do |row|
|
|
70
|
+
last_value[[row[:schema], row[:sequence]]] = row[:last_value]
|
|
49
71
|
end
|
|
50
72
|
|
|
51
73
|
sequences.select { |s| s[:readable] }.each do |seq|
|
|
@@ -67,8 +89,8 @@ module PgHero
|
|
|
67
89
|
# nextval('id_seq'::regclass)
|
|
68
90
|
# nextval(('id_seq'::text)::regclass)
|
|
69
91
|
def parse_default_value(default_value)
|
|
70
|
-
m =
|
|
71
|
-
m =
|
|
92
|
+
m = /\Anextval\('(.+)'\:\:regclass\)\z/.match(default_value)
|
|
93
|
+
m = /\Anextval\(\('(.+)'\:\:text\)\:\:regclass\)\z/.match(default_value) unless m
|
|
72
94
|
if m
|
|
73
95
|
unquote_ident(m[1])
|
|
74
96
|
else
|
data/lib/pghero/version.rb
CHANGED