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!
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 love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With