【Docker】PostgreSQL 容器化部署

PostgreSQL标准软件基于Bitnami PostgreSQL 构建。当前版本为16.1.0

你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取
配置文件地址: https://gitee.com/qingplus/qingcloud-platform

qinghub自动安装部署配置库

连接到其他容器

使用Docker 容器网络,应用程序容器可以轻松访问容器内运行的 PostgreSQL 服务器。

连接到同一网络的容器可以使用容器名称作为主机名来相互通信。

使用命令行

在此示例中,我们将创建一个 PostgreSQL 客户端实例,该实例将连接到与客户端在同一 docker 网络上运行的服务器实例。

第 1 步:创建网络
docker network create app-tier --driver bridge
步骤 2:启动 PostgreSQL 服务器实例

使用命令–network app-tier的参数docker run将 PostgreSQL 容器连接到网络app-tier。

docker run -d --name postgresql-server \--network app-tier \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
第 3 步:启动 PostgreSQL 客户端实例

最后,我们创建一个新的容器实例来启动 PostgreSQL 客户端并连接到上一步中创建的服务器:

docker run -it --rm \--network app-tier \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest psql -h postgresql-server -U postgres

使用 Docker Compose 文件

如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将显式定义一个bridge名为 的新网络app-tier。在此示例中,我们假设您希望从您自己的自定义应用程序映像连接到 PostgreSQL 服务器,该映像在以下代码片段中通过服务名称进行标识myapp。

version: '2'networks:app-tier:driver: bridgeservices:postgresql:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'networks:- app-tiermyapp:image: 'YOUR_APPLICATION_IMAGE'networks:- app-tier

重要

替换YOUR_APPLICATION_IMAGE占位符
在您的应用程序容器中,使用主机名postgresql连接到 PostgreSQL 服务器
启动容器:

docker-compose up -d

配置

容器启动时

当容器执行时,初始化或启动postgresql之前,它会执行位于/docker-entrypoint-preinitdb.d的扩展名为.sh的文件。

为了将自定义文件放入 docker 映像中,您可以将它们安装为卷。

将额外的命令行标志传递给 PostgreSQL

可以通过以下环境变量将额外的命令行标志传递给 postgresql 服务命令:

  • POSTGRESQL_EXTRA_FLAGS:要附加到postgres启动命令的标志。无默认值

初始化一个新实例

当容器第一次执行时,它将执行扩展名为.sh, .sql.sql.gz的文件,位于/docker-entrypoint-initdb.d目录下.

为了将自定义文件放入 docker 映像中,您可以将它们安装为卷。

首次运行时设置 root 密码

在上面的命令中您可能已经注意到环境变量的使用POSTGRESQL_PASSWORD。首次运行映像时传递环境变量POSTGRESQL_PASSWORD会将postgres用户的密码设置为POSTGRESQL_PASSWORD的值(或POSTGRESQL_PASSWORD_FILE变量中指定的文件的内容)。

docker run --name postgresql -e POSTGRESQL_PASSWORD=password123 registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

services:postgresql:...environment:- POSTGRESQL_PASSWORD=password123...

注意! 该postgres用户是超级用户,拥有 PostgreSQL 数据库的完全管理访问权限。

首次运行时创建数据库

POSTGRESQL_DATABASE通过在第一次运行镜像时传递环境变量,将创建一个数据库。如果您的应用程序要求数据库已存在,这非常有用,使您不必使用 PostgreSQL 客户端手动创建数据库。

docker run --name postgresql -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

services:postgresql:...environment:- POSTGRESQL_DATABASE=my_database...

首次运行时创建数据库用户

您还可以创建一个受限数据库用户,该用户仅具有使用环境变量创建的数据库的权限POSTGRESQL_DATABASE。为此,请提供POSTGRESQL_USERNAME环境变量。

docker run --name postgresql -e POSTGRESQL_USERNAME=my_user -e POSTGRESQL_PASSWORD=password123 -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

services:postgresql:...environment:- POSTGRESQL_USERNAME=my_user- POSTGRESQL_PASSWORD=password123- POSTGRESQL_DATABASE=my_database...

