Làm cách nào để tùy chỉnh tệp cấu hình của hình ảnh PostgreSQL Docker chính thức?


100

Tôi đang sử dụng hình ảnh Postgres Docker chính thức đang cố gắng tùy chỉnh cấu hình của nó. Với mục đích này, tôi sử dụng lệnh sedđể thay đổi, max_connectionsví dụ:

sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /var/lib/postgresql/data/postgresql.conf

Tôi đã thử hai phương pháp để áp dụng cấu hình này. Đầu tiên là bằng cách thêm các lệnh vào một tập lệnh và sao chép nó trong thư mục init "/docker-entrypoint-initdb.d". Phương pháp thứ hai là chạy chúng trực tiếp trong Dockerfile của tôi với lệnh "RUN" (phương pháp này hoạt động tốt với hình ảnh Postgresql không chính thức có đường dẫn khác đến tệp cấu hình "/ etc / postgres / ..."). Trong cả hai trường hợp, các thay đổi không thành công vì tệp cấu hình bị thiếu (tôi nghĩ rằng nó chưa được tạo).

Tôi nên thay đổi cấu hình như thế nào?

Chỉnh sửa 1:

Đây là Dockerfile được sử dụng để tạo hình ảnh:

# Database (http://www.cs3c.ma/)

FROM postgres:9.4
MAINTAINER Sabbane <contact@cs3c.ma>

ENV TERM=xterm

RUN apt-get update
RUN apt-get install -y nano

ADD scripts /scripts
# ADD scripts/setup-my-schema.sh /docker-entrypoint-initdb.d/

# Allow connections from anywhere.
RUN sed -i -e"s/^#listen_addresses =.*$/listen_addresses = '*'/" /var/lib/postgresql/data/postgresql.conf
RUN echo "host    all    all    0.0.0.0/0    md5" >> /var/lib/postgresql/data/pg_hba.conf

# Configure logs
RUN sed -i -e"s/^#logging_collector = off.*$/logging_collector = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_directory = 'pg_log'.*$/log_directory = '\/var\/log\/postgresql'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_filename = 'postgresql-\%Y-\%m-\%d_\%H\%M\%S.log'.*$/log_filename = 'postgresql_\%a.log'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_file_mode = 0600.*$/log_file_mode = 0644/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_truncate_on_rotation = off.*$/log_truncate_on_rotation = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_rotation_age = 1d.*$/log_rotation_age = 1d/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_min_duration_statement = -1.*$/log_min_duration_statement = 0/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_checkpoints = off.*$/log_checkpoints = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_connections = off.*$/log_connections = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_disconnections = off.*$/log_disconnections = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^log_line_prefix = '\%t \[\%p-\%l\] \%q\%u@\%d '.*$/log_line_prefix = '\%t \[\%p\]: \[\%l-1\] user=\%u,db=\%d'/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_lock_waits = off.*$/log_lock_waits = on/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#log_temp_files = -1.*$/log_temp_files = 0/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#statement_timeout = 0.*$/statement_timeout = 1800000        # in milliseconds, 0 is disabled (current 30min)/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^lc_messages = 'en_US.UTF-8'.*$/lc_messages = 'C'/" /var/lib/postgresql/data/postgresql.conf

# Performance Tuning
RUN sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^shared_buffers =.*$/shared_buffers = 16GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#effective_cache_size = 128MB.*$/effective_cache_size = 48GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#work_mem = 1MB.*$/work_mem = 16MB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#maintenance_work_mem = 16MB.*$/maintenance_work_mem = 2GB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#checkpoint_segments = .*$/checkpoint_segments = 32/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#checkpoint_completion_target = 0.5.*$/checkpoint_completion_target = 0.7/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#wal_buffers =.*$/wal_buffers = 16MB/" /var/lib/postgresql/data/postgresql.conf
RUN sed -i -e"s/^#default_statistics_target = 100.*$/default_statistics_target = 100/" /var/lib/postgresql/data/postgresql.conf


VOLUME ["/var/lib/postgresql/data", "/var/log/postgresql"]

CMD ["postgres"]

