66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package pgdump
|
|
|
|
import (
|
|
"database/sql"
|
|
"io"
|
|
"text/template"
|
|
)
|
|
|
|
type DumpInfo struct {
|
|
DumpVersion string
|
|
ServerVersion string
|
|
CompleteTime string
|
|
ThreadsNumber int
|
|
}
|
|
|
|
func getServerVersion(db *sql.DB) string {
|
|
var version string
|
|
query := "SELECT version();"
|
|
row := db.QueryRow(query)
|
|
if err := row.Scan(&version); err != nil {
|
|
return "Unknown"
|
|
}
|
|
return version
|
|
}
|
|
|
|
func writeHeader(file io.Writer, info DumpInfo) error {
|
|
const headerTemplate = `-- Go PostgreSQL Dump v{{ .DumpVersion }}
|
|
--
|
|
-- Server version:
|
|
-- {{ .ServerVersion }}
|
|
-- Threads Used:
|
|
-- {{ .ThreadsNumber }}
|
|
|
|
SET statement_timeout = 0;
|
|
SET lock_timeout = 0;
|
|
SET idle_in_transaction_session_timeout = 0;
|
|
SET client_encoding = 'UTF8';
|
|
SET standard_conforming_strings = on;
|
|
SELECT pg_catalog.set_config('search_path', '', false);
|
|
SET check_function_bodies = false;
|
|
SET xmloption = content;
|
|
SET client_min_messages = warning;
|
|
SET row_security = off;
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = heap;
|
|
`
|
|
tmpl, err := template.New("header").Parse(headerTemplate)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return tmpl.Execute(file, info)
|
|
}
|
|
|
|
func writeFooter(file io.Writer, info DumpInfo) error {
|
|
const footerTemplate = `--
|
|
-- Dump completed on {{ .CompleteTime }}
|
|
--`
|
|
tmpl, err := template.New("footer").Parse(footerTemplate)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return tmpl.Execute(file, info)
|
|
}
|