各位,我在 golang 中使用 postgresql 遇到了一些麻烦。 我有一个 sql 文件(database.sql),在启动我的服务器之前我想执行一些命令,它看起来像那样
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
);
我知道,我应该使用 db.Exec(request),但是我有很多请求(“CREATE TABLE user”和其他...)
我不知道该怎么做
帮助,非常感谢!
最佳答案
您可以将文件的内容读入一个字符串并将其传递给Exec
。
query, err := ioutil.ReadFile("path/to/database.sql")
if err != nil {
panic(err)
}
if _, err := db.Exec(query); err != nil {
panic(err)
}
如果您的 database.sql
是以这种方式格式化的,或者它包含破坏 db.Exec
的查询,那么您可以使用 os/exec
与 psql
一起(如果它安装在运行代码的机器上)。
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)
}
关于sql - 如何在golang中使用命令执行sql文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49545146/