Pull to refresh

Drop Chunks Timescaledb без TIMESTAMP

Не самый элегатный способ, но возможно кому-то пригодится данная конструкция.

Удаление на примере базы для Zabbix - оставляет 50 чанков, количество для сохранения чанков указываем в конвеере awk '{ count = $1 - 51; print count }' n+1

таблица history_uint:

lschk_h_u=$(sudo -u postgres psql -d zabbix -c "SELECT public.show_chunks('history_uint');" 2> /dev/null | sed '1,2d'); count_lschk_h_u=$(echo "$lschk_h_u" | wc -l | awk '{ count = $1 - 51; print count }' | sed 's/^-.*/0/'); echo "$lschk_h_u" | head -n $count_lschk_h_u | awk '{CMD = "sudo -u postgres psql -d zabbix -c \"DROP TABLE " $1 ";\" 2> /dev/null"; system(CMD); }' ; unset lschk_h_u; unset count_lschk_h_u

таблица history:

lschk_h=$(sudo -u postgres psql -d zabbix -c "SELECT public.show_chunks('history');" 2> /dev/null | sed '1,2d'); count_lschk_h=$(echo "$lschk_h" | wc -l | awk '{ count = $1 - 51; print count }' | sed 's/^-.*/0/'); echo "$lschk_h" | head -n $count_lschk_h | awk '{CMD = "sudo -u postgres psql -d zabbix -c \"DROP TABLE " $1 ";\" 2> /dev/null"; system(CMD); }' ; unset lschk_h; unset count_lschk_h

эта команда выполняет следующие действия:

- Загружает список чанков (фрагментов данных) для таблицы `history` в переменную `lschk_h`.

- Вычисляет количество строк, которые необходимо удалить (в переменной `count_lschk_h`).

- Удаляет указанное количество таблиц, используя команду `DROP TABLE` в PostgreSQL для каждой таблицы из списка чанков.

Подробное описание команды

Эта команда выполняет несколько операций для удаления таблиц в базе данных PostgreSQL.

1. `lschk_h=$(sudo -u postgres psql -d zabbix -c "SELECT public.show_chunks('history');" 2> /dev/null | sed '1,2d')`:

- `sudo -u postgres` позволяет выполнять команду от имени пользователя `postgres`, который обычно используется для администрирования PostgreSQL.

- `psql -d zabbix` открывает соединение с базой данных `zabbix`.

- `SELECT public.show_chunks('history');` выполняет SQL-запрос `show_chunks('history')` в схеме `public`. Эта функция возвращает список чанков (фрагментов данных) для таблицы `history`.

- `2> /dev/null` перенаправляет сообщения об ошибках в `/dev/null`, чтобы они не выводились на экран.

- `sed '1,2d'` удаляет первые две строки вывода. Необходимо для удаления заголовков и другой лишней информации.

2. `count_lschk_h=$(echo "$lschk_h" | wc -l | awk '{ count = $1 - 51; print count }' | sed 's/^-.*/0/')`:

- `echo "$lschk_h"` выводит содержимое переменной `lschk_h`.

- `wc -l` считает количество строк в выводе.

- `awk '{ count = $1 - 51; print count }'` вычитает 51 из количества строк и выводит результат. Значение n+1 где n количество чанков для сохранения.

- `sed 's/^-.*/0/'` заменяет отрицательные значения на 0.

3. `echo "$lschk_h" | head -n $count_lschk_h | awk '{CMD = "sudo -u postgres psql -d zabbix -c \"DROP TABLE " $1 ";\" 2> /dev/null"; system(CMD); }'`:

- `echo "$lschk_h"` выводит содержимое переменной `lschk_h`.

- `head -n $count_lschk_h` отображает только первые `$count_lschk_h` строк.

- `awk '{CMD = "sudo -u postgres psql -d zabbix -c \"DROP TABLE " $1 ";\" 2> /dev/null"; system(CMD); }'` выполняет команду для каждой строки. Команда выполняется с использованием `sudo -u postgres` и выполняет SQL-запрос `DROP TABLE <table_name>` для каждой таблицы, указанной в строке.

4. `unset lschk_h; unset count_lschk_h`

очищает переменные `lschk_h` и `count_lschk_h` после выполнения команды.

P.s. Не забудьте учитывать сортировку вывода show_chunks в каждом отдельном случаи, а также именование chunks, в примере имя chunks выглядит так: _timescaledb_internal._hyper_2_2529_chunk

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.