github.com/mehmetalisavas/terraform@v0.7.10/builtin/providers/postgresql/resource_postgresql_extension.go (about) 1 package postgresql 2 3 import ( 4 "database/sql" 5 "fmt" 6 7 "github.com/hashicorp/errwrap" 8 "github.com/hashicorp/terraform/helper/schema" 9 "github.com/lib/pq" 10 ) 11 12 func resourcePostgreSQLExtension() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourcePostgreSQLExtensionCreate, 15 Read: resourcePostgreSQLExtensionRead, 16 Delete: resourcePostgreSQLExtensionDelete, 17 18 Schema: map[string]*schema.Schema{ 19 "name": { 20 Type: schema.TypeString, 21 Required: true, 22 ForceNew: true, 23 }, 24 }, 25 } 26 } 27 28 func resourcePostgreSQLExtensionCreate(d *schema.ResourceData, meta interface{}) error { 29 client := meta.(*Client) 30 conn, err := client.Connect() 31 if err != nil { 32 return err 33 } 34 defer conn.Close() 35 36 extensionName := d.Get("name").(string) 37 38 query := fmt.Sprintf("CREATE EXTENSION %s", pq.QuoteIdentifier(extensionName)) 39 _, err = conn.Query(query) 40 if err != nil { 41 return errwrap.Wrapf("Error creating extension: {{err}}", err) 42 } 43 44 d.SetId(extensionName) 45 46 return resourcePostgreSQLExtensionRead(d, meta) 47 } 48 49 func resourcePostgreSQLExtensionRead(d *schema.ResourceData, meta interface{}) error { 50 client := meta.(*Client) 51 conn, err := client.Connect() 52 if err != nil { 53 return err 54 } 55 defer conn.Close() 56 57 extensionName := d.Get("name").(string) 58 59 var hasExtension bool 60 err = conn.QueryRow("SELECT 1 from pg_extension d WHERE extname=$1", extensionName).Scan(&hasExtension) 61 switch { 62 case err == sql.ErrNoRows: 63 d.SetId("") 64 return nil 65 case err != nil: 66 return errwrap.Wrapf("Error reading extension: {{err}}", err) 67 default: 68 d.Set("extension", hasExtension) 69 return nil 70 } 71 } 72 73 func resourcePostgreSQLExtensionDelete(d *schema.ResourceData, meta interface{}) error { 74 client := meta.(*Client) 75 conn, err := client.Connect() 76 if err != nil { 77 return err 78 } 79 defer conn.Close() 80 81 extensionName := d.Get("name").(string) 82 83 query := fmt.Sprintf("DROP EXTENSION %s", pq.QuoteIdentifier(extensionName)) 84 _, err = conn.Query(query) 85 if err != nil { 86 return errwrap.Wrapf("Error deleting extension: {{err}}", err) 87 } 88 89 d.SetId("") 90 91 return nil 92 }