Add DB reset script + seed_data.sql

This commit is contained in:
Abhimanyu Saharan
2026-02-02 19:41:26 +05:30
parent 8429c02458
commit aec551d104
3 changed files with 223 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
# DB reset + seed (dev-machine)
This repo uses Alembic migrations as schema source-of-truth.
## Reset to the current seed
```bash
cd backend
./scripts/reset_db.sh
```
Environment variables (optional):
- `DB_NAME` (default `openclaw_agency`)
- `DB_USER` (default `postgres`)
- `DB_HOST` (default `127.0.0.1`)
- `DB_PORT` (default `5432`)
- `DB_PASSWORD` (default `postgres`)
## Updating the seed
The seed is a **data-only** dump (not schema). Regenerate it from the current DB state:
```bash
cd backend
PGPASSWORD=postgres pg_dump \
--data-only \
--column-inserts \
--disable-triggers \
--no-owner \
--no-privileges \
-U postgres -h 127.0.0.1 -d openclaw_agency \
> scripts/seed_data.sql
# IMPORTANT: do not include alembic_version in the seed (migrations already set it)
# (our committed seed already has this removed)
```

26
backend/scripts/reset_db.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -euo pipefail
DB_NAME=${DB_NAME:-openclaw_agency}
DB_USER=${DB_USER:-postgres}
DB_HOST=${DB_HOST:-127.0.0.1}
DB_PORT=${DB_PORT:-5432}
DB_PASSWORD=${DB_PASSWORD:-postgres}
cd "$(dirname "$0")/.."
export PGPASSWORD="$DB_PASSWORD"
# 1) wipe schema
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -v ON_ERROR_STOP=1 \
-c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'
# 2) migrate
. .venv/bin/activate
alembic upgrade head
# 3) seed
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -v ON_ERROR_STOP=1 \
-f scripts/seed_data.sql
echo "Reset complete: $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME"

View File

@@ -0,0 +1,160 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1)
-- Dumped by pg_dump version 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1)
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;
--
-- Data for Name: departments; Type: TABLE DATA; Schema: public; Owner: -
--
SET SESSION AUTHORIZATION DEFAULT;
ALTER TABLE public.departments DISABLE TRIGGER ALL;
ALTER TABLE public.departments ENABLE TRIGGER ALL;
--
-- Data for Name: employees; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.employees DISABLE TRIGGER ALL;
ALTER TABLE public.employees ENABLE TRIGGER ALL;
--
-- Data for Name: activities; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.activities DISABLE TRIGGER ALL;
ALTER TABLE public.activities ENABLE TRIGGER ALL;
--
-- Data for Name: teams; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.teams DISABLE TRIGGER ALL;
ALTER TABLE public.teams ENABLE TRIGGER ALL;
--
-- Data for Name: projects; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.projects DISABLE TRIGGER ALL;
ALTER TABLE public.projects ENABLE TRIGGER ALL;
--
-- Data for Name: project_members; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.project_members DISABLE TRIGGER ALL;
ALTER TABLE public.project_members ENABLE TRIGGER ALL;
--
-- Data for Name: tasks; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.tasks DISABLE TRIGGER ALL;
ALTER TABLE public.tasks ENABLE TRIGGER ALL;
--
-- Data for Name: task_comments; Type: TABLE DATA; Schema: public; Owner: -
--
ALTER TABLE public.task_comments DISABLE TRIGGER ALL;
ALTER TABLE public.task_comments ENABLE TRIGGER ALL;
--
-- Name: activities_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.activities_id_seq', 1, false);
--
-- Name: departments_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.departments_id_seq', 1, false);
--
-- Name: employees_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.employees_id_seq', 1, true);
--
-- Name: project_members_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.project_members_id_seq', 1, false);
--
-- Name: projects_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.projects_id_seq', 1, false);
--
-- Name: task_comments_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.task_comments_id_seq', 1, false);
--
-- Name: tasks_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.tasks_id_seq', 1, false);
--
-- Name: teams_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
--
SELECT pg_catalog.setval('public.teams_id_seq', 1, false);
--
-- PostgreSQL database dump complete
--