Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PG16 & Update testing #569

Merged
merged 22 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e3db7bb
add postgresql.conf-16.orig
conscribtor Dec 27, 2023
f363a02
reset postgresql.conf-*.orig files to package defaults
conscribtor Dec 27, 2023
7d53a2f
update role defaults and template for postgres 16 support
conscribtor Dec 27, 2023
a21e5dc
update pg_hba.conf and pg_ident.conf descriptions
conscribtor Dec 27, 2023
f445e6c
add and correct hints for role defaults
conscribtor Dec 27, 2023
4a3e1d8
fix typo
conscribtor Dec 28, 2023
5562199
patch ansible defaults
conscribtor Dec 28, 2023
a3e087d
Drop pg11 testing on molecule & update Readme
MrMegaNova Jan 15, 2024
8ec3675
fix readme compatibility matrix
MrMegaNova Jan 15, 2024
92606eb
update README.md for PG16
conscribtor Jan 16, 2024
bdbd94a
fix missing postgresql_service_name for Ubuntu 22.04
conscribtor Jan 16, 2024
bf99ff3
update pgdg repository and gpg key url
conscribtor Jan 16, 2024
6852bcd
update pgdg repository and gpg key url
conscribtor Jan 16, 2024
5361c5f
Merge pull request #567 from ANXS/566-remove-postgresql-11-testing
MrMegaNova Jan 17, 2024
b45df59
Merge branch 'development' into pg16
conscribtor Jan 17, 2024
64b3da6
Merge pull request #564 from conscribtor/pg16
MrMegaNova Jan 19, 2024
a2fb520
add testing pg16 & deb12, rocky9 & stale after 90d
MrMegaNova Jan 19, 2024
2fc6a70
update compatibility matrix
MrMegaNova Jan 19, 2024
c6aa785
update compatibility matrix
MrMegaNova Jan 19, 2024
394a7ca
add testing for ubuntu 20.04
MrMegaNova Jan 19, 2024
c70954a
Merge pull request #568 from ANXS/add-pg16-testing
MrMegaNova Jan 19, 2024
e1773ed
Remove unused prebuilded docker images
MrMegaNova Jan 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ jobs:
matrix:
include:
- distro: rockylinux8
- distro: rockylinux9
- distro: debian11
- distro: debian12
- distro: ubuntu2004
- distro: ubuntu2204

steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 120
days-before-stale: 90
days-before-close: 60
exempt-issue-labels: bug
exempt-pr-labels: bug
Expand Down
34 changes: 13 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,43 +54,36 @@ An example how to include this role as a task:

#### Compatibility matrix

| Distribution / PostgreSQL | 10 | 11 | 12 | 13 | 14 | 15 |
| ------------------------- |:--:|:--:|:--:|:--:|:--:|:--:|
| CentOS 7.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :grey_question: |
| CentOS 8.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :grey_question: |
| Debian 9.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :grey_question: |
| Debian 10.x | :grey_question: | :grey_question: | :grey_question: | :grey_question: |:grey_question: | :grey_question: |
| Debian 11.x | :interrobang: | :grey_question: | :grey_question: | :grey_question: |:grey_question: | :white_check_mark: |
| Ubuntu 16.04.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :grey_question: |
| Ubuntu 18.04.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :grey_question: |
| Ubuntu 20.04.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :grey_question: |
| Ubuntu 22.04.x | :interrobang: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:grey_question: | :white_check_mark: |
| Rockylinux 9.x | :interrobang: | :grey_question: | :grey_question: | :grey_question: |:white_check_mark: | :white_check_mark: |
| Fedora 37 | :grey_question: | :grey_question: | :grey_question: | :grey_question: |:grey_question: | :grey_question: |
| Distribution / PostgreSQL | 11 | 12 | 13 | 14 | 15 | 16 |
| ------------------------- | :--------: | :----------------: | :----------------: | :----------------: | :----------------: | :-------------: |
| Debian 11.x | :no_entry: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Debian 12.x | :no_entry: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Rockylinux 8.x | :no_entry: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Rockylinux 9.x | :no_entry: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Ubuntu 20.04.x | :no_entry: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Ubuntu 22.04.x | :no_entry: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |


- :white_check_mark: - tested, works fine
- :warning: - Not for production use
- :warning: - not for production use
- :grey_question: - will work in the future (help out if you can)
- :interrobang: - maybe works, not tested
- :no_entry: - Has reached End of Life (EOL)

