You can read the file's contents into a string and pass that to Exec.
query, err := ioutil.ReadFile("path/to/database.sql")
if err != nil {
panic(err)
}
if _, err := db.Exec(query); err != nil {
panic(err)
}
If your database.sql is formated in such a way, or it contains queries that break db.Exec, then you could use os/exec together with psql (if it's installed on the machine on which the code is being run).
cmd := exec.Command("psql", "-d", "database_name", "-f", "path/to/database.sql")
stderr, err := cmd.StderrPipe()
if err != nil {
panic(err)
}
if err := cmd.Start(); err != nil {
panic(err)
}
errout, _ := ioutil.ReadAll(stderr)
if err := cmd.Wait(); err != nil {
fmt.Println(errout)
panic(err)
}
If you have multiple SQL statements in the file, don't forget to set MultiStatements to true. Example:
config := mysql.Config{
User: "User",
Passwd: "Password",
Net: "tcp",
Addr: "127.0.0.1:3306",
DBName: "DB_Name",
MultiStatements: true,
}
var err error
DB, err = sql.Open("mysql", config.FormatDSN())
if err != nil {
log.Fatal(err)
return err
}