22 апреля 2021 26 августа 2022 СуБД Postgresql psql bash awk for drop table cascade | решать тесты

  • Знаете ли вы другой способ удаления группы таблиц в Postgres


Скрипт каскадного удаления таблиц в psql
 

for t in $(echo '\dt' | psql $data_base |awk -F\| '{print $2}'); do 
    echo "drop table $t cascade;" ; 
done | psql $data_base

Суть скрипта проста:

  • echo '\dt' | psql $database # выводит список таблиц базы данных из переменной $database
  • awk -F\| '{print $2}' # вывести второй столбец из списка
  • do echo "drop table $t cascade;" ; done # тело цикла формирующее набор SQL команд
  • | psql $database # выполнить SQL код

13 апреля 2021 22 апреля 2021 Bash bash curl check 404 | решать тесты

  • Зачем нужна опция -q при использования утилиты curl


Список ссылок размещён в файле /tmp/pdf.csv
 

for u in $(cat /tmp/pdf.csv); do 
curl -I $u 2> /dev/null | grep 'HTTP/1.1 404' -q && echo 404 `basename $u` || echo ok `basename $u`  
done

 


04 января 2018 05 января 2018 Linux uuencode mysqldump bash


Создание резервных копий необходимо для обеспечения восстановления работы базы данных в случае системного сбоя. Самой простой методикой является периодический запуск скрипт делающего дамп базы данных на сервере с сохранением результатов на сервере. Такая методика прекрасно работает до тех пор пока работает сервер. Может случится ситуация когда с сервером что-то случилось и невозможно восстановить данные из его файловой системы. Обычно, для решения  этой проблемы хостеры предлагают использовать внешний FTP сервер и обычно они требуют за него деньги. То-есть скрипт должен закачивать созданный дамп базы данных на другой сервер по протоколу FTP.

Но нам ни кто не мешает поступить следующим образом, полученный дамп базы данных сжимается архиватором (для уменьшения размера), а затем полученный архив отсылается на почту администратора сайта, например на gmail. А для того чтобы не захламлять почтоый ящик регулярными дампами можно настроить ящик так, чтобы он письма с дампом базы данных перекладывал в спам. Таким образом, письмо не мешает работать с почтой и гмайл самостоятельно удаляет слишком старый спам и у вас всегда будет доступна самая актульаня версия базы данных, а устаревшие будут автоматически удаляться. Даже если не настраивать перенос писем в спам, то можно удалять письмо и оно автоматически будет удаленно через n-дней, так уж устроен gmail

У меня на одной базе данных проявилась проблема, так как база данных получалась слишком большая из-за таблицы которая хранила тексты входящей почты. Эти данные не являются актульными и я просто не включал их в дамп базы данных с помощью опции --ignore-table

Таким образом у меня получился вот такой скрипт

#!/bin/bash

site_name="site-name.ru" # переменная с именем проекта

# формирование имения файла дампа с датой
file_base_name="/home/$site_name/backup/$site_name-`date +%F`.sql.bz2"

# создание дампа резервной копии
mysqldump -u логин -pпароль $site_name --ignore-table $site_name.mails | bzip2  > $file_base_name

# отправка дампа на почту
uuencode  $file_base_name  $file_base_name | mail -s "backup $site_name `date '+%Y-%m-%d'`" admin@gmail.com

# удаление резервных копий старше 7 дней
find /home/$site_name/backup/ -ctime +7 -delete

#PS, утилита uuencode входит в состав пакета sharutils

 


28 декабря 2017 07 января 2018 Bash Bash mkdir


Когда сервере  необходимо на создать иерархию директорий то можно открыть mc и 23 раз запустить диалог создания директори или ручками создать всё что нужно с помощью команды mkdir, создать 3 родительских директории media/ , media/pages/ и media/products/ а затем ещё 20 раз для каждой директории

либо воспользоваться возможностями интерпретатора bash введя вот такие команды

mkdir -p media/pages/{0,1,2,3,4,5,6,7,8,9}  media/products/{0..9}

тут в одной строке используются два способа задать диапазон и очевидно, что второй лаконичнее и удобнее

(venv3)python@breys ❄  ls -R media/
media/:
pages  products

media/pages:
0  1  2  3  4  5  6  7  8  9

media/pages/0:
media/pages/1:
media/pages/2:
media/pages/3:
media/pages/4:
media/pages/5:
media/pages/6:
media/pages/7:
media/pages/8:
media/pages/9:
media/products:
0  1  2  3  4  5  6  7  8  9

media/products/0:
media/products/1:
media/products/2:
media/products/3:
media/products/4:
media/products/5:
media/products/6:
media/products/7:
media/products/8:
media/products/9: