Как стать автором
Поиск
Написать публикацию
Обновить

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

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.