注意!POSTGRESQL_USERNAME指定后,postgres user不会分配密码,因此您无法以该postgres用户身份远程登录 PostgreSQL 服务器。如果您仍想使用用户postgres进行访问,请设置POSTGRESQL_POSTGRES_PASSWORD环境变量(或POSTGRESQL_POSTGRES_PASSWORD_FILE指定文件中内容)。

审计

PostgreSQL image默认启用 pgAudit 模块。因此,可以使用以下环境变量在容器中启用审核信息:

  • POSTGRESQL_PGAUDIT_LOG:以逗号分隔的列表,其中包含要审核的不同操作。没有默认值。
  • POSTGRESQL_PGAUDIT_LOG_CATALOG:在语句中的所有关系都在 pg_catalog 中的情况下启用会话日志记录。没有默认值。
  • POSTGRESQL_LOG_CONNECTIONS:添加登录日志条目。没有默认值。
  • POSTGRESQL_LOG_DISCONNECTIONS:添加注销日志条目。没有默认值。
  • POSTGRESQL_LOG_HOSTNAME:记录客户端主机名。没有默认值。
  • POSTGRESQL_LOG_LINE_PREFIX:定义日志条目行的格式。在PostgreSQL 官方文档中查找字符串参数。没有默认值。
  • POSTGRESQL_LOG_TIMEZONE:设置日志条目时间戳的时区。没有默认值。

会话设置

PostgreSQL 映像允许配置多个连接和会话管理参数:

  • POSTGRESQL_USERNAME_CONNECTION_LIMIT:如果创建了不同的用户postgres,请设置连接限制。没有默认值。
  • POSTGRESQL_POSTGRES_CONNECTION_LIMIT:设置用户的连接限制postgres。没有默认值。
  • POSTGRESQL_STATEMENT_TIMEOUT:设置语句超时时间。没有默认值。
  • POSTGRESQL_TCP_KEEPALIVES_INTERVAL:TCP 保活间隔。没有默认值。
  • POSTGRESQL_TCP_KEEPALIVES_IDLE:TCP keepalive 空闲时间。没有默认值。
  • POSTGRESQL_TCP_KEEPALIVES_COUNT:TCP 保活计数。没有默认值。

配置时区

PostgreSQL 映像允许使用以下环境变量配置 PostgreSQL 的时区:

  • POSTGRESQL_TIMEZONE:设置显示和解释时间戳的时区。
  • POSTGRESQL_LOG_TIMEZONE:设置写入服务器日志的时间戳所使用的时区。

修改pg_hba.conf

默认情况下,PostgreSQL image会生成local、md5 在pg_hba.conf文件。为了适应任何其他要求或标准,可以通过以下方式更改 pg_hba.conf 文件:

  • 挂载你自己的pg_hba.conf 到文件/bitnami/postgresql/conf
  • POSTGRESQL_PGHBA_REMOVE_FILTERS将与以逗号分隔的模式列表一起使用。所有与任何模式匹配的行都将被删除。例如,如果我们想要删除所有local和md5验证(例如,仅支持hostssl连接),请设置POSTGRESQL_PGHBA_REMOVE_FILTERS=local, md5.

预加载共享库

可以通过设置 .postgresql 文件来修改 PostgreSQL 在启动时预加载的库列表POSTGRESQL_SHARED_PRELOAD_LIBRARIES。默认值为POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit。例如,如果您想将pg_stat_statements库添加到预加载中,请设置POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit, pg_stat_statements。

设置流式复制

可以使用以下环境变量设置流复制集群:

  • POSTGRESQL_REPLICATION_MODE:复制模式。可能的值master/ slave。没有默认值。
  • POSTGRESQL_REPLICATION_USER:首次运行时在主服务器上创建的复制用户。没有默认值。
  • POSTGRESQL_REPLICATION_PASSWORD:复制用户密码。没有默认值。
  • POSTGRESQL_REPLICATION_PASSWORD_FILE:包含复制用户密码的文件的路径。这将覆盖 中指定的值POSTGRESQL_REPLICATION_PASSWORD。没有默认值。
  • POSTGRESQL_MASTER_HOST:复制主机的主机名/IP(从机参数)。没有默认值。
  • POSTGRESQL_MASTER_PORT_NUMBER:复制主机的服务器端口(从机参数)。默认为5432.
    在复制集群中,您可以拥有一个主服务器和零个或多个从服务器。启用复制后,主节点处于读写模式,而从节点处于只读模式。为了获得最佳性能,建议限制对从属设备的读取。
