douhengdao4499
douhengdao4499
2018-03-28 22:24
浏览 727

如何在Golang中使用命令执行SQL文件

everyone, I have some troubles with postgresql in golang. I have an sql file (database.sql), and before starting my server I want to exec some command, it look's like that

CREATE TABLE forums (
  id BIGSERIAL primary key,
  slug TEXT NOT NULL UNIQUE,
  title TEXT,
  author TEXT references users(login),
  threads BIGINT DEFAULT 0,
  posts BIGINT DEFAULT 0
);

I know, that I should use db.Exec(request), but i have many requests ("CREATE TABLE user" and others...)

I have no idea, how to do that

Help, and thanks a lot!

图片转代码服务由CSDN问答提供 功能建议

所有人,我在golang中使用postgresql遇到了一些麻烦。 我有一个sql文件(database.sql),并且 在启动服务器之前,我想执行一些命令,看起来像是

  CREATE TABLE论坛(
 id大主键,
 slug TEXT NOT NULL UNIQUE,
 标题TEXT,
作者TEXT引用了用户(登录),
线程BIGINT DEFAULT 0,
帖子BIGINT DEFAULT 0 
); 
   
 
 

我知道, 我应该使用db.Exec(request),但是我有很多请求(“ CREATE TABLE用户”和其他请求...)

我不知道,该怎么做

帮助,非常感谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • doushuangdui5419
    doushuangdui5419 2018-03-29 07:34
    已采纳

    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)
    }
    
    点赞 评论

相关推荐