Skip to content

Commit 98fc076

Browse files
committed
update pgsql kernels
1 parent 171cdb8 commit 98fc076

70 files changed

Lines changed: 1416 additions & 962 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cli/confgen.go

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ type ExtensionData struct {
118118
VersionPackages map[int]string // PG version -> package name from pgext.pkg
119119
VersionHidden map[int]bool // PG version -> hidden status
120120
Hidden bool // deprecated, kept for compatibility
121+
ForkBound bool // true when tags contains fork; render only via manual fork aliases
121122
Comment string
122123
RPMPkg string // RPM package template from extension.rpm_pkg
123124
DEBPkg string // DEB package template from extension.deb_pkg
@@ -170,6 +171,7 @@ func (g *PigstyConfigGenerator) loadExtensionData() (map[string]*ExtensionData,
170171
e.deb_pkg,
171172
e.rpm_pg,
172173
e.deb_pg,
174+
COALESCE(e.tags @> ARRAY['fork']::text[], false) AS fork_bound,
173175
p.pg,
174176
p.name as pkg_name,
175177
p.state,
@@ -179,7 +181,7 @@ func (g *PigstyConfigGenerator) loadExtensionData() (map[string]*ExtensionData,
179181
LEFT JOIN pgext.pkg p ON p.ext = e.name AND p.os = $1
180182
WHERE e.lead = true AND e.contrib IS NOT TRUE
181183
)
182-
SELECT ext_id, name, alias, category, cat_id, comment, rpm_pkg, deb_pkg, rpm_pg, deb_pg, pg, pkg_name, state, hide
184+
SELECT ext_id, name, alias, category, cat_id, comment, rpm_pkg, deb_pkg, rpm_pg, deb_pg, fork_bound, pg, pkg_name, state, hide
183185
FROM ext_avail
184186
ORDER BY cat_id, ext_id, pg
185187
`
@@ -194,23 +196,24 @@ func (g *PigstyConfigGenerator) loadExtensionData() (map[string]*ExtensionData,
194196

195197
for rows.Next() {
196198
var (
197-
extID int
198-
name string
199-
alias string
200-
category string
201-
catID int
202-
comment sql.NullString
203-
rpmPkg sql.NullString
204-
debPkg sql.NullString
205-
rpmPG interface{}
206-
debPG interface{}
207-
pg sql.NullInt32
208-
pkgName sql.NullString
209-
state sql.NullString
210-
hide sql.NullBool
199+
extID int
200+
name string
201+
alias string
202+
category string
203+
catID int
204+
comment sql.NullString
205+
rpmPkg sql.NullString
206+
debPkg sql.NullString
207+
rpmPG interface{}
208+
debPG interface{}
209+
forkBound bool
210+
pg sql.NullInt32
211+
pkgName sql.NullString
212+
state sql.NullString
213+
hide sql.NullBool
211214
)
212215

213-
err := rows.Scan(&extID, &name, &alias, &category, &catID, &comment, &rpmPkg, &debPkg, &rpmPG, &debPG, &pg, &pkgName, &state, &hide)
216+
err := rows.Scan(&extID, &name, &alias, &category, &catID, &comment, &rpmPkg, &debPkg, &rpmPG, &debPG, &forkBound, &pg, &pkgName, &state, &hide)
214217
if err != nil {
215218
return nil, err
216219
}
@@ -226,6 +229,7 @@ func (g *PigstyConfigGenerator) loadExtensionData() (map[string]*ExtensionData,
226229
Available: make(map[int]bool),
227230
VersionPackages: make(map[int]string),
228231
VersionHidden: make(map[int]bool),
232+
ForkBound: forkBound,
229233
}
230234
if comment.Valid {
231235
extensions[name].Comment = comment.String
@@ -491,6 +495,9 @@ func (g *PigstyConfigGenerator) generateExtensionMappings(extensions map[string]
491495
if ext.Category == "CONTRIB" {
492496
continue
493497
}
498+
if ext.ForkBound {
499+
continue
500+
}
494501

495502
// Special handling: insert hunspell aggregation alias before hunspell_cs_cz
496503
if ext.Name == "hunspell_cs_cz" && len(hunspellExts) > 0 {
@@ -879,6 +886,7 @@ func GetConfigConstants() *ConfigConstants {
879886
{"pg_exporter", "pg_exporter", "pg-exporter"},
880887
{"pgbackrest_exporter", "pgbackrest_exporter", "pgbackrest-exporter"},
881888
{"vip-manager", "vip-manager", "vip-manager"},
889+
{"pg_hardstorage", "pg-hardstorage", "pg-hardstorage"},
882890
{"pgbadger", "pgbadger", "pgbadger"},
883891
{"pg_activity", "pg_activity", "pg-activity"},
884892
{"pg_filedump", "pg_filedump", "postgresql-filedump"},
@@ -894,15 +902,14 @@ func GetConfigConstants() *ConfigConstants {
894902

895903
{"agensgraph", "agensgraph-$v", "agensgraph-$v"},
896904
{"polardb", "polardb-$v", "polardb-$v"},
897-
{"polar", "polardb-$v", "polardb-$v"},
898-
{"openhalodb", "openhalodb-14", "openhalodb-14"},
899-
//{"ivorysql", "ivorysql5", "ivorysql-5"},
900-
//{"babelfish", "babelfishpg_17 babelfish_17", "babelfishpg-17 babelfishpg-17-babelfish"},
901-
{"oriole", "orioledb_$v oriolepg_$v", "oriolepg-$v oriolepg-$v-orioledb"},
902-
{"pgedge", "pgedge_$v spock_$v lolor_$v snowflake_$v", "pgedge-$v pgedge-$v-spock pgedge-$v-lolor pgedge-$v-snowflake"},
905+
{"openhalo", "openhalodb-$v", "openhalodb-$v"},
906+
{"ivorysql", "ivorysql5", "ivorysql-5"},
907+
{"babelfish", "babelfish-$v", "babelfish-$v"},
908+
{"orioledb", "orioledb-$v", "orioledb-$v"},
909+
{"pgedge", "pgedge-$v", "pgedge-$v"},
903910
{"supabase", "pg_tle_$v,pgvector_$v,pg_cron_$v,pgsodium_$v,pg_graphql_$v,pg_jsonschema_$v,wrappers_$v,vault_$v,pgjwt_$v,pgsql_http_$v,pg_net_$v,supautils_$v,index_advisor_$v,safeupdate_$v,pg_plan_filter_$v", "postgresql-$v-pg-tle,postgresql-$v-pg-graphql,postgresql-$v-pg-jsonschema,postgresql-$v-wrappers,postgresql-$v-pgvector,postgresql-$v-cron,postgresql-$v-pgsodium,postgresql-$v-vault,postgresql-$v-pgjwt,postgresql-$v-http,postgresql-$v-pg-net,postgresql-$v-supautils,postgresql-$v-index-advisor,postgresql-$v-pg-safeupdate,postgresql-$v-pg-plan-filter"},
904911
{"greenplum", "open-source-greenplum-db-7", ""},
905-
{"cloudberry", "cloudberry", "cloudberry"},
912+
{"cloudberry", "cloudberry cloudberry-backup cloudberry-pxf", "cloudberry cloudberry-backup cloudberry-pxf"},
906913
{"percona-core", "percona-postgresql18,percona-postgresql18-server,percona-postgresql18-contrib,percona-postgresql18-plperl,percona-postgresql18-plpython3,percona-postgresql18-pltcl,percona-pg_tde18", "percona-postgresql-18 percona-postgresql-client-18 percona-postgresql-plperl-18 percona-postgresql-plpython3-18 percona-postgresql-pltcl-18 percona-pg-tde18"},
907914
{"percona-main", "percona-postgresql18,percona-postgresql18-server,percona-postgresql18-contrib,percona-postgresql18-plperl,percona-postgresql18-plpython3,percona-postgresql18-pltcl,percona-pg_tde18,percona-postgis35_18,percona-postgis35_18-client,percona-postgis35_18-utils,percona-pgvector_18,percona-wal2json18,percona-pg_repack18,percona-pgaudit18,percona-pgaudit18_set_user,percona-pg_stat_monitor18,percona-pg_gather", "percona-postgresql-18 percona-postgresql-client-18 percona-postgresql-plperl-18 percona-postgresql-plpython3-18 percona-postgresql-pltcl-18 percona-pg-tde18 percona-postgresql-18-postgis-3 percona-postgresql-18-pgvector percona-postgresql-18-wal2json percona-postgresql-18-repack percona-postgresql-18-pgaudit percona-pgaudit18-set-user percona-pg-stat-monitor18 percona-pg-gather"},
908915
},
@@ -964,8 +971,8 @@ pg_home_map:
964971
mssql: '/usr/babelfish-$v/'
965972
agens: '/usr/agens-$v'
966973
ivory: '/usr/ivory-5'
967-
mysql: '/usr/halo-14'
968-
gpsql: '/usr/local/cloudberry'
974+
mysql: '/usr/halo-$v'
975+
gpsql: '/usr/cloudberry'
969976
polar: '/usr/polar-$v'
970977
oriole: '/usr/oriole-$v'
971978
pgedge: '/usr/pgedge-$v'
@@ -996,8 +1003,7 @@ repo_upstream_default:
9961003
- { name: pgdg16-nonfree ,description: 'PostgreSQL 16+' ,module: extra ,releases: [8,9,10] ,arch: [x86_64 ] ,baseurl: { default: 'https://download.postgresql.org/pub/repos/yum/non-free/16/redhat/rhel-$releasever-$basearch' ,china: 'https://mirrors.aliyun.com/postgresql/repos/yum/non-free/16/redhat/rhel-$releasever-$basearch' ,europe: 'https://mirrors.xtom.de/postgresql/repos/yum/non-free/16/redhat/rhel-$releasever-$basearch' } ,meta: { skip_if_unavailable: 1 }}
9971004
- { name: pgdg17-nonfree ,description: 'PostgreSQL 17+' ,module: extra ,releases: [8,9,10] ,arch: [x86_64 ] ,baseurl: { default: 'https://download.postgresql.org/pub/repos/yum/non-free/17/redhat/rhel-$releasever-$basearch' ,china: 'https://mirrors.aliyun.com/postgresql/repos/yum/non-free/17/redhat/rhel-$releasever-$basearch' ,europe: 'https://mirrors.xtom.de/postgresql/repos/yum/non-free/17/redhat/rhel-$releasever-$basearch' } ,meta: { skip_if_unavailable: 1 }}
9981005
- { name: pgdg18-nonfree ,description: 'PostgreSQL 18+' ,module: extra ,releases: [8,9,10] ,arch: [x86_64 ] ,baseurl: { default: 'https://download.postgresql.org/pub/repos/yum/non-free/18/redhat/rhel-$releasever-$basearch' ,china: 'https://mirrors.aliyun.com/postgresql/repos/yum/non-free/18/redhat/rhel-$releasever-$basearch' ,europe: 'https://mirrors.xtom.de/postgresql/repos/yum/non-free/18/redhat/rhel-$releasever-$basearch' } ,meta: { skip_if_unavailable: 1 }}
999-
- { name: timescaledb ,description: 'TimescaleDB' ,module: extra ,releases: [8,9 ] ,arch: [x86_64, aarch64] ,baseurl: { default: 'https://packagecloud.io/timescale/timescaledb/el/$releasever/$basearch' }}
1000-
- { name: timescaledb ,description: 'TimescaleDB' ,module: extra ,releases: [ 10] ,arch: [x86_64 ] ,baseurl: { default: 'https://packagecloud.io/timescale/timescaledb/el/$releasever/$basearch' }}
1006+
- { name: timescaledb ,description: 'TimescaleDB' ,module: extra ,releases: [8,9,10] ,arch: [x86_64, aarch64] ,baseurl: { default: 'https://packagecloud.io/timescale/timescaledb/el/$releasever/$basearch' }}
10011007
- { name: percona ,description: 'Percona TDE' ,module: percona ,releases: [8,9,10] ,arch: [x86_64, aarch64] ,baseurl: { default: 'https://repo.pigsty.io/yum/percona/el$releasever.$basearch' ,china: 'https://repo.pigsty.cc/yum/percona/el$releasever.$basearch' ,origin: 'http://repo.percona.com/ppg-18.3/yum/release/$releasever/RPMS/$basearch' }}
10021008
- { name: groonga ,description: 'Groonga' ,module: groonga ,releases: [8,9,10] ,arch: [x86_64, aarch64] ,baseurl: { default: 'https://packages.groonga.org/almalinux/$releasever/$basearch/' }}
10031009
- { name: mysql ,description: 'MySQL' ,module: mysql ,releases: [8,9,10] ,arch: [x86_64, aarch64] ,baseurl: { default: 'https://repo.mysql.com/yum/mysql-8.4-community/el/$releasever/$basearch/' }}
@@ -1110,7 +1116,7 @@ pg_home_map:
11101116
citus: '/usr/lib/postgresql/$v'
11111117
mssql: '/usr/babelfish-$v/'
11121118
agens: '/usr/agens-$v'
1113-
gpsql: '/usr/local/cloudberry'
1119+
gpsql: '/usr/cloudberry'
11141120
ivory: '/usr/ivory-5'
11151121
mysql: '/usr/halo-14'
11161122
polar: '/usr/polar-$v'

cli/confgen_test.go

Lines changed: 101 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,41 @@ func TestGenerateExtensionMappingsFallbackToDeclaredPG(t *testing.T) {
123123
}
124124
}
125125

126+
func TestGenerateExtensionMappingsSkipsForkBoundExtensions(t *testing.T) {
127+
g := &PigstyConfigGenerator{osCode: "el9"}
128+
extensions := map[string]*ExtensionData{
129+
"orioledb": {
130+
ID: 1,
131+
Name: "orioledb",
132+
Alias: "orioledb",
133+
Category: "FEAT",
134+
CategoryID: 1,
135+
RPMPkg: "orioledb_$v",
136+
RPMPG: []int{18, 17, 16},
137+
Available: map[int]bool{},
138+
ForkBound: true,
139+
},
140+
"pg_graphql": {
141+
ID: 2,
142+
Name: "pg_graphql",
143+
Alias: "pg_graphql",
144+
Category: "FEAT",
145+
CategoryID: 1,
146+
RPMPkg: "pg_graphql_$v",
147+
RPMPG: []int{18},
148+
Available: map[int]bool{},
149+
},
150+
}
151+
152+
mappings := g.generateExtensionMappings(extensions)
153+
if len(mappings) != 1 {
154+
t.Fatalf("expected 1 non-fork mapping, got %d: %#v", len(mappings), mappings)
155+
}
156+
if mappings[0].Name != "pg_graphql" {
157+
t.Fatalf("mapping name = %q, want pg_graphql", mappings[0].Name)
158+
}
159+
}
160+
126161
func TestEL9ARMPatroniUsesNoarchPackageSelectors(t *testing.T) {
127162
g := &PigstyConfigGenerator{
128163
osCode: "el9",
@@ -704,10 +739,10 @@ func TestConfigConstantsIncludeBabelfishAlias(t *testing.T) {
704739
if mapping.Key != "babelfish" {
705740
continue
706741
}
707-
if mapping.RPM != "babelfishpg-17 babelfishpg-17-babelfish" {
742+
if mapping.RPM != "babelfish-$v" {
708743
t.Fatalf("babelfish RPM alias = %q", mapping.RPM)
709744
}
710-
if mapping.DEB != "babelfishpg-17 babelfishpg-17-babelfish" {
745+
if mapping.DEB != "babelfish-$v" {
711746
t.Fatalf("babelfish DEB alias = %q", mapping.DEB)
712747
}
713748
return
@@ -718,15 +753,15 @@ func TestConfigConstantsIncludeBabelfishAlias(t *testing.T) {
718753
func TestConfigConstantsIncludeAgensAndPgEdgeAlias(t *testing.T) {
719754
constants := GetConfigConstants()
720755
expected := map[string]PackageMapping{
721-
"agens": {
722-
Key: "agens",
723-
RPM: "agensgraph_$v",
756+
"agensgraph": {
757+
Key: "agensgraph",
758+
RPM: "agensgraph-$v",
724759
DEB: "agensgraph-$v",
725760
},
726761
"pgedge": {
727762
Key: "pgedge",
728-
RPM: "pgedge_$v spock_$v lolor_$v snowflake_$v",
729-
DEB: "pgedge-$v pgedge-$v-spock pgedge-$v-lolor pgedge-$v-snowflake",
763+
RPM: "pgedge-$v",
764+
DEB: "pgedge-$v",
730765
},
731766
}
732767

@@ -759,11 +794,6 @@ func TestConfigConstantsIncludePolarDBAlias(t *testing.T) {
759794
RPM: "polardb-$v",
760795
DEB: "polardb-$v",
761796
},
762-
"polar": {
763-
Key: "polar",
764-
RPM: "polardb-$v",
765-
DEB: "polardb-$v",
766-
},
767797
}
768798

769799
found := make(map[string]PackageMapping)
@@ -790,23 +820,78 @@ func TestConfigConstantsIncludePolarDBAlias(t *testing.T) {
790820
func TestConfigConstantsIncludeOrioleVersionTemplate(t *testing.T) {
791821
constants := GetConfigConstants()
792822
for _, mapping := range constants.PGSQLExoticMap {
793-
if mapping.Key != "oriole" {
823+
if mapping.Key != "orioledb" {
794824
continue
795825
}
796-
if mapping.RPM != "orioledb_$v oriolepg_$v" {
826+
if mapping.RPM != "orioledb-$v" {
797827
t.Fatalf("oriole RPM alias = %q", mapping.RPM)
798828
}
799-
if mapping.DEB != "oriolepg-$v oriolepg-$v-orioledb" {
829+
if mapping.DEB != "orioledb-$v" {
800830
t.Fatalf("oriole DEB alias = %q", mapping.DEB)
801831
}
802832
return
803833
}
804834
t.Fatal("oriole mapping not found in PGSQLExoticMap")
805835
}
806836

837+
func TestConfigConstantsIncludeCloudberryFullPackageAlias(t *testing.T) {
838+
constants := GetConfigConstants()
839+
for _, mapping := range constants.PGSQLExoticMap {
840+
if mapping.Key != "cloudberry" {
841+
continue
842+
}
843+
want := "cloudberry cloudberry-backup cloudberry-pxf"
844+
if mapping.RPM != want {
845+
t.Fatalf("cloudberry RPM alias = %q, want %q", mapping.RPM, want)
846+
}
847+
if mapping.DEB != want {
848+
t.Fatalf("cloudberry DEB alias = %q, want %q", mapping.DEB, want)
849+
}
850+
return
851+
}
852+
t.Fatal("cloudberry mapping not found in PGSQLExoticMap")
853+
}
854+
855+
func TestConfigConstantsIncludePgHardstorageToolAlias(t *testing.T) {
856+
constants := GetConfigConstants()
857+
expected := map[string]PackageMapping{
858+
"pg-hardstorage": {
859+
Key: "pg-hardstorage",
860+
RPM: "pg-hardstorage",
861+
DEB: "pg-hardstorage",
862+
},
863+
"pg_hardstorage": {
864+
Key: "pg_hardstorage",
865+
RPM: "pg-hardstorage",
866+
DEB: "pg-hardstorage",
867+
},
868+
}
869+
870+
found := make(map[string]PackageMapping)
871+
for _, mapping := range constants.PGSQLUtilMap {
872+
if _, ok := expected[mapping.Key]; ok {
873+
found[mapping.Key] = mapping
874+
}
875+
}
876+
877+
for key, want := range expected {
878+
got, ok := found[key]
879+
if !ok {
880+
t.Fatalf("%s mapping not found in PGSQLUtilMap", key)
881+
}
882+
if got.RPM != want.RPM {
883+
t.Fatalf("%s RPM alias = %q, want %q", key, got.RPM, want.RPM)
884+
}
885+
if got.DEB != want.DEB {
886+
t.Fatalf("%s DEB alias = %q, want %q", key, got.DEB, want.DEB)
887+
}
888+
}
889+
}
890+
807891
func TestTemplatesIncludeAgensAndPgEdgeHomeMap(t *testing.T) {
808892
required := []string{
809893
"agens: '/usr/agens-$v'",
894+
"gpsql: '/usr/cloudberry'",
810895
"polar: '/usr/polar-$v'",
811896
"pgedge: '/usr/pgedge-$v'",
812897
}
@@ -827,7 +912,6 @@ func TestRenderedTemplatesIncludePolarDBPackageMap(t *testing.T) {
827912
} {
828913
for _, fragment := range []string{
829914
`polardb: "polardb-$v"`,
830-
`polar: "polardb-$v"`,
831915
`polar: '/usr/polar-$v'`,
832916
} {
833917
if !strings.Contains(rendered, fragment) {
@@ -839,6 +923,7 @@ func TestRenderedTemplatesIncludePolarDBPackageMap(t *testing.T) {
839923
`PolarDB"`,
840924
`polar: '/u01/polardb_pg_17'`,
841925
`polar: '/usr/polar-17'`,
926+
`polar: "polardb-$v"`,
842927
`oracle:`,
843928
`'/u01/polardb_pg'`,
844929
} {

0 commit comments

Comments
 (0)