第 1 步:创建复制主服务器

第一步是启动master。

docker run --name postgresql-master \-e POSTGRESQL_REPLICATION_MODE=master \-e POSTGRESQL_USERNAME=my_user \-e POSTGRESQL_PASSWORD=password123 \-e POSTGRESQL_DATABASE=my_database \-e POSTGRESQL_REPLICATION_USER=my_repl_user \-e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

在此命令中,我们使用参数将容器配置为主容器POSTGRESQL_REPLICATION_MODE=master。POSTGRESQL_REPLICATION_USER使用和参数指定复制用户POSTGRESQL_REPLICATION_PASSWORD。

第2步:创建复制从站

接下来我们启动一个复制从属容器。

docker run --name postgresql-slave \--link postgresql-master:master \-e POSTGRESQL_REPLICATION_MODE=slave \-e POSTGRESQL_MASTER_HOST=master \-e POSTGRESQL_MASTER_PORT_NUMBER=5432 \-e POSTGRESQL_REPLICATION_USER=my_repl_user \-e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

在上面的命令中,容器被配置为slave使用POSTGRESQL_REPLICATION_MODE参数。在复制从属启动之前,从属容器使用POSTGRESQL_MASTER_HOST和POSTGRESQL_MASTER_PORT_NUMBER参数连接到主服务器并从主服务器复制初始数据库。POSTGRESQL_REPLICATION_PASSWORD和POSTGRESQL_REPLICATION_USER用于向主服务器进行身份验证。为了更改pg_hba.conf默认设置,从站需要知道是否POSTGRESQL_PASSWORD已设置。

通过这两个命令,您现在已经启动并运行了一个两节点 PostgreSQL 主从流复制集群。您可以通过添加/删除从属服务器来扩展集群,而不会导致任何停机。

注意:集群会完整复制主节点,其中包括所有用户和数据库。

如果主服务器出现故障,您可以重新配置从服务器以充当主服务器,并通过创建触发器文件开始接受写入/tmp/postgresql.trigger.5432。例如,以下命令重新配置postgresql-slave为充当主服务器:

docker exec postgresql-slave touch /tmp/postgresql.trigger.5432

注意:集群中其他从站的配置需要更新,以便它们知道新的主站。–link postgresql-slave:master这将要求您按照我们的示例重新启动其他从站。

通过 Docker Compose,可以使用以下命令设置主从复制:

version: '2'services:postgresql-master:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'ports:- '5432'volumes:- 'postgresql_master_data:/bitnami/postgresql'environment:- POSTGRESQL_REPLICATION_MODE=master- POSTGRESQL_REPLICATION_USER=repl_user- POSTGRESQL_REPLICATION_PASSWORD=repl_password- POSTGRESQL_USERNAME=my_user- POSTGRESQL_PASSWORD=my_password- POSTGRESQL_DATABASE=my_databasepostgresql-slave:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'ports:- '5432'depends_on:- postgresql-masterenvironment:- POSTGRESQL_REPLICATION_MODE=slave- POSTGRESQL_REPLICATION_USER=repl_user- POSTGRESQL_REPLICATION_PASSWORD=repl_password- POSTGRESQL_MASTER_HOST=postgresql-master- POSTGRESQL_PASSWORD=my_password- POSTGRESQL_MASTER_PORT_NUMBER=5432volumes:postgresql_master_data:

使用以下方法扩展从站数量:

docker-compose up --detach --scale postgresql-master=1 --scale postgresql-slave=3

上面的命令将 Slave 的数量增加到3。您可以用同样的方法缩小规模。

