Bagaimana untuk memulihkan pangkalan data di Golang?

WBOY
Lepaskan: 2024-06-01 19:18:01
asal
874 orang telah melayarinya

Terdapat pelbagai cara untuk memulihkan pangkalan data dalam Go: gunakan alat baris arahan db dump dan db load untuk membuang dan memulihkan. Gunakan perpustakaan pgx untuk melaksanakan operasi pangkalan data yang lebih mudah melibatkan import data menggunakan CREATE TEMP TABLE jadual sementara.

如何在 Golang 中还原数据库?

Pemulihan Pangkalan Data dalam Go

Pemulihan ialah langkah penting kerana ia membolehkan anda memulihkan data daripada versi pangkalan data sebelumnya. Terdapat beberapa cara untuk mencapai ini dalam Go.

Menggunakan db dump dan db loaddb dumpdb load

命令行方法

您可以使用以下命令从数据库转储数据:

pg_dump -U username -h hostname -d database_name > dump.sql
Salin selepas log masuk

要从转储还原数据,请运行以下命令:

psql -U username -h hostname database_name < dump.sql
Salin selepas log masuk

代码实现

在 Go 中,您可以使用 exec.Command() 函数执行这些命令:

import (
    "log"
    "os/exec"
)

func DumpDatabase(user, host, db string) {
    cmd := exec.Command("pg_dump", "-U", user, "-h", host, "-d", db)
    outfile, err := os.Create("dump.sql")
    if err != nil {
        log.Fatal(err)
    }
    defer outfile.Close()

    cmd.Stdout = outfile

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}

func LoadDatabase(user, host, db, dumpfile string) {
    cmd := exec.Command("psql", "-U", user, "-h", host, db)
    infile, err := os.Open(dumpfile)
    if err != nil {
        log.Fatal(err)
    }
    defer infile.Close()

    cmd.Stdin = infile

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}

func main() {
    DumpDatabase("dbuser", "localhost", "mydb")
    LoadDatabase("dbuser", "localhost", "mydb", "dump.sql")
}
Salin selepas log masuk

使用 pgx 库

代码实现

pgx

Kaedah Baris Perintah

Anda boleh membuang data daripada pangkalan data menggunakan arahan berikut:

import (
    "context"
    "log"

    "github.com/jackc/pgx/v4"
)

const restoreStatement = `
CREATE TEMP TABLE imported_data (
    id SERIAL PRIMARY KEY,
    name TEXT
) ON COMMIT PRESERVE ROWS;
COPY imported_data (name) FROM stdin;
INSERT INTO mytable (name) SELECT name FROM imported_data;
DROP TABLE imported_data;
`

func RestoreDatabase(conn *pgx.Conn, dumpfile string) error {
    file, err := os.Open(dumpfile)
    if err != nil {
        return err
    }
    defer file.Close()

    _, err = conn.Exec(context.Background(), restoreStatement, pgx.CopyTo(file, pgx.RowEncoder(func([]interface{}) error { return nil })))
    if err != nil {
        return err
    }

    return nil
}

func main() {
    conn, err := pgx.Connect(context.Background(), "postgres://user:password@hostname/dbname")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    RestoreDatabase(conn, "dump.sql")
}
Salin selepas log masuk

Untuk memulihkan data daripada dump, jalankan arahan berikut:

pg_dump -U postgres -h localhost -d mail_db > db_backup.sql
Salin selepas log masuk

Pelaksanaan Kod🎜🎜Dalam Go, anda boleh melaksanakan arahan ini menggunakan exec.Command() fungsi: 🎜
psql -U postgres -h localhost mail_db < db_backup.sql
Salin selepas log masuk
🎜Menggunakan perpustakaan pgx🎜🎜Pelaksanaan Kod🎜🎜 Pustaka pgx menyediakan cara yang lebih mudah untuk melaksanakan operasi pangkalan data. 🎜rrreee🎜Kes praktikal🎜🎜Berikut ialah contoh memulihkan pangkalan data mel: 🎜rrreee🎜Untuk memulihkan pangkalan data, anda cuma jalankan arahan berikut: 🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk memulihkan pangkalan data di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!