Với Dockerfile này, quá trình xây dựng hiển thị lỗi: sed: can't read /var/lib/postgresql/data/postgresql.conf: No such file or directory


1
một phương pháp là sử dụng hình ảnh chính thức, bắt đầu nó, bên trong kết nối với docker exec -it container_id bashthì đừng thay đổi của bạn, sau đó docker commit container_id myuser/myimage_myPostegresql:myversionxem doc docs.docker.com/reference/commandline/cli/#commit
user2915097

2
Tôi nghĩ một trong những lợi thế của mô hình docker là tự động hóa toàn bộ quá trình xây dựng. Như đã đề cập với một hình ảnh khác, paintedfox/postgresqlcó thể thay đổi cấu hình trực tiếp trong Dockerfile. Tôi nghĩ điều đó cũng có thể xảy ra với hình ảnh chính thức.
Sakr

phương pháp sed sẽ hoạt động, bạn có thể đăng Dcokerfile của bạn hoặc một trình tái tạo hoàn chỉnh không?
dùng2915097

Câu trả lời:


53

Các postgres:9.4hình ảnh mà bạn đã thừa hưởng từ tuyên bố một khối lượng tại /var/lib/postgresql/data. Điều này về cơ bản có nghĩa là bạn không thể sao chép bất kỳ tệp nào vào đường dẫn đó trong hình ảnh của bạn; các thay đổi sẽ bị loại bỏ.

Bạn có một số lựa chọn:

  • Bạn chỉ có thể thêm các tệp cấu hình của riêng mình dưới dạng một ổ đĩa tại thời điểm chạy với docker run -v postgresql.conf:/var/lib/postgresql/data/postgresql.conf .... Tuy nhiên, tôi không chắc chính xác điều đó sẽ tương tác với khối lượng hiện có như thế nào.

  • Bạn có thể sao chép tệp khi vùng chứa được khởi động. Để làm điều đó, hãy sao chép tệp của bạn vào bản dựng tại một vị trí không nằm bên dưới ổ đĩa, sau đó gọi một tập lệnh từ điểm nhập hoặc cmd sẽ sao chép tệp vào vị trí chính xác và bắt đầu postgres.

  • Sao chép dự án đằng sau hình ảnh chính thức của Postgres và chỉnh sửa Dockerfile để thêm tệp cấu hình của riêng bạn vào trước khi VOLUME được khai báo (bất kỳ thứ gì được thêm vào trước lệnh VOLUME sẽ tự động được sao chép vào lúc chạy).

  • Chuyển tất cả các thay đổi cấu hình trong tùy chọn lệnh trong tệp docker-compile

giống:

services:
  postgres:
    ...  
    command:
      - "postgres"
      - "-c"
      - "max_connections=1000"
      - "-c"
      - "shared_buffers=3GB"
      - "-c"
      ...

3
Đó là nó, các thay đổi không nên nằm trong Dockerfile. Tôi đã chuyển chúng sang một tập lệnh và gọi nó từ entrypoint và hiện tại nó đã hoạt động tốt. Cảm ơn bạn đã trả lời.
Sakr

5
Tôi vừa sao chép tập lệnh trong thư mục init "/docker-entrypoint-initdb.d/" và lần này nó cũng hoạt động tốt. Điều đó thật kỳ lạ nhưng có vẻ như tôi đã quá tập trung vào việc thiết lập hình ảnh bằng Dockerfile, như tôi vẫn thường làm với hầu hết các hình ảnh, đến nỗi tôi đã bỏ lỡ điều gì đó trong lần thử đầu tiên sử dụng init script.
Sakr

"Về cơ bản, điều này có nghĩa là bạn không thể sao chép bất kỳ tệp nào vào đường dẫn đó trong hình ảnh của mình; các thay đổi sẽ bị loại bỏ." Bạn vui lòng giải thích tại sao lại như vậy?
isco

@isco tra cứu khối lượng trong tài liệu chính thức. Về cơ bản, khối lượng không được lưu trữ trong hình ảnh mà trên máy chủ lưu trữ, vì vậy dữ liệu sẽ được lưu trên máy chủ lưu trữ, không phải trong hình ảnh. Bạn cần khởi động vùng chứa với cùng một khối lượng được đính kèm để giữ dữ liệu.
Adrian Mouat