注意:您不应增加/减少主节点的数量。始终只有一个主节点运行。

同步提交

默认情况下,从属实例配置为异步复制。为了保证更多的数据稳定性(以一些性能为代价),可以使用以下环境设置同步提交(即事务提交在被写入一组副本之前不会向客户端返回成功)变量。

  • POSTGRESQL_SYNCHRONOUS_COMMIT_MODE:建立同步提交的类型。可用选项有:on, remote_apply, remote_write, local and off。默认值为on。
  • POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS:建立将启用同步复制的副本数量。该数量不得超过您在集群中配置的从站数量。
    使用 Docker Compose,可以按如下方式设置具有同步提交的主从复制:
version: '2'services:postgresql-master:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'ports:- '5432'volumes:- 'postgresql_master_data:/bitnami/postgresql'environment:- POSTGRESQL_REPLICATION_MODE=master- POSTGRESQL_REPLICATION_USER=repl_user- POSTGRESQL_REPLICATION_PASSWORD=repl_password- POSTGRESQL_USERNAME=my_user- POSTGRESQL_PASSWORD=my_password- POSTGRESQL_DATABASE=my_database- POSTGRESQL_SYNCHRONOUS_COMMIT_MODE=on- POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1volumes:- '/path/to/postgresql-persistence:/bitnami/postgresql'postgresql-slave:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'ports:- '5432'depends_on:- postgresql-masterenvironment:- POSTGRESQL_REPLICATION_MODE=slave- POSTGRESQL_REPLICATION_USER=repl_user- POSTGRESQL_REPLICATION_PASSWORD=repl_password- POSTGRESQL_MASTER_HOST=postgresql-master- POSTGRESQL_MASTER_PORT_NUMBER=5432postgresql-slave2:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'ports:- '5432'depends_on:- postgresql-masterenvironment:- POSTGRESQL_REPLICATION_MODE=slave- POSTGRESQL_REPLICATION_USER=repl_user- POSTGRESQL_REPLICATION_PASSWORD=repl_password- POSTGRESQL_MASTER_HOST=postgresql-master- POSTGRESQL_MASTER_PORT_NUMBER=5432

在上面的示例中,提交需要写入主服务器和从服务器之一才能被接受。另一个从站将继续使用异步复制。使用以下 SQL 查询检查它:

postgres=# select application_name as server, state,
postgres-#       sync_priority as priority, sync_state
postgres-#       from pg_stat_replication;
| server      | state     | priority | sync_state |
|-------------|-----------|----------|------------|
| walreceiver | streaming | 0        | sync       |
| walreceiver | streaming | 0        | async      |

注意:对于更高级的设置,您可以application_name通过设置POSTGRESQL_CLUSTER_APP_NAME环境变量来使用参数定义不同的复制组。

LDAP认证

为了使用 LDAP 身份验证,您需要将环境变量设置POSTGRESQL_ENABLE_LDAP为yes来启用它。

有两种设置 LDAP 配置的方法:

  • 通过配置POSTGRESQL_LDAP_URL,您可以在其中配置URL中的所有关联参数。

  • 独立设置参数POSTGRESQL_LDAP_xxxx。
    LDAP相关参数有:

  • POSTGRESQL_LDAP_SERVER:要连接的 LDAP 服务器的 IP 地址或名称。用空格分隔。

  • POSTGRESQL_LDAP_PORT:LDAP 服务器上要连接的端口号

  • POSTGRESQL_LDAP_SCHEME:设置为ldaps使用 LDAPS。默认为无。

  • POSTGRESQL_LDAP_TLS:设置为1使用 TLS 加密。默认为无。

  • POSTGRESQL_LDAP_PREFIX:形成要绑定的 DN 时要添加到用户名前面的字符串。默认为无。

  • POSTGRESQL_LDAP_SUFFIX:形成要绑定的 DN 时附加到用户名的字符串。默认为无。

  • POSTGRESQL_LDAP_BASE_DN:开始搜索用户的根 DN。默认为无。

  • POSTGRESQL_LDAP_BIND_DN:要绑定到 LDAP 的用户的 DN。默认为无。

  • POSTGRESQL_LDAP_BIND_PASSWORD:绑定LDAP的用户密码。默认为无。

  • POSTGRESQL_LDAP_SEARCH_ATTR:与搜索中的用户名匹配的属性。默认为无。

  • POSTGRESQL_LDAP_SEARCH_FILTER:进行搜索+绑定身份验证时使用的搜索过滤器。默认为无。

  • POSTGRESQL_LDAP_URL:要连接的 URL,格式为:ldap[s]😕/host[:port]/basedn[?[attribute][?[scope][?[filter]]]]。

