|
109 | 109 |
|
110 | 110 | CREATE OR REPLACE FUNCTION mamonsu.archive_command_files()
|
111 | 111 | RETURNS TABLE(COUNT_FILES BIGINT, SIZE_FILES BIGINT) AS $$
|
112 |
| -WITH segment_parts_count AS |
113 |
| -(SELECT 4096/(setting::bigint/1024/1024) AS value FROM pg_settings |
114 |
| -WHERE name = 'wal_segment_size'), |
115 |
| -segment_size AS |
116 |
| -(SELECT setting::bigint AS value FROM pg_settings |
117 |
| -WHERE name = 'wal_segment_size'), |
118 |
| -last_wal_div AS |
119 |
| -(SELECT ('x' || substring(last_archived_wal from 9 for 8))::bit(32)::int AS value |
120 |
| -FROM pg_stat_archiver), |
121 |
| -last_wal_mod AS |
122 |
| -(SELECT ('x' || substring(last_archived_wal from 17 for 8))::bit(32)::int AS value |
123 |
| -FROM pg_stat_archiver), |
124 |
| -current_wal_div AS |
125 |
| -(SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 9 for 8))::bit(32)::int AS value), |
126 |
| -current_wal_mod AS |
127 |
| -(SELECT ('x' || substring(pg_walfile_name(pg_current_wal_lsn()) from 17 for 8))::bit(32)::int AS value) |
128 |
| -SELECT greatest(coalesce((segment_parts_count.value - last_wal_mod.value) + ((current_wal_div.value - last_wal_div.value - 1) * segment_parts_count.value) + current_wal_mod.value - 1, 0), 0) AS count_files, |
129 |
| -greatest(coalesce(((segment_parts_count.value - last_wal_mod.value) + ((current_wal_div.value - last_wal_div.value - 1) * segment_parts_count.value) + current_wal_mod.value - 1) * segment_size.value, 0), 0) AS size_files |
130 |
| -FROM segment_parts_count, segment_size, last_wal_div, last_wal_mod, current_wal_div, current_wal_mod |
| 112 | +WITH values AS ( |
| 113 | +SELECT |
| 114 | +4096/(pg_settings.setting::bigint/1024/1024) AS segment_parts_count, |
| 115 | +setting::bigint AS segment_size, |
| 116 | +('x' || substring(pg_stat_archiver.last_archived_wal from 9 for 8))::bit(32)::int AS last_wal_div, |
| 117 | +('x' || substring(pg_stat_archiver.last_archived_wal from 17 for 8))::bit(32)::int AS last_wal_mod, |
| 118 | +CASE WHEN pg_is_in_recovery() THEN NULL ELSE |
| 119 | +('x' || substring(pg_{10}_name(pg_current_{4}()) from 9 for 8))::bit(32)::int END AS current_wal_div, |
| 120 | +CASE WHEN pg_is_in_recovery() THEN NULL ELSE |
| 121 | +('x' || substring(pg_{10}_name(pg_current_{4}()) from 17 for 8))::bit(32)::int END AS current_wal_mod |
| 122 | +FROM pg_settings, pg_stat_archiver |
| 123 | +WHERE pg_settings.name = 'wal_segment_size') |
| 124 | +SELECT greatest(coalesce((segment_parts_count - last_wal_mod) + ((current_wal_div - last_wal_div - 1) * segment_parts_count) + current_wal_mod - 1, 0), 0) AS count_files, |
| 125 | +greatest(coalesce(((segment_parts_count - last_wal_mod) + ((current_wal_div - last_wal_div - 1) * segment_parts_count) + current_wal_mod - 1) * segment_size, 0), 0) AS size_files |
| 126 | +FROM values |
131 | 127 | $$ LANGUAGE SQL SECURITY DEFINER;
|
132 | 128 |
|
133 | 129 | CREATE OR REPLACE FUNCTION mamonsu.archive_stat()
|
|
0 commit comments