tôi thay đổi trong /var/lib/postgres/data/pg_hba.conf để chấp nhận kết nối duy nhất là máy chủ lưu trữ tất cả 192.168.0.0/0 md5 và máy chủ lưu trữ nhận xét tất cả md5 (là mặc định). Nhưng không thay đổi hiệu ứng
Lucas Resende

83

Với Docker Compose

Khi làm việc với Docker Compose, bạn có thể sử dụng command: postgres -c option=valuetrong của mình docker-compose.ymlđể định cấu hình Postgres.

Ví dụ: điều này làm cho Postgres đăng nhập vào một tệp:

command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs

Điều chỉnh câu trả lời của Vojtech Vitek , bạn có thể sử dụng

command: postgres -c config_file=/etc/postgresql.conf

để thay đổi tệp cấu hình mà Postgres sẽ sử dụng. Bạn sẽ gắn tệp cấu hình tùy chỉnh của mình với một ổ đĩa:

volumes:
   - ./customPostgresql.conf:/etc/postgresql.conf

Đây là docker-compose.ymlứng dụng của tôi, hiển thị cách định cấu hình Postgres:

# Start the app using docker-compose pull && docker-compose up to make sure you have the latest image
version: '2.1'
services:
  myApp:
    image: registry.gitlab.com/bullbytes/myApp:latest
    networks:
      - myApp-network
  db:
     image: postgres:9.6.1
     # Make Postgres log to a file.
     # More on logging with Postgres: https://www.postgresql.org/docs/current/static/runtime-config-logging.html
     command: postgres -c logging_collector=on -c log_destination=stderr -c log_directory=/logs
     environment:
       # Provide the password via an environment variable. If the variable is unset or empty, use a default password
       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-4WXUms893U6j4GE&Hvk3S*hqcqebFgo!vZi}
     # If on a non-Linux OS, make sure you share the drive used here. Go to Docker's settings -> Shared Drives
     volumes:
       # Persist the data between container invocations
       - postgresVolume:/var/lib/postgresql/data
       - ./logs:/logs
     networks:
       myApp-network:
         # Our application can communicate with the database using this hostname
         aliases:
           - postgresForMyApp
networks:
  myApp-network:
    driver: bridge
# Creates a named volume to persist our data. When on a non-Linux OS, the volume's data will be in the Docker VM
# (e.g., MobyLinuxVM) in /var/lib/docker/volumes/
volumes:
  postgresVolume:

Quyền ghi vào thư mục nhật ký

Lưu ý rằng khi trên Linux, thư mục nhật ký trên máy chủ lưu trữ phải có quyền phù hợp. Nếu không, bạn sẽ gặp phải lỗi hơi gây hiểu lầm

FATAL: không thể mở tệp nhật ký "/logs/postgresql-2017-02-04_115222.log": Quyền bị từ chối

Tôi nói là gây hiểu lầm, vì thông báo lỗi gợi ý rằng thư mục trong vùng chứa có quyền sai, trong khi thực tế thư mục trên máy chủ không cho phép ghi.

Để khắc phục điều này, tôi đặt các quyền chính xác trên máy chủ lưu trữ bằng cách sử dụng

chgroup ./logs docker && chmod 770 ./logs

Bạn có khuyên bạn nên tạo nhật ký postgres vào một tệp, thay vì stdout và sử dụng các lệnh ghi nhật ký docker để đối phó với nó không? kudo cho liên kết chéo trong vấn đề github !
jpic

1
Tôi không quyết định việc đăng nhập vào tệp hay sử dụng nhật ký Docker là tốt hơn, jpic.
Matthias Braun

bạn đã thêm mật khẩu, mà bạn có thể sẽ muốn che giấu ở đây
vidstige

3
@vidstige: Tôi không sử dụng chuỗi ngẫu nhiên này làm mật khẩu, nó chỉ để trình diễn.
Matthias Braun