保护 PostgreSQL 流量

PostgreSQL 支持使用 SSL/TLS 协议对连接进行加密。如果您希望启用此可选功能,您可以使用以下环境变量来配置应用程序:

  • POSTGRESQL_ENABLE_TLS:是否对流量启用 TLS。默认为no.
  • POSTGRESQL_TLS_CERT_FILE:包含 TLS 流量证书文件的文件。没有默认值。
  • POSTGRESQL_TLS_KEY_FILE:包含证书密钥的文件。没有默认值。
  • POSTGRESQL_TLS_CA_FILE:包含证书 CA 的文件。如果提供,PostgreSQL 将通过请求证书来验证 TLS/SSL 客户端(请参阅ref)。没有默认值。
  • POSTGRESQL_TLS_CRL_FILE:包含证书吊销列表的文件。没有默认值。
  • POSTGRESQL_TLS_PREFER_SERVER_CIPHERS:是否使用服务器的 TLS 密码首选项而不是客户端的。默认为yes.
    启用 TLS 时,PostgreSQL 默认情况下将支持标准流量和加密流量,但更喜欢后者。下面是一些有关如何快速设置 TLS 流量的示例:

使用docker run

```console
$ docker run \-v /path/to/certs:/opt/bitnami/postgresql/certs \-e ALLOW_EMPTY_PASSWORD=yes \-e POSTGRESQL_ENABLE_TLS=yes \-e POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt \-e POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
```

修改docker-compose.yml文件:

```yaml
services:postgresql:...environment:...- POSTGRESQL_ENABLE_TLS=yes- POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt- POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key...volumes:...- /path/to/certs:/opt/bitnami/postgresql/certs...
```

或者,您也可以在自定义配置文件中提供此配置。

配置文件

该图像在 中查找postgresql.conf文件/opt/bitnami/postgresql/conf/。您可以在以下位置安装卷/bitnami/postgresql/conf/并复制/编辑. 如果该目录为空,则默认配置将被填充到该目录中。postgresql.conf/path/to/postgresql-persistence/conf/conf/

/path/to/postgresql-persistence/conf/
└── postgresql.conf0 directories, 1 file

由于 PostgreSQL 映像是非 root 的,因此您需要为主机中的挂载目录设置适当的权限:

sudo chown 1001:1001 /path/to/postgresql-persistence/conf/
第 1 步:运行 PostgreSQL 映像

运行 PostgreSQL 映像,从主机安装目录。

docker run --name postgresql \-v /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/ \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或使用 Docker Compose:

version: '2'services:postgresql:image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'ports:- '5432:5432'volumes:- /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/
第 2 步:编辑配置

使用您喜欢的编辑器编辑主机上的配置。

vi /path/to/postgresql-persistence/conf/postgresql.conf
第三步:重启PostgreSQL

更改配置后,重新启动 PostgreSQL 容器以使更改生效。

docker restart postgresql

或使用 Docker Compose:

docker-compose restart postgresql

有关配置选项的完整列表,请参阅服务器配置手册。

允许从默认文件以外的文件加载设置postgresql.conf

除了使用自定义之外postgresql.conf,您还可以包含.conf以conf.d目录结尾的文件/bitnami/postgresql/conf/。为此,默认postgresql.conf包含以下部分:

##------------------------------------------------------------------------------
## CONFIG FILE INCLUDES
##------------------------------------------------------------------------------## These options allow settings to be loaded from files other than the
## default postgresql.conf.include_dir = 'conf.d'  # Include files ending in '.conf' from directory 'conf.d'

