diff --git a/home-apps/n8n.yaml b/home-apps/n8n.yaml index 7ae6623..96bf3fe 100644 --- a/home-apps/n8n.yaml +++ b/home-apps/n8n.yaml @@ -33,7 +33,7 @@ spec: spec: containers: - name: n8n - image: mirror.gcr.io/n8nio/n8n:1.80.2 + image: mirror.gcr.io/n8nio/n8n:1.88.0 imagePullPolicy: IfNotPresent securityContext: runAsUser: 0 diff --git a/k3s.sh b/k3s.sh index c4cdd8d..3911610 100644 --- a/k3s.sh +++ b/k3s.sh @@ -3,4 +3,9 @@ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ - --set nfs.server=192.168.1.4 --set nfs.path=/k8s \ No newline at end of file + --set nfs.server=192.168.1.4 --set nfs.path=/k8s + + +# badger batch delete + + cat /Users/junv/code/home-docker/scripts/batch_delete.sql | ssh -p 22422 junv@192.168.1.2 "PGPASSWORD=$PASSWORD psql -h 192.168.1.2 -U postgres -d badges -e" diff --git a/recovery.sh b/recovery.sh index 5fd8da5..764c0fb 100644 --- a/recovery.sh +++ b/recovery.sh @@ -228,3 +228,11 @@ rsync -chavzP --stats rsync://junv@192.168.1.4/backups/192.168.1.2/redis /mnt/k8 # check large files sudo du -xh --max-depth=1 /mnt/k8s | sort -hr | head -n 15 + +# Revert your hard reset + +git reflog +``` + +``` +git reset --hard HEAD@{1} diff --git a/scripts/batch_delete.sql b/scripts/batch_delete.sql new file mode 100644 index 0000000..48f92a1 --- /dev/null +++ b/scripts/batch_delete.sql @@ -0,0 +1,77 @@ +-- First, create indexes if they don't exist +CREATE INDEX IF NOT EXISTS idx_view_records_created_at ON view_records(created_at); +CREATE INDEX IF NOT EXISTS idx_view_records_id ON view_records(id); + +-- Analyze the table to update statistics +ANALYZE view_records; + +\echo 'Starting optimized batch deletion...' + +DO $$ +DECLARE + batch_size INTEGER := 50000; -- Increased batch size + min_id INTEGER; + max_id INTEGER; + current_id INTEGER; + deleted INTEGER; + total_deleted INTEGER := 0; + start_time TIMESTAMP; + batch_start_time TIMESTAMP; +BEGIN + start_time := clock_timestamp(); + + -- Get ID range to work with + SELECT MIN(id), MAX(id) INTO min_id, max_id + FROM view_records + WHERE created_at <= '2024-03-20'; + + RAISE INFO 'Starting batch deletion process at %', start_time; + RAISE INFO 'Processing ID range: % to %', min_id, max_id; + + current_id := min_id; + + -- Disable autovacuum temporarily for this table + ALTER TABLE view_records SET (autovacuum_enabled = false); + + LOOP + EXIT WHEN current_id > max_id; + + batch_start_time := clock_timestamp(); + + -- Delete in ID ranges for better performance + DELETE FROM view_records + WHERE id >= current_id + AND id < current_id + batch_size + AND created_at <= '2024-03-20'; + + GET DIAGNOSTICS deleted = ROW_COUNT; + total_deleted := total_deleted + deleted; + + RAISE INFO 'Batch stats: % records deleted, % total deleted. Batch took % seconds. Current ID: %', + deleted, + total_deleted, + EXTRACT(EPOCH FROM (clock_timestamp() - batch_start_time))::INTEGER, + current_id; + + current_id := current_id + batch_size; + + COMMIT; + END LOOP; + + -- Re-enable autovacuum + ALTER TABLE view_records SET (autovacuum_enabled = true); + + -- Final vacuum to reclaim space + RAISE INFO 'Running VACUUM ANALYZE...'; + VACUUM ANALYZE view_records; + + RAISE INFO 'Deletion complete! Total records deleted: %. Total time: % seconds', + total_deleted, + EXTRACT(EPOCH FROM (clock_timestamp() - start_time))::INTEGER; +END $$; + END LOOP; + + RAISE NOTICE 'Deletion complete! Total records deleted: %. Total time: % seconds', + total_deleted, + EXTRACT(EPOCH FROM (clock_timestamp() - start_time))::INTEGER; +END $$;