private-schrijfsels-en-noti.../2024/Postgres and ZFS snapshots.md

873 B

func takeSnapshot(db *sql.DB, dataset string, height int, tag string) error {
	log.Printf("Taking a ZFS snapshot: %s@%d%s", dataset, height, tag)
	log.Printf("  calling pg_backup_start('blkchain', true)") // pg < 15 use pg_start_backup
	if _, err := db.Exec(`SELECT pg_backupstart('blkchain', true)`); err != nil {
		return err
	}
	log.Printf("  executing COPY (SELECT) TO PROGRAM 'zfs snapshot %s@%d%s'", dataset, height, tag)
	if _, err := db.Exec(fmt.Sprintf(`COPY (SELECT) TO PROGRAM 'zfs snapshot %s@%d%s'`, dataset, height, tag)); err != nil {
		return err
	}
	log.Printf("  calling pg_backup_stop()") // pg < 15 use pg_stop_backup
	if _, err := db.Exec(`SELECT pg_backup_stop()`); err != nil {
		return err
	}
	return nil
}