
这取决于 PostgreSQL 是否挂载了 Docker Volume 或宿主机目录。情况一使用了 Docker named volume例如docker-compose.yml中有services:postgres:image:postgresvolumes:-postgres_data:/var/lib/postgresql/datavolumes:postgres_data:这种情况下直接修改数据库通常会保存。下面这些操作不会删除数据dockercompose stopdockercompose startdockercompose downdockercompose up-ddockercompose up-d--build但是下面这个命令会删除 Volume 中的数据dockercompose down-v所以不要随便执行down -v除非你明确想清空数据库。情况二使用宿主机目录挂载例如volumes:-./postgres-data:/var/lib/postgresql/data数据会保存到项目目录中的postgres-data只要不删除这个目录重新启动容器通常也不会丢失。情况三没有挂载 Volume如果 PostgreSQL 没有类似下面的配置volumes:-postgres_data:/var/lib/postgresql/data或者volumes:-./postgres-data:/var/lib/postgresql/data那么数据库数据可能只存在于容器自身的可写层中。这种情况下仅停止、启动同一个容器通常还在删除容器后重新创建可能丢失重新部署创建新容器可能丢失因此生产环境一定要给 PostgreSQL 配置持久化存储。部署到线上后是否会保存要分两种情况。部署到同一个线上数据库如果线上使用的是同一个 PostgreSQL 实例并且你执行了这段 SQL那么表结构会保留数据也会保留。部署到全新的线上数据库如果线上是新服务器、新容器或新 Volume那么不会自动拥有这张表除非你把这段 SQL 加入项目的数据库初始化脚本或者使用数据库迁移工具执行或者手动在新数据库执行一次建议把它保存为项目中的迁移脚本例如db/migration/V2__create_deleted_docs_history.sql如果暂时没有 Flyway 或 Liquibase也可以把它加入 PostgreSQL 的初始化 SQL。但要注意/docker-entrypoint-initdb.d/下面的 SQL 通常只会在 PostgreSQL 第一次初始化、数据目录为空时执行数据库已经存在后容器每次重启不会重复执行这些脚本。建议你先检查 Docker Volume可以先查看当前容器dockerps然后检查 PostgreSQL 容器挂载情况dockerinspectpostgres容器名重点查看Mounts部分确认是否存在/var/lib/postgresql/data如果对应的是 named volume 或宿主机目录就说明数据具备持久化条件。最终建议是继续使用 PostgreSQL新增deleted_docs_history把 SQL 放入项目版本管理不要使用docker compose down -v线上部署时使用数据库迁移脚本后续把历史页面从localStorage改为请求 PostgreSQL 后端接口