- :no_entry: - has reached End of Life (EOL)


#### Variables

```yaml
# Basic settings
postgresql_version: 15
postgresql_version: 16
postgresql_encoding: "UTF-8"
postgresql_locale: "en_US.UTF-8"
postgresql_ctype: "en_US.UTF-8"

postgresql_admin_user: "postgres"
postgresql_default_auth_method: "peer"

postgresql_service_enabled: false # should the service be enabled, default is true

postgresql_cluster_name: "main"
postgresql_cluster_name: main
postgresql_cluster_reset: false

# List of databases to be created (optional)
Expand Down Expand Up @@ -189,7 +182,6 @@ Top Contributors:
- [Sébastien Alix](https://github.com/sebalix)
- [Copperfield](https://github.com/Copperfield)
- [T. Soulabail](https://github.com/tsoulabail)

- [Ralph von der Heyden](https://github.com/ralph)


Expand Down
90 changes: 54 additions & 36 deletions defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# file: postgresql/defaults/main.yml

# Basic settings
postgresql_version: 15
postgresql_version: 16
postgresql_version_terse: "{{ postgresql_version | replace('.', '') }}" # Short version of the postgresql_version, used in some path and filenames
postgresql_encoding: "UTF-8"
postgresql_data_checksums: false
Expand All @@ -28,9 +28,8 @@ postgresql_default_auth_method_hosts: "{{ 'scram-sha-256' if postgresql_version
postgresql_service_user: "{{ postgresql_admin_user }}"
postgresql_service_user_pgsql_profile: false
postgresql_service_group: "{{ postgresql_admin_user }}"
postgresql_service_enabled: true

postgresql_cluster_name: "main"
postgresql_cluster_name: "main" # postgres default is ''
postgresql_cluster_reset: false

postgresql_database_owner: "{{ postgresql_admin_user }}"
Expand All @@ -48,6 +47,7 @@ postgresql_postgis_release_compatibility:
13: "3.1"
14: "3.2"
15: "3.2"
16: "3.4"

postgresql_ext_postgis_version: "{{ postgresql_postgis_release_compatibility.get(postgresql_version) }}"
postgresql_ext_postgis_version_terse: "{{ postgresql_ext_postgis_version | replace('.','') }}"
Expand Down Expand Up @@ -126,6 +126,7 @@ postgresql_listen_addresses:
postgresql_port: 5432

postgresql_max_connections: 100
postgresql_reserved_connections: 0 # (>= 16)
postgresql_superuser_reserved_connections: 3

postgresql_unix_socket_directory: "" # (<= 9.2)
Expand All @@ -148,14 +149,16 @@ postgresql_client_connection_check_interval: 0 # (>= 14)

# - Authentication -

postgresql_authentication_timeout: 60s
postgresql_authentication_timeout: 60s # 1s-600s
postgresql_password_encryption: "{{ 'scram-sha-256' if postgresql_version is version_compare('14', '>=') else 'md5' }}" # (>=14.0 set to scram-sha-256 for best security)
posgresql_scram_iterations: 4096 # (>= 16)
postgresql_db_user_namespace: off

# GSSAPI using Kerberos
postgresql_krb_server_keyfile: ""
postgresql_krb_server_keyfile: "{{ 'FILE:${sysconfdir}/krb5.keytab' if postgresql_version is version_compare('14', '>=') else '' }}"
postgresql_krb_srvname: "postgres" # (<= 9.3)
postgresql_krb_caseins_users: off
postgresql_gss_accept_delegation: off # (>= 16)

# - SSL -

Expand Down Expand Up @@ -192,9 +195,9 @@ postgresql_max_prepared_transactions: 0 # zero disables the feature

# Caution: it is not advisable to set max_prepared_transactions nonzero unless
# you actively intend to use prepared transactions.
postgresql_work_mem: 1MB # min 64kB
postgresql_hash_mem_multiplier: 1.0 # (>= 13)
postgresql_maintenance_work_mem: 16MB # min 1MB
postgresql_work_mem: 4MB # min 64kB
postgresql_hash_mem_multiplier: "{{ 2.0 if postgresql_version is version_compare('15', '>=') else 1.0 }}" # (>= 13)
postgresql_maintenance_work_mem: 64MB # min 1MB
postgresql_replacement_sort_tuples: 150000 # (>= 9.6) limits use of replacement selection sort
postgresql_autovacuum_work_mem: -1 # min 1MB, or -1 to use maintenance_work_mem
postgresql_logical_decoding_work_mem: 64MB # (>= 13)
Expand All @@ -208,7 +211,10 @@ postgresql_dynamic_shared_memory_type: "posix" # the default is the first optio
# windows
# mmap
# use none to disable dynamic shared memory
postgresql_min_dynamic_shared_memory: 0MB # (>= 14) (change requires restart)
postgresql_min_dynamic_shared_memory: 0MB # (>= 14) (change requires restart)
postgres_vacuum_buffer_usage_limit: 256kB # (>= 16) size of vacuum and analyze buffer access strategy ring;
# 0 to disable vacuum buffer access strategy;
# range 128kB to 16GB

# - Disk -

Expand All @@ -217,13 +223,13 @@ postgresql_temp_file_limit: -1

# - Kernel Resources -

postgresql_max_files_per_process: 1000 # min 25
postgresql_max_files_per_process: 1000 # min 25, (>= 13) min 64

# - Cost-Based Vacuum Delay -

postgresql_vacuum_cost_delay: 0 # 0-100 milliseconds
postgresql_vacuum_cost_page_hit: 1 # 0-10000 credits
postgresql_vacuum_cost_page_miss: 10 # 0-10000 credits
postgresql_vacuum_cost_page_miss: "{{ 2 if postgresql_version is version_compare('14', '>=') else 10 }}" # 0-10000 credits
postgresql_vacuum_cost_page_dirty: 20 # 0-10000 credits
postgresql_vacuum_cost_limit: 200 # 1-10000 credits

Expand Down Expand Up @@ -279,7 +285,7 @@ postgresql_min_wal_size: 80MB # (>= 9.5)
postgresql_checkpoint_flush_after: 0 # (>= 9.6) 0 disables,
# default is 256kB on linux, 0 otherwise
postgresql_checkpoint_timeout: 5min # range 30s-1d
postgresql_checkpoint_completion_target: 0.5 # checkpoint target duration, 0.0 - 1.0
postgresql_checkpoint_completion_target: "{{ 0.9 if postgresql_version is version_compare('14', '>=') else 0.5 }}" # checkpoint target duration, 0.0 - 1.0
postgresql_checkpoint_warning: 30s # 0 disables

# - Prefetching during recovery -
Expand Down Expand Up @@ -338,15 +344,15 @@ postgresql_synchronous_standby_names: [] # '*' means 'all'
postgresql_synchronous_standby_num_sync: "" # >= 9.6 (NOTE: If you use the ANY/ALL syntax in v10, then note the new variable below)
postgresql_synchronous_standby_choose_sync: "FIRST" # >= 10
# number of xacts by which cleanup is delayed
postgresql_vacuum_defer_cleanup_age: 0
postgresql_vacuum_defer_cleanup_age: 0 # (<= 15)

# - Standby Servers -
# These settings are ignored on a primary server.
postgresql_primary_conninfo: "" # (>= 12)
postgresql_primary_slot_name: "" # (>= 12)
postgresql_promote_trigger_file: "" # (>= 12)
postgresql_promote_trigger_file: "" # (>= 12, <= 15)
# "on" allows queries during recovery
postgresql_hot_standby: off
postgresql_hot_standby: on
# max delay before canceling queries when reading WAL from archive
postgresql_max_standby_archive_delay: 30s # -1 allows indefinite delay
# max delay before canceling queries when reading streaming WAL;
Expand All @@ -367,6 +373,7 @@ postgresql_recovery_min_apply_delay: 0 # (>= 12)
postgresql_max_logical_replication_workers: 4 # (>= 10) taken from max_worker_processes
# (change requires restart)
postgresql_max_sync_workers_per_subscription: 2 # (>= 10) taken from max_logical_replication_workers
postgresql_max_parallel_apply_workers_per_subscription: 2 # (>= 16) taken from max_logical_replication_workers

#------------------------------------------------------------------------------
# QUERY TUNING
Expand All @@ -389,6 +396,7 @@ postgresql_enable_parallel_hash: on # (>= 11)
postgresql_enable_partition_pruning: on # (>= 11)
postgresql_enable_partitionwise_join: off # (>= 11)
postgresql_enable_partitionwise_aggregate: off # (>= 11)
postgres_enable_presorted_aggregate: on # (>= 16)
postgresql_enable_seqscan: on
postgresql_enable_sort: on
postgresql_enable_tidscan: on
Expand All @@ -404,11 +412,16 @@ postgresql_parallel_setup_cost: 1000.0 # same scale as above (>= 9.6)
postgresql_min_parallel_relation_size: 8MB # (= 9.6) replaced by below two parameters in 10
postgresql_min_parallel_table_scan_size: 8MB # (>= 10)
postgresql_min_parallel_index_scan_size: 512kB # (>= 10)
postgresql_effective_cache_size: 128MB
postgresql_effective_cache_size: 4GB

postgresql_jit_above_cost: 100000 # perform JIT compilation if available
postgresql_jit_inline_above_cost: 500000 # inline small functions if query is
postgresql_jit_optimize_above_cost: 500000 # use expensive JIT optimizations if
postgresql_jit_above_cost: 100000 # (>= 11) perform JIT compilation if available
# and query more expensive than this;
# -1 disables
postgresql_jit_inline_above_cost: 500000 # (>= 11) inline small functions if query is
# more expensive than this; -1 disables
postgresql_jit_optimize_above_cost: 500000 # (>= 11) use expensive JIT optimizations if
# query is more expensive than this;
# -1 disables

# - Genetic Query Optimizer -
postgresql_geqo: on
Expand All @@ -424,7 +437,7 @@ postgresql_default_statistics_target: 100 # range 1-10000
postgresql_constraint_exclusion: "partition" # on, off, or partition
postgresql_cursor_tuple_fraction: 0.1 # range 0.0-1.0
postgresql_from_collapse_limit: 8
postgresql_jit: on # (>= 11: off, 12: on)
postgresql_jit: on # (>= 11: off, >= 12: on)
postgresql_join_collapse_limit: 8 # 1 disables collapsing of explicit
postgresql_force_parallel_mode: off # on, off, regress (>= 9.6 <= 13)
postgresql_plan_cache_mode: "auto" # (>= 12)
Expand All @@ -444,7 +457,7 @@ postgresql_logging_collector: off

# These are only used if logging_collector is on:
# Directory where log files are written, can be absolute or relative to PGDATA
postgresql_log_directory: "pg_log"
postgresql_log_directory: "log"
# Log file name pattern, can include strftime() escapes
postgresql_log_filename: "postgresql-%Y-%m-%d_%H%M%S.log"
postgresql_log_file_mode: "0600" # begin with 0 to use octal notation
Expand Down Expand Up @@ -513,8 +526,8 @@ postgresql_debug_print_parse: off
postgresql_debug_print_rewritten: off
postgresql_debug_print_plan: off
postgresql_debug_pretty_print: on
postgresql_log_autovacuum_min_duration: -1
postgresql_log_checkpoints: off
postgresql_log_autovacuum_min_duration: "{{ '10min' if postgresql_version is version_compare('15', '>=') else -1 }}"
postgresql_log_checkpoints: "{{ 'on' if postgresql_version is version_compare('15', '>=') else 'off' }}"
postgresql_log_connections: off
postgresql_log_disconnections: off
postgresql_log_duration: off
Expand Down Expand Up @@ -544,7 +557,7 @@ postgresql_log_hostname: off
# processes
# %% = '%'
# e.g. '<%u%%%d> '
postgresql_log_line_prefix: "%t "
postgresql_log_line_prefix: "%m [%p] "

# log lock waits >= deadlock_timeout
postgresql_log_lock_waits: off
Expand Down Expand Up @@ -575,7 +588,7 @@ postgresql_track_counts: on
postgresql_track_io_timing: off # (>= 9.2)
postgresql_track_wal_io_timing: off # (>= 14)
postgresql_track_functions: "none" # none, pl, all
postgresql_stats_fetch_consistency: cache # (>= 15)
postgresql_stats_fetch_consistency: cache # (>= 15) cache, none, snapshot
postgresql_stats_temp_directory: "pg_stat_tmp" # (<= 14)

# - Monitoring -
Expand Down Expand Up @@ -641,7 +654,7 @@ postgresql_row_security: on # (>= 9.5)
postgresql_default_tablespace: "" # a tablespace name, "" uses the default
postgresql_default_toast_compression: "pglz" # (>= 14) 'pglz' or 'lz4'
postgresql_temp_tablespaces: [] # a list of tablespace names
postgresql_default_table_access_method: "heap"
postgresql_default_table_access_method: "heap" # (>= 12)
postgresql_tablespaces_dirs: [] # a list of directories for tablespaces to be created

postgresql_check_function_bodies: on
Expand All @@ -665,23 +678,24 @@ postgresql_bytea_output: "hex" # hex, escape
postgresql_xmlbinary: "base64"
postgresql_xmloption: "content"
postgresql_gin_pending_list_limit: 4MB # (>= 9.5)
postgresql_createrole_self_grant: '' # (>= 16) 'set', 'inherit' or 'set, inherit'

# - Locale and Formatting -

postgresql_datestyle:
- "iso"
- "mdy"
postgresql_intervalstyle: "postgres"
postgresql_timezone: "UTC"
postgresql_timezone: "UTC" # postgres default is GMT

# Select the set of available time zone abbreviations. Currently, there are:
# Default
# Australia
# India
# You can create your own file in `share/timezonesets/`.
postgresql_timezone_abbreviations: "Default"

postgresql_extra_float_digits: 0 # min -15, max 3
# min -15, max 3; (>= 12) any value >0 actually selects precise output mode
postgresql_extra_float_digits: "{{ 1 if postgresql_version is version_compare('12', '>=') else 0 }}"
postgresql_client_encoding: false # actually defaults to database encoding
# 'sql_ascii', 'UTF8', ...

Expand All @@ -695,22 +709,26 @@ postgresql_lc_numeric: "{{ postgresql_locale }}"
# locale for time formatting
postgresql_lc_time: "{{ postgresql_locale }}"

postgresql_icu_validation_level: "warning" # (>= 16) report ICU locale validation
# errors at the given level

# default configuration for text search
postgresql_default_text_search_config: "pg_catalog.english"
postgresql_default_text_search_config: "pg_catalog.english" # default is 'pg_catalog.simple'

# - Shared Library Preloading -

postgresql_local_preload_libraries: []
postgresql_session_preload_libraries: []
postgresql_shared_preload_libraries: []
postgresql_jit_provider: "llvmjit"
postgresql_jit_provider: "llvmjit" # (>= 11)

# - Other Defaults -

postgresql_dynamic_library_path: "$libdir"
postgresql_extension_destdir: "" # (>= 14)
postgresql_extension_destdir: "" # prepend path when loading extensions
# and shared objects (added by Debian)

postgresql_gin_fuzzy_search_limit: 0 # (<= 9.2)
postgresql_gin_fuzzy_search_limit: 0

#------------------------------------------------------------------------------
# LOCK MANAGEMENT
Expand Down Expand Up @@ -759,7 +777,7 @@ postgresql_exit_on_error: off
# Reinitialize after backend crash?
postgresql_restart_after_crash: on
# Retry or panic on failure to fsync data?
postgresql_data_sync_retry: off
postgresql_data_sync_retry: off # (>= 11)
postgresql_recovery_init_sync_method: fsync #(>= 14) fsync, syncfs (Linux 5.8+)

#------------------------------------------------------------------------------
Expand Down Expand Up @@ -802,11 +820,11 @@ postgresql_apt_pin_priority: 500

# YUM repository locations
postgresql_yum_repository_url: "http://yum.postgresql.org"
postgresql_pgdg_repository_url: "https://download.postgresql.org/pub/repos/yum/"
postgresql_pgdg_repository_url: "https://download.postgresql.org/pub/repos/yum"

# YUM (RedHat, CentOS, etc.) baseurl/gpgkey
postgresql_yum_repository_baseurl: "{{ postgresql_yum_repository_url }}/{{ postgresql_version }}/{{ ansible_os_family | lower }}/rhel-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}"
postgresql_yum_repository_gpgkey: "{{ postgresql_pgdg_repository_url }}/RPM-GPG-KEY-PGDG-{{ postgresql_version_terse }}"
postgresql_yum_repository_gpgkey: "{{ postgresql_pgdg_repository_url }}/keys/PGDG-RPM-GPG-KEY-RHEL"

# DNF (Fedora) baseurl/gpgkey
postgresql_dnf_repository_baseurl: "{{ postgresql_yum_repository_url }}/{{ postgresql_version }}/fedora/fedora-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}"
Expand Down
Loading