1+ #! /usr/bin/env bash
2+ # shellcheck shell=bash
3+
4+ set -euo pipefail
5+
6+ # Function to display help message
7+ show_help () {
8+ echo " Usage: nix run .#pg-restore -- [OPTIONS]"
9+ echo
10+ echo " Run pg_restore with the specified parameters."
11+ echo
12+ echo " Options:"
13+ echo " --version PostgreSQL version (currently only 15 is supported)"
14+ echo " --dbname Name of the database to restore to"
15+ echo " --host Host of the database server"
16+ echo " --user Database user to connect as"
17+ echo " --file Path to the file to restore from (absolute or relative to current directory)"
18+ echo " --port Port number (default: 5432)"
19+ echo " -h, --help Show this help message and exit"
20+ echo " Example:"
21+ echo " nix run .#pg-restore -- --version 15 --dbname postgres --host localhost --user postgres --port 5435 --file my.dump"
22+ }
23+
24+ # Initialize variables
25+ PG_VERSION=" "
26+ DBNAME=" "
27+ DBHOST=" "
28+ DBUSER=" "
29+ RESTORE_FILE=" "
30+ PORT=" 5432"
31+
32+ # Parse command line arguments
33+ while [[ $# -gt 0 ]]; do
34+ case $1 in
35+ --version)
36+ PG_VERSION=" $2 "
37+ shift 2
38+ ;;
39+ --dbname)
40+ DBNAME=" $2 "
41+ shift 2
42+ ;;
43+ --host)
44+ DBHOST=" $2 "
45+ shift 2
46+ ;;
47+ --user)
48+ DBUSER=" $2 "
49+ shift 2
50+ ;;
51+ --file)
52+ RESTORE_FILE=" $2 "
53+ shift 2
54+ ;;
55+ --port)
56+ PORT=" $2 "
57+ shift 2
58+ ;;
59+ -h|--help)
60+ show_help
61+ exit 0
62+ ;;
63+ * )
64+ echo " Unknown option: $1 "
65+ show_help
66+ exit 1
67+ ;;
68+ esac
69+ done
70+
71+ # Check if all required arguments are provided
72+ if [ -z " $PG_VERSION " ] || [ -z " $DBNAME " ] || [ -z " $DBHOST " ] || [ -z " $DBUSER " ] || [ -z " $RESTORE_FILE " ]; then
73+ echo " Error: Missing required arguments."
74+ show_help
75+ exit 1
76+ fi
77+
78+ if [ " $PG_VERSION " == " 15" ]; then
79+ echo " Starting restore for PSQL 15"
80+ PSQL15=@PSQL15_BINDIR@
81+ PSQL_BINDIR=" $PSQL15 "
82+ else
83+ echo " Error: Please provide a valid Postgres version (currently only 15 is supported)"
84+ show_help
85+ exit 1
86+ fi
87+
88+ # Convert RESTORE_FILE to an absolute path if it's relative
89+ if [[ " $RESTORE_FILE " != /* ]]; then
90+ RESTORE_FILE=" $( pwd) /$RESTORE_FILE "
91+ fi
92+
93+ # Check if the file exists
94+ if [ ! -f " $RESTORE_FILE " ]; then
95+ echo " Error: Restore file '$RESTORE_FILE ' does not exist."
96+ exit 1
97+ fi
98+
99+ echo " Using restore file: $RESTORE_FILE "
100+
101+ # Run pg_restore and capture its exit status
102+ " $PSQL_BINDIR /bin/pg_restore" \
103+ -h " $DBHOST " \
104+ -p " $PORT " \
105+ -U " $DBUSER " \
106+ -d " $DBNAME " \
107+ -v \
108+ --no-owner \
109+ --no-acl \
110+ " $RESTORE_FILE "
111+
112+ RESTORE_STATUS=$?
113+
114+ # Check the exit status of pg_restore
115+ if [ $RESTORE_STATUS -eq 0 ]; then
116+ echo " Restore completed successfully."
117+ exit 0
118+ else
119+ echo " Restore failed with exit code $RESTORE_STATUS ."
120+ exit $RESTORE_STATUS
121+ fi
0 commit comments