sql - 如何在golang中使用命令执行sql文件

标签 sql database postgresql go

各位,我在 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/execpsql 一起(如果它安装在运行代码的机器上)。

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/

相关文章:

mysql - 选择总经过值小于或等于的行

Android 应用程序可以离线和在线工作吗?我应该以哪种方式同步数据?

mysql - 数据库 - 违反唯一约束的处理

c++ - 使用 PostgreSQL 编译静态 Qt 5.10.0 时出错

c# - 在 SQL Server 日期时间字段中格式化日期时间的正确方法是什么

sql - 如何按分区填充 BigQuery 中缺失的日期(无回填)

sql - String_Split 表的值

php - 设置正确的 MYSQL 表选项

sql - 对象结构关系数据库设计

ruby-on-rails-3 - Postgres : Restructuring to Schemas