Ansible-Roles/roles/postgresql/tasks/variables.yml
2026-05-08 22:25:29 +03:00

133 lines
5 KiB
YAML

---
# Variable configuration.
- name: Include OS-specific variables (Debian).
ansible.builtin.include_vars: "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_version.split('.')[0] }}.yml"
when: ansible_facts.os_family == 'Debian'
- name: Include OS-specific variables (RedHat).
ansible.builtin.include_vars: "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_version.split('.')[0] }}.yml"
when:
- ansible_facts.os_family == 'RedHat'
- ansible_facts.distribution != 'Fedora'
- ansible_facts.distribution != 'Amazon'
- name: Include OS-specific variables (Amazon).
ansible.builtin.include_vars: "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
when: ansible_facts.distribution == 'Amazon'
- name: Include OS-specific variables (Fedora).
ansible.builtin.include_vars: "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_version.split('.')[0] }}.yml"
when: ansible_facts.distribution == 'Fedora'
- name: Define postgresql_packages.
ansible.builtin.set_fact:
postgresql_packages: "{{ __postgresql_packages | list }}"
when: postgresql_packages is not defined
- name: Define postgresql_version.
ansible.builtin.set_fact:
postgresql_version: "{{ __postgresql_version }}"
when: postgresql_version is not defined
- name: Define postgresql_daemon.
ansible.builtin.set_fact:
postgresql_daemon: "{{ __postgresql_daemon }}"
when: postgresql_daemon is not defined
- name: Define postgresql_data_dir.
ansible.builtin.set_fact:
postgresql_data_dir: "{{ __postgresql_data_dir }}"
when: postgresql_data_dir is not defined
- name: Define postgresql_bin_path.
ansible.builtin.set_fact:
postgresql_bin_path: "{{ __postgresql_bin_path }}"
when: postgresql_bin_path is not defined
- name: Define postgresql_config_path.
ansible.builtin.set_fact:
postgresql_config_path: "{{ __postgresql_config_path }}"
when: postgresql_config_path is not defined
- name: Define postgresql_unix_socket_directories_mode.
ansible.builtin.set_fact:
postgresql_unix_socket_directories_mode: >-
{{ __postgresql_unix_socket_directories_mode | default('02775') }}
when: postgresql_unix_socket_directories_mode is not defined
- name: Define postgresql_log_dir.
ansible.builtin.set_fact:
# postgresql_global_config_options is an array but its keys are unique, so it can be converted to dict,
# to easily get the value under the 'log_directory' key
postgresql_log_dir: "{{ (postgresql_global_config_options | items2dict(key_name='option', value_name='value')).log_directory }}"
- name: Define postgresql_effective_log_dir, if postgresql_log_dir is absolute
ansible.builtin.set_fact:
postgresql_effective_log_dir: "{{ postgresql_log_dir }}"
when: postgresql_log_dir is match("/")
- name: Define postgresql_effective_log_dir, if postgresql_log_dir is relative
ansible.builtin.set_fact:
postgresql_effective_log_dir: "{{ postgresql_data_dir }}/{{ postgresql_log_dir }}"
when: postgresql_log_dir is not match("/")
# Very useful https://pgtune.leopard.in.ua/
- name: Add PostgresSQL optimizations to global config options list
ansible.builtin.set_fact:
postgresql_global_config_options: "{{ postgresql_global_config_options + [item] }}"
loop:
- option: listen_addresses
value: "{{ posgtgresql_ipv4 | default(ansible_default_ipv4.address) }}"
- option: port
value: "{{ postgresql_ipv4_port | default('5432') }}"
- option: max_connections
value: "{{ (ansible_processor_vcpus * 100) | int }}"
- option: max_worker_processes
value: "{{ ansible_processor_vcpus * 2 | default(4) }}"
- option: max_parallel_workers_per_gather
value: "{{ (ansible_processor_vcpus / 2) | int | default(2) }}"
- option: max_parallel_workers
value: "{{ ansible_processor_vcpus | default(4) }}"
- option: max_parallel_maintenance_workers
value: 2
- option: shared_buffers
value: "{{ (ansible_memtotal_mb / 4) | int }}MB"
- option: effective_cache_size
value: "{{ (ansible_memtotal_mb * 3 / 4) | int }}MB"
- option: maintenance_work_mem
value: "{{ (ansible_memtotal_mb / 16) | int }}MB"
- option: io_method
value: io_uring
- option: huge_pages
value: try
- option: random_page_cost
value: 1
- option: log_filename
value: postgresql-%Y-%m-%d.log
- option: autovacuum
value: "on"
- option: vacuum_truncate
value: "on"
- option: wal_level
value: logical
- option: wal_sync_method
value: fdatasync
- option: wal_compression
value: lz4
- option: wal_buffers
value: "{{ ((ansible_memtotal_mb / 16) | int ) if (ansible_memtotal_mb / 16) < 16 else 16 }}MB"
- option: checkpoint_completion_target
value: "0.9"
- option: max_wal_size
value: 10GB
- option: min_wal_size
value: 50MB
- option: max_wal_senders
value: 15
- option: max_replication_slots
value: 30
- option: timezone
value: Europe/Moscow
- option: timescaledb.enable_vectorized_aggregation
value: "off"