Postgresql

postgres - c <parameter> = <value> 不適用於 docker 中的 postgres 11

  • February 16, 2022

我在 docker 內執行 Postgres。我想更改 Postgres 的預設配置,所以我正在執行:

docker container run -d postgres -c max_connections=200 -c shared_buffers = 1GB -c effective_cache_size=3GB -c maintenance_work_mem=256MB -c checkpoint_completion_target=0.7 -c wal_buffers=16MB 

但是當我連接到 Postgres 執行時:

docker exec -it container_name psql

然後結果:

SHOW max_connections;

max_connections
-----------------
100
(1 row)

而且不只是max_connections. 沒有任何參數被更改。而且我不知道我在做什麼有什麼問題?

**更新:**我已經有一個正在執行的 docker 容器,我希望它將這些參數應用到它而不需要重新啟動它。

使用“-c”選項時,不能在等號周圍放置空格。所以你需要類似的東西postgres -c max_connections=200

當我嘗試使用空格時,它根本拒絕啟動。因此,我不知道您要連接到什麼SHOW max_connections;。在您嘗試使用無效語法開始之前,您可能已經執行了一個伺服器?

使用 Docker 執行 Postgresql 時,啟動容器時有很多方法可以更改配置。

Docker鏡像官方文件這一段有解釋:數據庫配置

在我們的例子中,有一個例子:

$ docker run -d --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword postgres -c shared_buffers=256MB -c max_connections=200

所以讓我們用 Postgres 14 試試這個:

$ docker run -d --name pg14 -e POSTGRES_PASSWORD=mysecretpassword postgres:14 -c shared_buffers=256MB -c max_connections=200

用 psql 檢查它:

$ docker exec -it pg14 psql -U postgres

如果我們執行SHOW max_connections;,會顯示 200,所以它起作用了 👍。

⚠️ 在命令行設置這個參數確實會覆蓋postgresql.conf中的配置。

我們可以檢查容器使用的配置文件:

$ docker exec pg14 cat /var/lib/postgresql/data/postgresql.conf

它包含 :

max_connections = 100                   # (change requires restart)

即使max_connections在命令行上成功更改了參數,在日誌中我們仍然可以看到預設值(我猜來自配置文件):

$ docker logs pg14  | grep max_connections
...
selecting default max_connections ... 100
...

引用自:https://dba.stackexchange.com/questions/223866