我正在使用存储在 postgres 数据库中的数据运行自动化集成测试。我需要使用相同的数据库内容开始每个测试运行。我不想总是清除数据库并导入转储,而是想将数据库复制到 /tmp 并从那里运行它。如果它有效,它会更容易和更快。这就是我所做的:
mkdir -p /tmp/postgres/data
chown -R postgres:postgres /tmp/postgres
rsync -vacHAX /var/lib/postgres/data/ /tmp/postgres/data/
并将postgresql.service
文件调整到新位置(包括systemctl daemon-reload
)。
但是,如果我尝试使用此设置启动 postgres,它会失败并systemctl status postgresql.service
说
“/tmp/postgres/data”丢失或为空。
这不是真的。
我仔细检查了 postgres 用户是否拥有并有权访问 /tmp/pgsql/data/。/tmp 上的可用空间也足够(超过数据库大小的 2 倍)。
我尝试了不同的位置并且它有效。所以我对postgresql.service
文件的更改足以使用非默认位置。它只在 /tmp 上失败。
我错过了什么?
/tmp
出于安全原因,systemd 服务可以有一个私有目录。来自systemd 文档:当您说
/tmp/postgres/data
空或不存在不是真的时,那是从您的 shell 的角度来看,而不是从 postgres 服务的角度来看 ifPrivateTmp=true
。