在您的主机中,您应该在目录下创建扩展配置文件conf.d:

mkdir -p /path/to/postgresql-persistence/conf/conf.d/
vi /path/to/postgresql-persistence/conf/conf.d/extended.conf

如果您使用自定义的postgresql.conf,您应该在配置文件中创建(或取消注释)上述部分,在这种情况下,/path/to/postgresql-persistence/conf/结构应该类似于

/path/to/postgresql-persistence/conf/
├── conf.d
│   └── extended.conf
└── postgresql.conf1 directory, 2 files

指定 initdb 参数

使用以下环境变量可以轻松指定额外的 initdb 参数:

  • POSTGRESQL_INITDB_ARGS:指定 initdb 命令的额外参数。没有默认值。
  • POSTGRESQL_INITDB_WAL_DIR:定义事务日志的自定义位置。没有默认值。
docker run --name postgresql \-e POSTGRESQL_INITDB_ARGS="--data-checksums" \-e POSTGRESQL_INITDB_WAL_DIR="/bitnami/waldir" \registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通过修改docker-compose.yml文件:

services:postgresql:...environment:- POSTGRESQL_INITDB_ARGS=--data-checksums- POSTGRESQL_INITDB_WAL_DIR=/bitnami/waldir...

停止设置

您可以使用以下命令控制初始化过程中用于停止 postgresql 的参数:

  • POSTGRESQL_PGCTLTIMEOUT这将设置命令的超时pg_ctl。
  • POSTGRESQL_SHUTDOWN_MODE这将指示所使用的关闭模式。

安装额外的语言环境

Dockerfile 提供了两个参数来在构建时配置额外的区域设置:

  • WITH_ALL_LOCALES:启用所有支持的区域设置。默认值:否
  • EXTRA_LOCALES:要启用的额外区域设置的逗号分隔列表。无默认值
    例如,要构建支持区域设置的映像es_ES.UTF-8 UTF-8,您可以将以下参数添加到构建命令中:
docker build --build-arg EXTRA_LOCALES="es_ES.UTF-8 UTF-8" ...

环境变量别名

容器允许两组不同的环境变量。请参阅下表中的环境变量别名列表:

环境变量别名
POSTGRESQL_USERNAMEPOSTGRES_USER
POSTGRESQL_DATABASEPOSTGRES_DB
POSTGRESQL_PASSWORDPOSTGRES_PASSWORD
POSTGRESQL_PASSWORD_FILEPOSTGRES_PASSWORD_FILE
POSTGRESQL_POSTGRES_PASSWORDPOSTGRES_POSTGRES_PASSWORD
POSTGRESQL_POSTGRES_PASSWORD_FILEPOSTGRES_POSTGRES_PASSWORD_FILE
POSTGRESQL_PORT_NUMBERPOSTGRES_PORT_NUMBER
POSTGRESQL_INITDB_ARGSPOSTGRES_INITDB_ARGS
POSTGRESQL_INITDB_WAL_DIRPOSTGRES_INITDB_WAL_DIR
POSTGRESQL_DATA_DIRPGDATA
POSTGRESQL_REPLICATION_USERPOSTGRES_REPLICATION_USER
POSTGRESQL_REPLICATION_MODEPOSTGRES_REPLICATION_MODE
POSTGRESQL_REPLICATION_PASSWORDPOSTGRES_REPLICATION_PASSWORD
POSTGRESQL_REPLICATION_PASSWORD_FILEPOSTGRES_REPLICATION_PASSWORD_FILE
POSTGRESQL_CLUSTER_APP_NAMEPOSTGRES_CLUSTER_APP_NAME
POSTGRESQL_MASTER_HOSTPOSTGRES_MASTER_HOST
POSTGRESQL_MASTER_PORT_NUMBERPOSTGRES_MASTER_PORT_NUMBER
POSTGRESQL_NUM_SYNCHRONOUS_REPLICASPOSTGRES_NUM_SYNCHRONOUS_REPLICAS
POSTGRESQL_SYNCHRONOUS_COMMIT_MODEPOSTGRES_SYNCHRONOUS_COMMIT_MODE
POSTGRESQL_SHUTDOWN_MODEPOSTGRES_SHUTDOWN_MODE

