【问题标题】:Postgresql 9.6 InitDB FailsPostgresql 9.6 InitDB 失败
【发布时间】:2018-04-04 10:49:10
【问题描述】:

每当我尝试运行下面的命令时,它总是在 RHEL7 上失败。我在另一个类似的操作系统(较新)上尝试过,但它不这样做,只是工作。

我查看了目录的权限,禁用了 selinux(以防万一)并查看了语言环境,但是这些设置与我的其他服务器的设置相匹配。

/usr/pgsql-9.6/bin/postgresql96-setup initdb

日志输出:

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/pgsql/9.6/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 64MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... < 2017-10-23 20:13:54.035 BST > LOG:  invalid value for parameter "lc_messages": "en_US.UTF-8"
< 2017-10-23 20:13:54.035 BST > LOG:  invalid value for parameter "lc_monetary": "en_US.UTF-8"
< 2017-10-23 20:13:54.035 BST > LOG:  invalid value for parameter "lc_numeric": "en_US.UTF-8"
< 2017-10-23 20:13:54.035 BST > LOG:  invalid value for parameter "lc_time": "en_US.UTF-8"
< 2017-10-23 20:13:54.035 BST > FATAL:  configuration file "/var/lib/pgsql/9.6/data/postgresql.conf" contains errors
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/pgsql/9.6/data"

【问题讨论】:

  • 可以在 /usr/lib/locale' 目录下创建符号链接(或复制);或者可以使用initdb --locale=LOCALE 覆盖您的区域设置。您也可以使用--no-locale--locale=C 使系统不做任何假设。

标签: postgresql rhel rhel7 postgresql-9.6


【解决方案1】:

我遇到了这个问题,它似乎是由于缺少语言环境造成的。我的 Postgres 配置文件使用的是en_GB.utf8

通过安装语言环境修复:

localedef -i en_GB -c -f UTF-8 -A /usr/share/locale/locale.alias en_GB.UTF-8

并将LANG 环境变量设置为en_GB.utf8


我在Postgres Docker image docs(“区域设置自定义”部分)中找到了修复程序。

【讨论】:

    【解决方案2】:

    通过 windows 10 安装程序运行并选择美国英语作为我的语言环境时,我看到参数是 English_United States.1252,即:

    lc_messages = 'English_United States.1252'
    lc_monetary = 'English_United States.1252'
    lc_numeric = 'English_United States.1252'
    lc_time = 'English_United States.1252'
    

    对我来说,我的 initdb 也失败了,因为我选择了 default 语言环境选项,它只是一个空字符串。但是,在选择此选项时,DB已启动。我不知道这是否解决了您的特定问题,但也许它可以帮助其他人!

    【讨论】:

      【解决方案3】:

      系统似乎无法将en_US.UTF-8 语言环境识别为有效。

      您是否采取了任何措施来最小化已安装的语言环境集? /usr/lib/locale/locale-archive 文件的大小是多少?它应该在 100 MiB 左右。您也可以将其与全新安装进行比较,以确保确定(rpm -V 不适用于此文件)。

      【讨论】:

      • 目录是102M,我也试过用en_GB.UTF-8用initdb命令不带setup命令。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多