Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
98d92c5
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
3ae93dd
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
a466ba2
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
22349e9
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
6866ab5
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
6b75a3f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
7af21e4
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
82b227d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
6c85e9e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
6b888d6
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
e84122e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
4efa1a2
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
632af87
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
4111cc2
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
ab5a4a4
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
2fbbdbe
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
c5fbaaa
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
1dea830
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
294b144
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 1, 2025
4b216bd
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
2e0b30d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e97a401
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
eb36918
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
7999cae
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
23a39b3
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
c8c529d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
49f0144
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
33a8b06
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
891c5cb
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
18a6ee5
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
ad69ca5
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
df98d6a
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
8a6058a
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
7627895
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
c88a0f3
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
9fc8d5d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
cba3ac7
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
06d6c78
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
a88ca8f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
c0057f6
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
78e0394
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e3375e1
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e960aeb
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
224764b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
4e8447d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
d25221d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e5722b0
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
dc09039
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
5ff71dc
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
40788e9
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
3da0926
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
33bde4b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
cce190a
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
cf09bb8
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
a622132
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
5cf0e8f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
2b49271
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
7c4b839
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
add8d4e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
8b74772
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
61b4bdf
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
03215f2
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
5b53e17
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
2429648
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
20e7d29
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
d053f95
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
93d71c7
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
f4d3b8b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e10e1aa
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
eae86d2
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
5c3332b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
34691b7
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
687b3d4
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e447a4d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
4bc32d4
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
1cd81d6
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
5f957ca
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
4bd7350
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
eaa9c42
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e44d613
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
fe2cedd
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
9624cd0
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
c4e447e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
1dc04b6
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
f25f2e2
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
5dc9f34
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
20d1a3b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
2f01789
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e4dd64b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
dc8f2ac
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
9b0342a
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
f5e81b6
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
a70e417
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
0f87162
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
9b940c5
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
1c97a18
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
164fb3f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
e642037
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
7f1f7a9
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
8354c4d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
134f639
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
37474c6
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
0c1696b
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
f6f9631
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
d154405
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
fecaf06
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
a3d2e82
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
f3196f3
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
04cd928
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
c0406e4
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
adef31e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
3a75e75
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
ee1dd1e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
a630e82
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 2, 2025
c29c953
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
bf2acf9
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
f45b8c0
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
832abab
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
890b7e0
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
3eada44
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
5b2bb0e
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
9b0eaaf
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
a3d417f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
5e9c386
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
7a4cfcf
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
e61a2c3
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
98da360
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
454788d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
cd99c07
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
39a2ff4
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
f814b39
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
a54abd0
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
9a01d75
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
efcb335
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
744e87d
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
3246789
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
d0a122f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
78fd1ae
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
638a402
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
8bdd22f
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
1151a44
PMM-14517: Skeleton PG Setup
peterSirotnak Dec 3, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ initial-cluster-token: PostgreSQL_HA_Cluster_1
initial-cluster-state: new

listen-peer-urls: http://0.0.0.0:2380
initial-advertise-peer-urls: http://pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}:2380
initial-advertise-peer-urls: http://pdpgsql_pmm_patroni_{{ pdpgsql_version }}_{{ item }}:2380

listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}:2379
advertise-client-urls: http://pdpgsql_pmm_patroni_{{ pdpgsql_version }}_{{ item }}:2379

initial-cluster: node1=http://pdpgsql_pmm_patroni_{{ pg_version }}_1:2380,node2=http://pdpgsql_pmm_patroni_{{ pg_version }}_2:2380,node3=http://pdpgsql_pmm_patroni_{{ pg_version }}_3:2380
initial-cluster: node1=http://pdpgsql_pmm_patroni_{{ pdpgsql_version }}_1:2380,node2=http://pdpgsql_pmm_patroni_{{ pdpgsql_version }}_2:2380,node3=http://pdpgsql_pmm_patroni_{{ pdpgsql_version }}_3:2380
10 changes: 5 additions & 5 deletions pmm_qa/percona-distribution-postgresql/data/patroni.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: pg_node_{{ item }}

restapi:
listen: 0.0.0.0:8008
connect_address: "pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}:8008"
connect_address: "pdpgsql_pmm_patroni_{{ pdpgsql_version }}_{{ item }}:8008"

