Skip to content

Commit 8c41f08

Browse files
committed
Add the version attribute to postgresql_extension.
1 parent a4965c0 commit 8c41f08

2 files changed

Lines changed: 53 additions & 4 deletions

File tree

builtin/providers/postgresql/resource_postgresql_extension.go

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import (
1313
)
1414

1515
const (
16-
extNameAttr = "name"
17-
extSchemaAttr = "schema"
16+
extNameAttr = "name"
17+
extSchemaAttr = "schema"
18+
extVersionAttr = "version"
1819
)
1920

2021
func resourcePostgreSQLExtension() *schema.Resource {
@@ -39,6 +40,12 @@ func resourcePostgreSQLExtension() *schema.Resource {
3940
Computed: true,
4041
Description: "Sets the schema of an extension",
4142
},
43+
extVersionAttr: {
44+
Type: schema.TypeString,
45+
Optional: true,
46+
Computed: true,
47+
Description: "Sets the version number of the extension",
48+
},
4249
},
4350
}
4451
}
@@ -60,6 +67,10 @@ func resourcePostgreSQLExtensionCreate(d *schema.ResourceData, meta interface{})
6067
fmt.Fprint(b, " SCHEMA ", pq.QuoteIdentifier(v.(string)))
6168
}
6269

70+
if v, ok := d.GetOk(extVersionAttr); ok {
71+
fmt.Fprint(b, " VERSION ", pq.QuoteIdentifier(v.(string)))
72+
}
73+
6374
query := b.String()
6475
_, err = conn.Query(query)
6576
if err != nil {
@@ -80,8 +91,8 @@ func resourcePostgreSQLExtensionRead(d *schema.ResourceData, meta interface{}) e
8091
defer conn.Close()
8192

8293
extID := d.Id()
83-
var extName, extSchema string
84-
err = conn.QueryRow("SELECT e.extname, n.nspname FROM pg_catalog.pg_extension e, pg_catalog.pg_namespace n WHERE n.oid = e.extnamespace AND e.extname = $1", extID).Scan(&extName, &extSchema)
94+
var extName, extSchema, extVersion string
95+
err = conn.QueryRow("SELECT e.extname, n.nspname, e.extversion FROM pg_catalog.pg_extension e, pg_catalog.pg_namespace n WHERE n.oid = e.extnamespace AND e.extname = $1", extID).Scan(&extName, &extSchema, &extVersion)
8596
switch {
8697
case err == sql.ErrNoRows:
8798
log.Printf("[WARN] PostgreSQL extension (%s) not found", d.Id())
@@ -92,6 +103,7 @@ func resourcePostgreSQLExtensionRead(d *schema.ResourceData, meta interface{}) e
92103
default:
93104
d.Set(extNameAttr, extName)
94105
d.Set(extSchemaAttr, extSchema)
106+
d.Set(extVersionAttr, extVersion)
95107
d.SetId(extName)
96108
return nil
97109
}
@@ -132,6 +144,10 @@ func resourcePostgreSQLExtensionUpdate(d *schema.ResourceData, meta interface{})
132144
return err
133145
}
134146

147+
if err := setExtVersion(conn, d); err != nil {
148+
return err
149+
}
150+
135151
return resourcePostgreSQLExtensionRead(d, meta)
136152
}
137153

@@ -154,3 +170,27 @@ func setExtSchema(conn *sql.DB, d *schema.ResourceData) error {
154170

155171
return nil
156172
}
173+
174+
func setExtVersion(conn *sql.DB, d *schema.ResourceData) error {
175+
if !d.HasChange(extVersionAttr) {
176+
return nil
177+
}
178+
179+
extID := d.Id()
180+
181+
b := bytes.NewBufferString("ALTER EXTENSION ")
182+
fmt.Fprintf(b, "%s UPDATE", pq.QuoteIdentifier(extID))
183+
184+
_, nraw := d.GetChange(extVersionAttr)
185+
n := nraw.(string)
186+
if n != "" {
187+
fmt.Fprintf(b, " TO %s", pq.QuoteIdentifier(n))
188+
}
189+
190+
query := b.String()
191+
if _, err := conn.Query(query); err != nil {
192+
return errwrap.Wrapf("Error updating extension version: {{err}}", err)
193+
}
194+
195+
return nil
196+
}

builtin/providers/postgresql/resource_postgresql_extension_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ func TestAccPostgresqlExtension_Basic(t *testing.T) {
2121
testAccCheckPostgresqlExtensionExists("postgresql_extension.myextension"),
2222
resource.TestCheckResourceAttr(
2323
"postgresql_extension.myextension", "name", "pg_trgm"),
24+
resource.TestCheckResourceAttr(
25+
"postgresql_extension.myextension", "schema", "public"),
26+
27+
// NOTE(sean): Version 1.3 is what's
28+
// shipped with PostgreSQL 9.6.1. This
29+
// version number may drift in the
30+
// future.
31+
resource.TestCheckResourceAttr(
32+
"postgresql_extension.myextension", "version", "1.3"),
2433
),
2534
},
2635
},

0 commit comments

Comments
 (0)