61 lines
No EOL
2.5 KiB
Bash
61 lines
No EOL
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Define the directory where PostgreSQL logs are stored
|
|
LOG_DIR="/c/Program Files/PostgreSQL/16/data/log"
|
|
|
|
# Define the output file for extracted SQL commands
|
|
OUTPUT_FILE="migration.sql"
|
|
|
|
# Define the AWK script file path
|
|
AWK_SCRIPT_FILE="filter_sql.awk" # Make sure this file is in the same directory as your bash script
|
|
|
|
# Clear the output file if it exists, or create a new one
|
|
> "$OUTPUT_FILE"
|
|
|
|
echo "Starting SQL command extraction from logs in: $LOG_DIR"
|
|
echo "Extracted commands will be saved to: $OUTPUT_FILE"
|
|
echo "----------------------------------------------------"
|
|
|
|
# --- NEW PART: GET LAST GIT COMMIT DATE ---
|
|
GIT_LAST_COMMIT_DATE_MS="" # This will store the Git commit date in YYYY-MM-DD HH:MM:SS.000 format
|
|
|
|
# Check if we are inside a Git repository
|
|
if git rev-parse --is-inside-work-tree &>/dev/null; then
|
|
# Get the last commit date in ISO 8601 strict format (e.g., 2025-07-31T16:21:44+02:00)
|
|
GIT_LAST_COMMIT_ISO=$(git log -1 --format=%cd --date=iso-strict)
|
|
|
|
if [ -n "$GIT_LAST_COMMIT_ISO" ]; then
|
|
# Convert to YYYY-MM-DD HH:MM:SS.000 for comparison with log timestamps
|
|
# cut -d'.' -f1 gets "YYYY-MM-DDTHH:MM:SS"
|
|
# tr 'T' ' ' changes 'T' to space
|
|
# "\.000" appends milliseconds for consistent string comparison
|
|
GIT_LAST_COMMIT_DATE_MS=$(echo "$GIT_LAST_COMMIT_ISO" | cut -d'.' -f1 | tr 'T' ' ')"\.000"
|
|
echo "Git last commit date detected (for log cutoff): $GIT_LAST_COMMIT_DATE_MS"
|
|
else
|
|
echo "Warning: Could not get last Git commit date. Processing all log entries."
|
|
fi
|
|
else
|
|
echo "Not inside a Git repository. Processing all log entries."
|
|
fi
|
|
|
|
# Regex to detect the start of a new log entry (used by awk)
|
|
NEW_LOG_ENTRY_REGEX="^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}"
|
|
|
|
# --- Check if the AWK script file exists ---
|
|
if [ ! -f "$AWK_SCRIPT_FILE" ]; then
|
|
echo "ERROR: AWK script file '$AWK_SCRIPT_FILE' not found!"
|
|
echo "Please create '$AWK_SCRIPT_FILE' with the AWK code from Step 1."
|
|
exit 1
|
|
fi
|
|
|
|
# Find all .log files in the specified directory and process them
|
|
find "$LOG_DIR" -type f -name "*.log" | while read -r logfile; do
|
|
echo "Processing log file: $logfile"
|
|
LC_ALL=C awk -v new_log_regex="$NEW_LOG_ENTRY_REGEX" \
|
|
-v git_cutoff_date_str="$GIT_LAST_COMMIT_DATE_MS" \
|
|
-f "$AWK_SCRIPT_FILE" "$logfile" >> "$OUTPUT_FILE"
|
|
done
|
|
|
|
echo "SQL extraction complete"
|
|
echo "----------------------------------------------------"
|
|
echo "Final SQL output is in: '$OUTPUT_FILE'." |