etcd3:
host: "pdpgsql_pmm_patroni_{{ pg_version }}_1:2379"
host: "pdpgsql_pmm_patroni_{{ pdpgsql_version }}_1:2379"

bootstrap:
dcs:
Expand Down Expand Up @@ -51,9 +51,9 @@ bootstrap:

postgresql:
listen: 0.0.0.0:5432
connect_address: "pdpgsql_pmm_patroni_{{ pg_version }}_{{ item }}:5432"
data_dir: /var/lib/pgsql/{{ pg_version}}/data
bin_dir: /usr/pgsql-{{ pg_version }}/bin
connect_address: "pdpgsql_pmm_patroni_{{ pdpgsql_version }}_{{ item }}:5432"
data_dir: /var/lib/postgresql/{{ pdpgsql_version }}/main
bin_dir: /usr/lib/postgresql/{{ pdpgsql_version }}/bin
pgpass: /tmp/pgpass

authentication:
Expand Down
115 changes: 115 additions & 0 deletions pmm_qa/percona-distribution-postgresql/data/pgsql_load.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
-- ========================================
-- CREATE TABLES
-- ========================================

CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
birth_date DATE
);

CREATE TABLE classes (
class_id SERIAL PRIMARY KEY,
name VARCHAR(100),
teacher VARCHAR(100)
);

CREATE TABLE enrollments (
enrollment_id SERIAL PRIMARY KEY,
student_id INTEGER REFERENCES students(student_id),
class_id INTEGER REFERENCES classes(class_id),
enrollment_date DATE DEFAULT CURRENT_DATE
);

-- ========================================
-- INSERT MOCK DATA
-- ========================================

INSERT INTO students (first_name, last_name, birth_date) VALUES
('Alice', 'Smith', '2005-04-10'),
('Bob', 'Johnson', '2006-08-15'),
('Charlie', 'Brown', '2004-12-01');

INSERT INTO classes (name, teacher) VALUES
('Mathematics', 'Mrs. Taylor'),
('History', 'Mr. Anderson'),
('Science', 'Dr. Reynolds');

INSERT INTO enrollments (student_id, class_id) VALUES
(1, 1),
(1, 2),
(2, 2),
(3, 1),
(3, 3);

-- ========================================
-- SIMULATE DEAD TUPLES
-- ========================================


INSERT INTO students (first_name, last_name, birth_date)
SELECT 'John', 'Doe', CURRENT_DATE - (random() * 5000)::int
FROM generate_series(1, 100000);

-- These updates and deletes will create dead tuples

-- Update records (old versions become dead)
UPDATE students
SET last_name = last_name || '_updated'
WHERE student_id IN (1, 2);

-- Delete records (deleted rows become dead)
DELETE FROM enrollments
WHERE enrollment_id IN (SELECT enrollment_id FROM enrollments LIMIT 2);

-- Disable autovacuum temporarily (for demo)
ALTER TABLE students SET (autovacuum_enabled = false);
ALTER TABLE enrollments SET (autovacuum_enabled = false);

-- ========================================
-- SELECT QUERIES
-- ========================================

-- Get all students
SELECT * FROM students;

-- Get all students enrolled in Mathematics
SELECT s.first_name, s.last_name
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN classes c ON e.class_id = c.class_id
WHERE c.name = 'Mathematics';

-- Count students per class
SELECT c.name, COUNT(e.student_id) AS student_count
FROM classes c
LEFT JOIN enrollments e ON c.class_id = e.class_id
GROUP BY c.name;

-- ========================================
-- UPDATE QUERIES
-- ========================================

-- Change Bob's last name
UPDATE students
SET last_name = 'Williams'
WHERE first_name = 'Bob' AND last_name = 'Johnson';

-- Update the teacher for the History class
UPDATE classes
SET teacher = 'Ms. Carter'
WHERE name = 'History';

-- ========================================
-- DELETE QUERIES
-- ========================================

-- Remove Charlie from Science class
DELETE FROM enrollments
WHERE student_id = (SELECT student_id FROM students WHERE first_name = 'Charlie')
AND class_id = (SELECT class_id FROM classes WHERE name = 'Science');

