Crontab

Postgresql’in gömülü gelen bir zamanlayıcısı (scheduler) bulunmadığı için bu ihtiyaç
pg_cron ve pgagent eklentileri (extension) ile ya da işletim sistemi seviyesinde
crontab ile çözülmektedir.

Çalıştırılacak SQL, fonksiyon prosedur vb. kodlar linux bash script içerisine yazılıp linux
işletim sisteminin gömülü zamanlayıcısı crontab ile zamanlanabilir.

psql -d testdb
# Eğer önceden oluşturuldu ise
drop table test ;
CREATE TABLE test (id serial, isim text);

Örnek Script

vim /var/lib/postgresql/scripts/instest.sh

#!/bin/bash
PSQL="/usr/lib/postgresql/14/bin/psql"
PORT=5432
HOST="localhost"
USER="postgres"
DB="testdb"
$PSQL -d $DB -U $USER -p $PORT <<EOF
INSERT INTO test (isim) SELECT 'Mehmed' FROM generate_series(1, 5);
\q
EOF
exit

chmod +x /var/lib/postgresql/scripts/instest.sh ile çalıştırma hakkı verilmelidir.

Not: insert işleminin hatalı sonuçlanması durumunda vty@dataera ekibine mail ile
uyarı gönderilmesi için aşağıdaki satırlar eklenebilir.

if [ $? -eq 0 ]; then
echo ‘işlem başarılı’
else
echo "Müşteri-Sunucu-Bilgisi" | mailx -s "Veri girişi
hata aldı" -a "From: UYARICI@dataera.com.tr" vty@dataera.com.tr
exit
fi

Not: Micosoft sistemlerden linux/unix sistemlere kopyalanan scriptler anlamsız hatalar
verip çalışmayabilir. Bu durumda dos2unix yazılımı ile scriptinizi konvert etmeniz
gerekebilir.

sudo apt install dos2unix
dos2unix instest.sh

# postgres kullanıcısı ile aşağıdaki satır eklenir kayıt edilir
ve çıkılır.
postgres@srv1:~$ crontab -e
6 22 * * * /var/lib/postgresql/scripts/instest.sh 2> /var/lib/
postgresql/scripts/instest.log
crontab -l # crontab’ı listeleyebilirsiniz.

Her gün akşam 22:06’da instest.sh scriptini çalıştırır hata alırsa (2>) hatayı
instest.log dosyasına yazar. Crontab’taki satırı manuel tetikleyerek test edilmesi
önerilir.

Crontab ile ilgili detaylar için kullandığınız işletim sisteminin dokümanlarını
inceleyebilirsiniz.

Not: Eğer vim uygulaması ile açmıyorsa, aşağıdaki komutlar çalıştırılabilir.
export EDITOR=vim

Kategori seçin...