chore(开发环境): 本机库改成靠迁移自举,db:migrate 换成线上同一个执行器
compose.dev.yml 不再把 schema dump 挂成 initdb:0000 就是完整的建表迁移, 起完库 bun run db:migrate 从 0000 自举即可。实测两条路子跑出来的结构一致 —— 空库自举 16 条迁移 vs 灌 dump + 打基线 + 跑迁移,pg_dump --schema-only 逐行零差异(1981 行)。docs/specs/schema.sql 与 sample-data.sql 随之删掉, 前者的内容已经在 0000_crazy_gateway.sql 里。 db:migrate 原来是 drizzle-kit migrate,和线上 oj2-api migrate 不是同一个 执行器:drizzle 那个所有迁移共用一个事务、跑不了 CREATE INDEX CONCURRENTLY, 对已打基线的库还会从 0000 撞表回滚且 exit 1 不打印任何错误。现在两边都走 db/migrate.ts。DATABASE_URL 从根目录 .env 读(--env-file),仓库里不留连接串。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
"check:ast": "bun src/scripts/check-ast-targets.ts",
|
"check:ast": "bun src/scripts/check-ast-targets.ts",
|
||||||
"db:pull": "drizzle-kit pull",
|
"db:pull": "drizzle-kit pull",
|
||||||
"db:generate": "drizzle-kit generate",
|
"db:generate": "drizzle-kit generate",
|
||||||
"db:migrate": "drizzle-kit migrate"
|
"db:migrate": "bun --env-file=../../.env src/main.ts migrate"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@node-rs/jieba": "^2.0.2",
|
"@node-rs/jieba": "^2.0.2",
|
||||||
|
|||||||
@@ -1,9 +1,17 @@
|
|||||||
# 本机开发用的依赖服务。判题沙箱单独放,因为它要挂载测试用例目录。
|
# 本机开发用的依赖服务。判题沙箱单独放,因为它要挂载测试用例目录。
|
||||||
#
|
#
|
||||||
# 起: docker compose -f docker/compose.dev.yml up -d
|
# 起: docker compose -f docker/compose.dev.yml up -d (= bun run db:up)
|
||||||
# 停: docker compose -f docker/compose.dev.yml down
|
# 停: docker compose -f docker/compose.dev.yml down
|
||||||
# 清空:docker compose -f docker/compose.dev.yml down -v ← 会删掉库里的数据
|
# 清空:docker compose -f docker/compose.dev.yml down -v ← 会删掉库里的数据
|
||||||
#
|
#
|
||||||
|
# 起完库是空的,结构由迁移自己建:
|
||||||
|
#
|
||||||
|
# bun run db:migrate # 空库从 0000 自举出全部结构
|
||||||
|
# bun run seed:dev # 可选,建两个本机用的账号
|
||||||
|
#
|
||||||
|
# 以前这里挂一份 schema dump 当 initdb,现在不需要了 —— 0000 就是完整的建表迁移,
|
||||||
|
# 而且和「灌 dump + 打基线 + 跑迁移」跑出来的结构实测零差异(见 docs/database.md)。
|
||||||
|
#
|
||||||
# PostgreSQL 固定 16,与生产版本(16.10)一致 —— 别图新换 17/18,
|
# PostgreSQL 固定 16,与生产版本(16.10)一致 —— 别图新换 17/18,
|
||||||
# 开发环境用了生产不支持的特性,要到切换那天才炸。
|
# 开发环境用了生产不支持的特性,要到切换那天才炸。
|
||||||
#
|
#
|
||||||
@@ -30,8 +38,6 @@ services:
|
|||||||
- "5433:5432" # 5433 避开可能存在的本机 5432
|
- "5433:5432" # 5433 避开可能存在的本机 5432
|
||||||
volumes:
|
volumes:
|
||||||
- oj2-pgdata:/var/lib/postgresql/data
|
- oj2-pgdata:/var/lib/postgresql/data
|
||||||
# 首次启动时自动灌入生产库结构(仅结构,无数据)
|
|
||||||
- ../docs/specs/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql:ro
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U onlinejudge -d onlinejudge"]
|
test: ["CMD-SHELL", "pg_isready -U onlinejudge -d onlinejudge"]
|
||||||
interval: 5s
|
interval: 5s
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
-- 阶段 1 本地题目样本导入脚本。
|
|
||||||
--
|
|
||||||
-- /tmp/problems.csv 从生产库 problem 表导出,只取 contest_id IS NULL、按 id
|
|
||||||
-- 排序的前 20 道题,避免为本地列表验收额外复制比赛数据。
|
|
||||||
-- /tmp/tags.csv 从生产库 problem_tag 表导出。两份 CSV 均不包含用户表数据,
|
|
||||||
-- 仅保留在本机并由 .gitignore 排除;devadmin 只是满足外键的本地占位用户。
|
|
||||||
|
|
||||||
\set ON_ERROR_STOP on
|
|
||||||
|
|
||||||
BEGIN;
|
|
||||||
|
|
||||||
INSERT INTO "user" (id, password, username, admin_type, problem_permission, open_api, is_disabled, session_keys, raw_password)
|
|
||||||
VALUES (1, 'unusable', 'devadmin', 'Super Admin', 'All', false, false, '[]'::jsonb, 'devonly')
|
|
||||||
ON CONFLICT (id) DO NOTHING;
|
|
||||||
|
|
||||||
\copy problem_tag FROM '/tmp/tags.csv' WITH CSV HEADER
|
|
||||||
\copy problem FROM '/tmp/problems.csv' WITH CSV HEADER
|
|
||||||
|
|
||||||
COMMIT;
|
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user