-- Delete a student completely
DELETE FROM students
WHERE first_name = 'Alice' AND last_name = 'Smith';
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ max_wal_senders = 10
wal_keep_size = 64MB
hot_standby = on
listen_addresses = '*'
hba_file = '/etc/postgresql/pg_hba.conf'
hba_file = '/etc/postgresql/{{ pdpgsql_version }}/main/pg_hba.conf'
data_directory = '/var/lib/postgresql/{{ pdpgsql_version }}/main'
shared_preload_libraries = 'pg_stat_monitor'
track_activity_query_size=2048
track_io_timing=ON
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
hba_file = '/etc/postgresql/{{ pdpgsql_version }}/main/pg_hba.conf'
data_directory = '/var/lib/postgresql/{{ pdpgsql_version }}/main'
shared_preload_libraries = 'pg_stat_monitor'
track_activity_query_size=2048
track_io_timing=ON
max_connections=1000
listen_addresses = '*'
pg_stat_monitor.pgsm_enable_query_plan = 'yes'
pg_stat_monitor.pgsm_query_max_len = 2048
pg_stat_monitor.pgsm_normalized_query=1
pg_stat_monitor.pgsm_enable_query_plan=1
log_connections = on
log_disconnections = on
log_replication_commands = on
log_statement = 'all'
primary_slot_name = 'replica{{ item }}'
primary_conninfo = 'host={{ container_prefix }}1 user={{ replication_user }} password={{ replication_password }}'
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
hba_file = '/etc/postgresql/pg_hba.conf'
listen_addresses = '*'
hba_file = '/etc/postgresql/{{ pdpgsql_version }}/main/pg_hba.conf'
data_directory = '/var/lib/postgresql/{{ pdpgsql_version }}/main'
shared_preload_libraries = 'pg_stat_monitor'
track_activity_query_size=2048
track_io_timing=ON
max_connections=1000
listen_addresses = '*'
pg_stat_monitor.pgsm_enable_query_plan = 'yes'
pg_stat_monitor.pgsm_query_max_len = 2048
pg_stat_monitor.pgsm_normalized_query=1
pg_stat_monitor.pgsm_enable_query_plan=1
log_connections = on
log_disconnections = on
log_replication_commands = on
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
connection: local
gather_facts: yes
vars:
pg_version: "{{ lookup('env', 'PGSQL_VERSION') | default('17', true) }}"
pdpgsql_version: "{{ lookup('env', 'PDPGSQL_VERSION') | default('17', true) }}"
replication_user: "repl_user"
replication_password: "GRgrO9301RuF"
root_password: "GRgrO9301RuF"
pdpgsql_port: 5432
nodes_count: "{{ (lookup('env', 'NODES_COUNT') | default('2', true)) | int }}"
nodes_count: "{{ (lookup('env', 'NODES_COUNT') | default('1', true)) | int }}"
network_name: "pmm-qa"
data_dir: "{{ lookup('env', 'HOME') }}/pgsql_cluster_data"
pmm_server_ip: "{{ lookup('vars', 'extra_pmm_server_ip', default=lookup('env','PMM_SERVER_IP') | default('127.0.0.1', true) ) }}"
Expand All @@ -21,12 +21,21 @@
setup_type: "{{ lookup('env', 'SETUP_TYPE') }}"
random_service_name_value: ""
docker_repo: "percona/percona-distribution-postgresql"
container_prefix: "pdpgsql_pmm{{ (setup_type|default('')) and '_' ~ setup_type }}_{{ pdpgsql_version }}_"

tasks:
- name: Display binary log status for primary
- name: Display setup type selected
debug:
msg: "{{ setup_type }}"

- name: Create Docker network
shell: docker network create {{ network_name }}
ignore_errors: yes

- name: Install Percona Distribution for Postgres
include_tasks: tasks/install-percona-distribution-postgresql-single.yml
when: setup_type != "replication" and setup_type != "patroni"