重要信息:更改POSTGRES_USER不会更改数据库的所有者,数据库的所有者将继续作为用户postgres。要更改数据库所有者,请使用postgres用户 ( $ psql -U postgres …) 访问并执行以下命令:

alter database POSTGRES_DATABASE owner to POSTGRES_USER;

可以更改 PostgreSQL 用于执行 init 脚本的用户。为此,请使用以下环境变量:

环境变量描述
POSTGRESQL_INITSCRIPTS_USERNAME将用于执行初始化脚本的用户
POSTGRESQL_INITSCRIPTS_PASSWORDPOSTGRESQL_INITSCRIPT_USERNAME 中指定的用户的密码

默认 toast 压缩

默认的 toast 压缩是pglz,但您可以通过将环境变量设置POSTGRES_DEFAULT_COMPRESSION为所需的值来修改它。例如:POSTGRES_DEFAULT_COMPRESSION=‘lz4’。

日志

docker logs postgresql

或使用 Docker Compose:

docker-compose logs postgresql

你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取

开源地址: https://gitee.com/qingplus/qingcloud-platform

QingHub PostgreSQL部署手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边框检测在 Python 中的应用

在游戏开发中,我们经常会回使用到边框检测。我们知道,边框检测是计算机视觉中常用的技术,用于检测图像中的边界和轮廓。在Python中,可以使用OpenCV库来实现边框检测。具体是怎么实现的?以下是一个简单的示例代码&#…

深入探索Java中的MarkWord与锁优化机制——无锁、偏向锁、自旋锁、重量级锁

引言 在Java并发编程领域,有效管理对共享资源的访问显得尤为关键。为了保障线程安全,Java虚拟机(JVM)引入了一系列精妙的锁机制,这其中的核心概念就是Java对象头中的MarkWord。本文将详尽解析MarkWord的作用&#xff…

Vue.js+SpringBoot开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

国家网安教育技术产业融合发展试验区建设专家指导组莅临麒麟信安调研

3月12日下午,由教育部网络安全教学指导委员会秘书长(专家组组长)封化民、工业和信息化部规划司原司长肖华、中国现代国际关系研究院原副院长张力等领导组成的国家网安教育技术产业融合发展试验区建设专家指导组莅临麒麟信安及湖南欧拉生态创新…

【Python】成功解决NameError: name ‘cv2‘ is not defined

【Python】成功解决NameError: name ‘cv2’ is not defined 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

Quartz项目实际使用

目录 Quartz概念1.任务 Job2.触发器 Trigger 3.调度器 Scheduler实操总结 Quartz quartz 是一款开源且丰富特性的任务调度库,能够集成与任何的java 应用,下到独立应用,大到电子商业系统。quartz就是基于java实现的任务调度框架,用…

mac nginx安装、启动、简单命令

一. brew 安装 打开mac终端,输入以下命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"安装完成,路径信息: 安装路径:/usr/local/Cellar/nginx/1.17.0 配置文件路径&…

mavon-editor实现支持md格式输入并自定义工具栏

需求说明 起源于我在做机器人报警推送的一个模块时,涉及到可以自定义报警的内容,其中内容支持md格式,同时还支持用户在指定光标处插入指定的字符串占位符。于是我在项目中引入mavon-editor库(支持Vue2、Vue3),以支持用户输入md格…

python 写入文件的中文乱码了怎么处理

