如何initdb
使用自定义时区文件夹运行 Postgres?
我尝试使用-L
flag 和PGSHAREDIR
env var 来控制 initdb 在何处搜索 Postgres 共享数据。但是,这些选项似乎无法控制 Postgres 如何找到时区文件夹。
# CUSTOM_PG is a directory containing a complete, extracted
# installation of Postgres.
CUSTOM_PG=/my-custom-pg
PGSHAREDIR="$CUSTOM_PG/share/postgresql" \
DYLD_LIBRARY_PATH="$CUSTOM_PG/lib"
$CUSTOM_PG/bin/initdb \
--pgdata /tmp/my-data \
--username=joe \
--debug \
-L "$CUSTOM_PG/share/postgresql"
完整上下文:我正在使用 Bazel 运行 Postgres,我想使用 Bazel 管理 Postgres 的所有依赖项。来自 Homebrew 的 Postgres 安装在 /opt/homebrew/share/postgresql/timezone (不在 Bazel 的控制范围内)中搜索时区数据,我不知道如何将时区目录覆盖到由 Bazel 管理的目录.
这是上面 initdb 调用的相关日志:
creating directory /tmp/my-data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting default time zone ... America/Los_Angeles
creating configuration files ... ok
running bootstrap script ... 2021-11-23 01:56:52.567
[18352] LOG: could not open directory "/opt/homebrew/share/postgresql/timezone": No such file or directory
INFO pginit/cluster.go:478 [postgres] invalid value for parameter "log_timezone": "UTC"
[18352] LOG: could not open directory "/opt/homebrew/share/postgresql/timezone": No such file or directory
[18352] LOG: invalid value for parameter "TimeZone": "UTC"
[18352] FATAL: configuration file "/var/folders/sb/f9x1r1p13/T/test-cluster-3607517384/postgresql.conf" contains errors
看起来 initdb 在创建默认配置文件后启动了一个 Postgres 进程(PID 为 18352)。启动的过程似乎没有使用 PGSHAREDATA 来定位时区文件夹。
相关资源:
- pgsql-bugs #4344 initdb -L timezone directory:2008 年关于为时区文件夹设置自定义位置的错误。Tom Lane 提到这
-L
可能是错误的方法和可能有效的提示PGSHAREDIR
。Peter Eisentraut 证实,这-L
只是为了遗留原因而存在。这是我上面问过的同一个问题。
您不能在
initdb
. 时区文件的位置被编译到 PostgreSQL 中,只有在配置和构建 PostgreSQL 时才能更改。请参阅文档:
您可以检查您的 PostgreSQL 是如何构建的
如果未使用该选项,PostgreSQL 将使用其自己的时区数据库,位于 中
SHAREDIR
,您可以使用的
-L
选项initdb
指定将在何处initdb
查找postgres.bki
、pg_hba.conf.sample
、pg_ident.conf.sample
、postgresql.conf.sample
、snowball_create.sql
、information_schema.sql
、sql_features.txt
、system_constraints.sql
和。system_functions.sql
system_views.sql
您误读了 pgsql-bugs 线程:在
initdb
. 这也是硬连线。