- name: Install Percona Distribution for Postgres with Replication
include_tasks: tasks/percona-distribution-postgres-replication-setup.yml
when: setup_type == "replication"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
- name: Start containers for Percona Distribution for Postgresql
shell: |
docker run -d \
--name={{ container_prefix }}{{ item }} \
--restart=always \
--network {{ network_name }} \
-e POSTGRES_PASSWORD={{ root_password }} \
--privileged --cgroupns=host \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
-v /var/lib/containerd \
-p {{ pdpgsql_port + (item - 1) }}:5432 \
antmelekhin/docker-systemd:ubuntu-24.04
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Install dependencies
shell: |
docker exec {{ container_prefix }}{{ item }} apt-get update
docker exec {{ container_prefix }}{{ item }} apt-get -y install wget gnupg2 lsb-release curl
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Install Percona Release
shell: |
docker exec {{ container_prefix }}{{ item }} wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
docker exec {{ container_prefix }}{{ item }} dpkg -i ./percona-release_latest.generic_all.deb
docker exec {{ container_prefix }}{{ item }} percona-release enable ppg-{{ pdpgsql_version }}
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Install Percona Distribution for PostgreSQL
shell: |
docker exec -u root {{ container_prefix }}{{ item }} apt-get install -y percona-postgresql-{{ pdpgsql_version }} percona-pgbackrest percona-pg-stat-monitor{{ pdpgsql_version }}
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Start Percona distribution for Postgresql
shell: docker exec -u root {{ container_prefix }}{{ item }} systemctl start postgresql
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Wait 5 seconds for Percona Distribution for postgresql to start
pause:
seconds: 5
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
- name: Remove old data folders
shell: 'rm -fr {{ data_dir }}'

- name: Create data directories
file:
path: "{{ data_dir }}/node{{ item }}/data"
state: directory
mode: '0755'
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Generate pg_hba.conf for primary node
template:
src: data/pg_hba.conf.j2
dest: "{{ data_dir }}/node{{ item }}/pg_hba.conf"
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Generate postgres.conf for primary node
template:
src: data/postgresql-single.conf.j2
dest: "{{ data_dir }}/node1/postgresql.conf"

- name: Install Percona Distribution for Postgres
include_tasks: tasks/install-pdpgsql.yml

- name: Install pg stat monitor.
include_tasks: ./tasks/install_pg_stat-monitor.yml

- name: Install and add pmm client.
include_tasks: ../tasks/install_pmm_client.yml
vars:
container_name: "{{ container_prefix }}{{ item }}"
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Copy config files
shell: |
docker cp {{ data_dir }}/node{{ item }}/postgresql.conf {{ container_prefix }}{{ item }}:/etc/postgresql/{{ pdpgsql_version }}/main/postgresql.conf
docker cp {{ data_dir }}/node{{ item }}/pg_hba.conf {{ container_prefix }}{{ item }}:/etc/postgresql/{{ pdpgsql_version }}/main/pg_hba.conf
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Restart Percona distribution for Postgresql
shell: docker exec -u root {{ container_prefix }}{{ item }} systemctl restart postgresql
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Create PostgreSQL user 'pmm' with password and grant pg_monitor
shell: |
docker exec -u postgres {{ container_prefix }}{{ item }} psql -U postgres -d {{ db_name | default('postgres') }} -c "
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'pmm') THEN
CREATE ROLE pmm LOGIN PASSWORD 'pmm';
END IF;
GRANT pg_monitor TO pmm;
END
\$\$;
"
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Add service to pmm server
shell: |
docker exec {{ container_prefix }}{{ item }} pmm-admin add postgresql --username=pmm --password=pmm --cluster=pdpgsql_replication_cluster --environment=pdpgsql_replication_environment --query-source=pgstatmonitor {{ container_prefix }}{{ item }}{{ random_service_name_value }} --debug 127.0.0.1:5432
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Run queries for generating data
shell: docker exec {{ container_prefix }}{{ item }} bash ./data/pgsm_run_queries.sh &
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Copy a file into the container
shell: docker cp ./data/pgsql_load.sql {{ container_prefix }}{{ item }}:/pgsql_load.sql
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Create database if it doesn't exist
shell: docker exec {{ container_prefix }}{{ item }} psql -U postgres -c "CREATE DATABASE school;"
loop: "{{ range(1, nodes_count | int + 1) | list }}"

- name: Run SQL script using docker exec
shell: docker exec {{ container_prefix }}{{ item }} psql -U postgres -d school -f /pgsql_load.sql > /dev/null
loop: "{{ range(1, nodes_count | int + 1) | list }}"
Loading