blob: 0a3b743404a8778609a6b056757cd8f1f059b2f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#!/usr/bin/env bash
set -e
DEFAULT_DB="lain"
DEFAULT_OWNER="$(whoami)"
DEFAULT_HOST="localhost"
DEFAULT_PORT="5432"
read -p "Enter database name [$DEFAULT_DB]: " DB_NAME
DB_NAME="${DB_NAME:-$DEFAULT_DB}"
read -p "Enter database owner username [$DEFAULT_OWNER]: " DB_OWNER
DB_OWNER="${DB_OWNER:-$DEFAULT_OWNER}"
read -s -p "Enter password for $DB_OWNER (optional): " DB_PASSWORD
echo
# ---------- connection strategy ----------
PSQL_BASE="psql -d postgres -U $DB_OWNER"
if [ -n "$DB_PASSWORD" ]; then
export PGPASSWORD="$DB_PASSWORD"
fi
# Prefer TCP (Docker-safe)
PSQL_TCP="$PSQL_BASE -h $DEFAULT_HOST -p $DEFAULT_PORT"
# Fallback: local socket / peer-auth
PSQL_LOCAL="$PSQL_BASE"
echo
echo "Detecting PostgreSQL connection mode..."
if $PSQL_TCP -c "SELECT 1" >/dev/null 2>&1; then
PSQL_CMD="$PSQL_TCP"
CONNECTION_INFO="TCP ($DEFAULT_HOST:$DEFAULT_PORT)"
elif $PSQL_LOCAL -c "SELECT 1" >/dev/null 2>&1; then
PSQL_CMD="$PSQL_LOCAL"
CONNECTION_INFO="Local socket (peer / trust)"
else
echo "❌ Unable to connect to PostgreSQL."
echo "Tried:"
echo " - TCP: $DEFAULT_HOST:$DEFAULT_PORT"
echo " - Local: UNIX socket"
echo
echo "Fix one of the following:"
echo " • Docker Postgres not running"
echo " • Wrong user ($DB_OWNER)"
echo " • Password required but not provided"
echo " • pg_hba.conf blocks access"
exit 1
fi
echo "Connected via: $CONNECTION_INFO"
# ---------- existence check ----------
DB_EXISTS=$($PSQL_CMD -Atc \
"SELECT 1 FROM pg_database WHERE datname = '$DB_NAME';" \
|| true)
if [ "$DB_EXISTS" = "1" ]; then
ACTION="reset"
else
ACTION="create"
fi
echo
echo "=== Database $ACTION ==="
echo "Database: $DB_NAME"
echo "Owner: $DB_OWNER"
echo "Auth: $CONNECTION_INFO"
echo
read -p "Proceed? [Y/n]: " CONFIRM
if [[ "$CONFIRM" =~ ^[Nn]$ ]]; then
echo "Cancelled."
exit 0
fi
# ---------- drop + create ----------
echo
echo "Applying changes..."
$PSQL_CMD -c "DROP DATABASE IF EXISTS \"$DB_NAME\";"
$PSQL_CMD -c "CREATE DATABASE \"$DB_NAME\" OWNER \"$DB_OWNER\";"
echo
echo "✅ Database '$DB_NAME' ready."
# ---------- DSN ----------
if [ -n "$DB_PASSWORD" ]; then
DSN="postgresql://$DB_OWNER:$DB_PASSWORD@$DEFAULT_HOST:$DEFAULT_PORT/$DB_NAME?sslmode=disable"
else
DSN="postgresql://$DB_OWNER@$DEFAULT_HOST:$DEFAULT_PORT/$DB_NAME?sslmode=disable"
fi
echo
echo "DSN:"
echo "$DSN"
unset PGPASSWORD
|