This is an explanation of the video content.
 用技术延续对ACG的热爱
132

 |   | 

Go实现对PostgreSQL数据库进行备份

请将替换为您的PostgreSQL Docker容器的IP地址,将替换为相应的连接详细信息,将替换为您的PostgreSQL容器的名称。

运行此代码将在Docker容器中执行数据库备份,并将备份文件保存为名为backup.sql的文件。请确保您的应用程序具有适当的权限来执行备份操作,并根据实际需求进行适当的错误处理和日志记录。

原装模式下

package main

import (
	"fmt"
	"log"
	"os"
	"os/exec"

	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

func main() {
	dsn := "host=<your_host> user=<your_user> password=<your_password> dbname=<your_db> port=<your_port> sslmode=disable"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("Failed to connect to database: %v", err)
	}
	defer db.Close()

	backupFile := "backup.sql"
	cmd := exec.Command("pg_dump", "--dbname=<your_db_url>", "--file="+backupFile)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	err = cmd.Run()
	if err != nil {
		log.Fatalf("Failed to backup database: %v", err)
	}

	fmt.Println("Backup completed successfully!")
}

Docker模式下

package main

import (
	"fmt"
	"log"
	"os"
	"os/exec"

	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

func main() {
	dsn := "host=<docker_container_ip> user=<your_user> password=<your_password> dbname=<your_db> port=<your_port> sslmode=disable"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("Failed to connect to database: %v", err)
	}
	defer db.Close()

	backupFile := "backup.sql"
	cmd := exec.Command("docker", "exec", "<your_postgres_container_name>", "pg_dump", "--dbname=<your_db_url>", "--file="+backupFile)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	err = cmd.Run()
	if err != nil {
		log.Fatalf("Failed to backup database: %v", err)
	}

	fmt.Println("Backup completed successfully!")
}

依赖os/exec包执行

132 服务端 ↦ Go开发技巧 __ 165 字
 Go开发技巧 #10