![PostgreSQL 在安装过程中何时创建新集群?](https://linux22.com/image/1597432/PostgreSQL%20%E5%9C%A8%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B%E4%B8%AD%E4%BD%95%E6%97%B6%E5%88%9B%E5%BB%BA%E6%96%B0%E9%9B%86%E7%BE%A4%EF%BC%9F.png)
我在服务器上安装了 PostgreSQL 9.5。我删除了所有 postgres 包
sudo apt remove '^postgres'
然后我停止了 systemd postgresql 服务,删除了以下目录:
/var/lib/postgresql/
/var/log/postgresql/
/etc/postgresql/
还删除了postgres
用户:
sudo deluser postgres
删除了 systemd 服务(不记得它在哪里了)
之后我尝试安装 PostgreSQL 10,但它没有为版本 10 创建新的集群。
当我尝试从同一源安装 PostgreSQL 10 时(http://apt.postgresql.org/pub/repos/apt/) 在新的服务器上,新的集群就创建了。
据我记得,当我在 PostgreSQL 9.5 旁边安装 PostgreSQL 10(并使用 进行升级pg_upgradecluster
)时,创建了新的集群。
那么,在什么情况下安装 PostgreSQL(特别是版本 10)会包括创建新集群?
答案1
Debian/Ubuntu 软件包有一个postinstall
步骤,基本上是调用configure_version()
(/usr/share/postgresql-common/maintscripts-functions
从postgresql-common
包中)来创建一个新的集群。
此函数所做的测试确定是否应该创建一个新的集群:
if [ ! -d "/etc/postgresql/$VERSION" ] || [ -z "$(ls /etc/postgresql/$VERSION)" ] || \
[ -z "$(ls /etc/postgresql/$VERSION/*/postgresql.conf 2>/dev/null)" ]; then
# skip creating the main cluster when this is not the first install, or
# when explicitly disabled ($create is on/off/"")
create=$(pg_conftool /etc/postgresql-common/createcluster.conf show -bs create_main_cluster || :)
if [ -z "$2" ] && [ "$create" != "off" ]; then
set_system_locale
pg_createcluster -u postgres $VERSION main ||
因此,如果没有预先存在的/etc/postgresql/10
目录,那么不创建集群的下一个原因就是配置/etc/postgresql-common/createcluster.conf
拒绝它。
否则,可能是环境具有无效的区域设置,但会出现有关它的警告输出,例如Perl 的区域设置警告会阻止 Postgres 配置。