如果在写入JSON文件时遇到中文乱码问题,你可以在使用json.dump()函数时设置ensure_ascii参数为False,以保留非ASCII字符的原始形式。这样可以确保中文字符正确地写入JSON文件。 以下是一个示例: import jsondata {"name": "…

Maven深入了解

Maven深入了解 前言一、Maven的核心概念1.1 Maven-Jar包模块化管理1.2 POM1.3 坐标及其命名规范1.4 仓库的概念1.5 生命周期1.6 插件和目标 二、依赖管理2.1 自己写的模块和模块之间也可以互相依赖2.2 依赖的生效范围(scope标签)2.3 依赖的传递性2.4 依赖冲突问题2.5 依赖的排除…

IBatis与MyBatis区别

在sqlMap里面&#xff0c;iBatis的传入参数是parameterClass&#xff0c;而MyBatis是可以不写的&#xff0c;也可以用parameterType&#xff0c;iBatis的传出参数是resultClass。 iBatis&#xff1a; <select id"selectDeviceByWhere" parameterClass"Map&q…

Linux——多线程

目录 线程概念 线程控制 线程创建 进程 vs 线程 线程异常 线程等待 线程终止 pthread_cancel 进程替换 线程分离 线程互斥 mutex mutex接口 mutex的理解 互斥锁的实现 可重入和线程安全 死锁 什么是死锁 死锁产生的必要条件 避免死锁 线程同步 概念 条件…

ARM 汇编指令:(六) B 跳转指令

目录 一.B 和 BL 1.B/BL指令的语法格式 2.示例解析 一.B 和 BL 跳转指令 B 使程序跳转到指定的地址执行程序。指令 BL 将下一条指令的地址复制到 R14&#xff08;即返回地址连接寄存器 LR&#xff09;寄存器中&#xff0c;然后跳转到指定地址运行程序。 1.B/B…

FMEA-MSR的本质是什么?——FMEA软件

免费试用FMEA软件-免费版-SunFMEA ​FMEA-MSR&#xff08;Failure Modes and Effects Analysis - Manufacturing and Service Reliability&#xff09;是一种预防性的质量工具&#xff0c;用于识别、评估和解决产品或服务在制造和服务过程中可能出现的故障模式。其核心目的是在…

学习数据库和服务器管理技能是一个需要系统学习和实践的过程

在线课程和教程&#xff1a; 在线教育平台如 Coursera、edX、Udemy 等提供了许多数据库和服务器管理的课程&#xff0c;您可以选择适合自己水平和兴趣的课程进行学习。 自学教材&#xff1a; 可以购买经典的数据库和服务器管理书籍&#xff0c;如《数据库系统概念》、《MySQL 必…

一个悄然崛起的AI开源项目!

众所周知&#xff0c;最近这半年AI相关的话题实在是火到出圈。尤其是生成式AI的流行&#xff0c;让我们普通人也可以近距离地接触和应用AI。这其中最典型的就是ChatGPT。 那除了ChatGPT&#xff0c;还有一个非常实用的领域&#xff0c;也是我们今天要讨论的话题&#xff0c;那…

leetcode 2864.最大二进制奇数

这道题用的是比较简朴的方法做的.说白了就是暴力。 思路&#xff1a;首先&#xff0c;s中至少有一个1&#xff0c;而且我们重新排序后必须是奇数&#xff0c;这样的话&#xff0c;其中一个1必定会在最后一位上&#xff0c;这是由二进制的性质决定的&#xff0c;因为从右到左数…

Day33:安全开发-JavaEE应用SQL预编译Filter过滤器Listener监听器访问控制

目录 JavaEE-预编译-SQL JavaEE-过滤器-Filter JavaEE-监听器-Listen 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架库&#xff1a;MyBatis&#…

导致并发程序出现问题的根本原因是什么

并发程序出现问题的根本原因通常归结为两个核心问题&#xff1a;竞争条件&#xff08;Race Condition&#xff09;和内存可见性&#xff08;Memory Visibility&#xff09;。这些问题是由于多线程同时访问和修改共享资源而没有进行适当同步所导致的。现在让我们更详细地探讨这些…

学习SSM的记录(八)-- SSM整合项目《任务列表案例》

前端程序搭建和运行 项目预览 接口分析 1.学习计划分页查询 需求&#xff1a;查询对应数据页数据 uri&#xff1a;schedule/{pageSize}/{currentPage} 请求方式&#xff1a;get 响应数据&#xff1a;json {"code":200,"flag":true,"data"…