1
@Gherman: Bạn đã thêm cái này vào Dockerfile của mình chưa? Bởi vì bạn không nên. Câu trả lời của tôi sử dụng docker-compose.yml.
Matthias Braun

39

Chèn postgresql.conf tùy chỉnh vào vùng chứa postgres Docker

Tệp mặc định postgresql.confnằm trong PGDATAdir ( /var/lib/postgresql/data), điều này làm cho mọi thứ trở nên phức tạp hơn đặc biệt là khi chạy vùng chứa postgres lần đầu tiên, vì docker-entrypoint.shtrình bao bọc gọi initdbbước PGDATAkhởi tạo dir.

Để tùy chỉnh cấu hình PostgreSQL trong Docker một cách nhất quán, tôi khuyên bạn nên sử dụng config_filetùy chọn postgres cùng với các khối lượng Docker như sau:

Cơ sở dữ liệu sản xuất (PGDATA dir as Ổn định)

docker run -d \
-v $CUSTOM_CONFIG:/etc/postgresql.conf \
-v $CUSTOM_DATADIR:/var/lib/postgresql/data \
-e POSTGRES_USER=postgres \
-p 5432:5432 \
--name postgres \
postgres:9.6 postgres -c config_file=/etc/postgresql.conf

Cơ sở dữ liệu thử nghiệm (PGDATA dir sẽ bị hủy sau đó docker rm)

docker run -d \
-v $CUSTOM_CONFIG:/etc/postgresql.conf \
-e POSTGRES_USER=postgres \
--name postgres \
postgres:9.6 postgres -c config_file=/etc/postgresql.conf

Gỡ lỗi

  1. Xóa -d(tùy chọn tách) khỏi docker runlệnh để xem nhật ký máy chủ trực tiếp.
  2. Kết nối với máy chủ postgres bằng máy khách psql và truy vấn cấu hình:

    docker run -it --rm --link postgres:postgres postgres:9.6 sh -c 'exec psql -h $POSTGRES_PORT_5432_TCP_ADDR -p $POSTGRES_PORT_5432_TCP_PORT -U postgres'
    
    psql (9.6.0)
    Type "help" for help.
    
    postgres=# SHOW all;

30

Khi bạn chạy entrypoint chính thức (AKA khi bạn khởi chạy vùng chứa), nó sẽ chạy initdbtrong $PGDATA( /var/lib/postgresql/datatheo mặc định) và sau đó nó sẽ lưu trữ trong thư mục đó 2 tệp sau:

  • postgresql.conf với cài đặt thủ công mặc định.
  • postgresql.auto.confvới các cài đặt tự động ghi đè bằng ALTER SYSTEMcác lệnh.

Điểm nhập cũng thực thi bất kỳ /docker-entrypoint-initdb.d/*.{sh,sql}tệp nào .

Tất cả điều này có nghĩa là bạn có thể cung cấp một tập lệnh shell / SQL trong thư mục đó để cấu hình máy chủ cho lần khởi động tiếp theo (sẽ ngay sau lần khởi động DB hoặc lần tiếp theo bạn khởi động vùng chứa).

Thí dụ:

conf.sql tập tin:

ALTER SYSTEM SET max_connections = 6;
ALTER SYSTEM RESET shared_buffers;

Dockerfile tập tin:

FROM posgres:9.6-alpine
COPY *.sql /docker-entrypoint-initdb.d/
RUN chmod a+r /docker-entrypoint-initdb.d/*

Và sau đó bạn sẽ phải thực thi conf.sqlthủ công trong các cơ sở dữ liệu đã có sẵn. Vì cấu hình được lưu trữ trong ổ đĩa, nó sẽ tồn tại khi được xây dựng lại.


Một giải pháp thay thế khác là chuyển -ccờ bao nhiêu lần tùy thích:

docker container run -d postgres -c max_connections=6 -c log_lock_waits=on

Bằng cách này, bạn không cần phải xây dựng một hình ảnh mới, và bạn không cần quan tâm đến cơ sở dữ liệu đã tồn tại hay không; tất cả sẽ bị ảnh hưởng.


2
Điều cuối cùng này, vượt qua -c, là yêu thích của tôi. Điều này rất sạch sẽ và đơn giản để tạo cho các môi trường khác nhau.
epic_fil

10

Bạn có thể đặt tùy chỉnh của mình postgresql.confvào một tệp tạm thời bên trong vùng chứa và ghi đè lên cấu hình mặc định trong thời gian chạy.

Để làm việc đó :

  • Sao chép tùy chỉnh postgresql.confcủa bạn bên trong vùng chứa của bạn
  • Sao chép updateConfig.shtệp trong/docker-entrypoint-initdb.d/

Dockerfile

FROM postgres:9.6

COPY postgresql.conf      /tmp/postgresql.conf
COPY updateConfig.sh      /docker-entrypoint-initdb.d/_updateConfig.sh

updateConfig.sh

#!/usr/bin/env bash

cat /tmp/postgresql.conf > /var/lib/postgresql/data/postgresql.conf

Trong thời gian chạy, vùng chứa sẽ thực thi tập lệnh bên trong /docker-entrypoint-initdb.d/và ghi đè lên cấu hình mặc định bằng cấu hình tùy chỉnh yout.


tại sao lại có "_" trong lệnh sao chép thứ hai? không nên /docker-entrypoint-initdb.d/updateConfig.sh:?
Fernando Castilla Ospina

3
Đó là vì thư mục docker-entrypoint-initdb.d / thực thi các tập lệnh theo thứ tự bảng chữ cái. Và tôi muốn áp dụng kịch bản này trước những kịch bản khác.
alphayax 21/09/17

tnx tôi quên rằng bản sao đổi tên tập tin để sử dụng gạch
Fernando Castilla Ospina

9

Tôi đã xem qua tất cả các câu trả lời và còn lại một lựa chọn khác. Bạn có thể thay đổi giá trị CMD của mình trong tệp docker (đây không phải là cách tốt nhất, nhưng vẫn có thể là cách có thể để đạt được mục tiêu của bạn).

Về cơ bản, chúng ta cần

  • Sao chép tệp cấu hình trong vùng chứa docker
  • Ghi đè các tùy chọn bắt đầu postgres

Ví dụ về tệp Docker:

FROM postgres:9.6
USER postgres

# Copy postgres config file into container
COPY postgresql.conf /etc/postgresql

# Override default postgres config file
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

Mặc dù tôi nghĩ rằng sử dụng command: postgres -c config_file=/etc/postgresql/postgresql.conftrong docker-compose.ymltệp của bạn do Matthias Braun đề xuất là lựa chọn tốt nhất.


2

Một giải pháp công nghệ khá thấp cho vấn đề này dường như là khai báo dịch vụ (tôi đang sử dụng swarm trên AWS và một tệp yaml) với các tệp cơ sở dữ liệu của bạn được gắn vào một ổ đĩa liên tục (ở đây AWS EFS như được biểu thị bởi cloudstor: aws driver sự chỉ rõ).

  version: '3.3'
  services:
    database:
      image: postgres:latest
      volumes:
        - postgresql:/var/lib/postgresql
        - postgresql_data:/var/lib/postgresql/data
    volumes:
       postgresql:
         driver: "cloudstor:aws" 
       postgresql_data:
         driver: "cloudstor:aws"
  1. Db xuất hiện khi được khởi tạo với cài đặt mặc định hình ảnh.
  2. Bạn chỉnh sửa cài đặt conf bên trong vùng chứa, ví dụ: nếu bạn muốn tăng số lượng kết nối đồng thời tối đa, yêu cầu khởi động lại
  3. dừng vùng chứa đang chạy (hoặc chia tỷ lệ dịch vụ xuống 0 và sau đó quay lại một)
  4. bầy tạo ra một vùng chứa mới, lần này sẽ chọn cài đặt cấu hình lâu dài của bạn và vui vẻ áp dụng chúng.

Một tác dụng phụ thú vị của việc duy trì cấu hình của bạn là nó cũng duy trì cơ sở dữ liệu của bạn (hoặc ngược lại) ;-)


2

Giải pháp của tôi dành cho các đồng nghiệp cần thay đổi cấu hình trước khi khởi chạy docker-entrypoint-initdb.d

Tôi cần thay đổi cài đặt 'shared_preload_libraries' 'để trong quá trình làm việc, postgres đã tải sẵn thư viện mới và mã trong docker-entrypoint-initdb.d có thể sử dụng nó.

Vì vậy, tôi vừa vá tệp postgresql.conf.sample trong Dockerfile:

RUN echo "shared_preload_libraries='citus,pg_cron'" >> /usr/share/postgresql/postgresql.conf.sample
RUN echo "cron.database_name='newbie'" >> /usr/share/postgresql/postgresql.conf.sample

Và với bản vá này, có thể thêm phần mở rộng trong tệp .sql trong docker-entrypoint-initdb.d /:

CREATE EXTENSION pg_cron;

1

Điều này phù hợp với tôi:

FROM postgres:9.6
USER postgres

# Copy postgres config file into container
COPY postgresql.conf /etc/postgresql

# Override default postgres config file
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

Tại sao điều này không nhận được bất kỳ ủng hộ? Đó là đề xuất rất đúng đắn ở đây ... Cảm ơn bạn.
Paflow

0

Sử dụng trình soạn nhạc docker, bạn có thể gắn một ổ đĩa với postgresql.auto.conf. Thí dụ:

version: '2'

services:
  db:
    image: postgres:10.9-alpine
    volumes:
      - postgres:/var/lib/postgresql/data:z
      - ./docker/postgres/postgresql.auto.conf:/var/lib/postgresql/data/postgresql.auto.conf
    ports:
      - 5432:5432

Bạn không nên chỉnh sửa postgresql.auto.confvì nó bị ghi đè. Sử dụng postgresql.confcùng một vị trí.
Baschdl

0

Tôi cũng đang sử dụng hình ảnh chính thức ( FROM postgres) và tôi có thể thay đổi cấu hình bằng cách thực hiện các lệnh sau.

Điều đầu tiên là xác định vị trí tệp cấu hình PostgreSQL. Điều này có thể được thực hiện bằng cách thực hiện lệnh này trong cơ sở dữ liệu đang chạy của bạn.

SHOW config_file;

Tôi trường hợp của tôi nó trở lại /data/postgres/postgresql.conf.

Bước tiếp theo là tìm hiểu băm của vùng chứa docker PostgreSQL đang chạy của bạn là gì.

docker ps -a

Thao tác này sẽ trả về danh sách tất cả các vùng chứa đang chạy. Trong trường hợp của tôi, nó trông như thế này.

...
0ba35e5427d9    postgres    "docker-entrypoint.s…" ....
...

Bây giờ bạn phải chuyển sang bash bên trong vùng chứa của mình bằng cách thực hiện:

docker exec -it 0ba35e5427d9 /bin/bash

Bên trong vùng chứa, hãy kiểm tra xem cấu hình có ở đúng đường dẫn hay không và hiển thị nó.

cat /data/postgres/postgresql.conf

Tôi muốn thay đổi kết nối tối đa từ 100 thành 1000 và bộ đệm được chia sẻ từ 128MB thành 3GB. Với lệnh sed, tôi có thể thực hiện tìm kiếm và thay thế bằng các biến tương ứng trong cấu hình.

sed -i -e"s/^max_connections = 100.*$/max_connections = 1000/" /data/postgres/postgresql.conf
sed -i -e"s/^shared_buffers = 128MB.*$/shared_buffers = 3GB/" /data/postgres/postgresql.conf

Điều cuối cùng chúng ta phải làm là khởi động lại cơ sở dữ liệu trong vùng chứa. Tìm hiểu bạn đang sử dụng phiên bản PostGres nào.

cd /usr/lib/postgresql/
ls 

Trong trường hợp của tôi 12 , vì vậy, bây giờ bạn có thể khởi động lại cơ sở dữ liệu bằng cách thực hiện lệnh sau với phiên bản chính xác tại chỗ.

su - postgres -c "PGDATA=$PGDATA /usr/lib/postgresql/12/bin/pg_ctl -w restart"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.