Re: очень хочется squirrelsh
Hello!
On Wednesday 20 January 2010 08:45:09 Denis Feklushkin wrote:
> On Tue, 19 Jan 2010 03:20:31 +0300
> Stanislav Maslovski <stanislav.maslovski@gmail.com> wrote:
> > Зачем тебе оно? Что ты им хочешь заменить? И для каких задач?
>
> конкретно сейчас мне нужно написать простой демон (или аналогичную программу для вызова из inittab), которая бы:
> постоянно была подключена к postgres
> ловила там NOTIFY
> делала запрос в базу
> в зависимости от ответа либо запускала (exec) программу либо отправляла е-майл в почту админу
>
> Все действия она должна сопровождать подробной записью в stdout/stderr для последующего разбора полётов если что
>
> написал пока что на половину этого питоне, питон ужасен (не тролль, но форматирование отступами это такой маразм что просто я не знаю какую вирмешель в голове надо было иметь чтобы такое придумать)
>
Ну так это решается много проще. Пример trigger-based репликации постгреса в эскулайт:
==========================
CREATE OR REPLACE FUNCTION offline.files_sqlite3()
RETURNS "trigger" AS
$BODY$
set t1 [clock clicks]
load /usr/lib/tcltk/sqlite3/libtclsqlite3.so sqlite3
set db_file /var/www/offline1/res/dataset/work.db
sqlite3 db $db_file
db timeout 4000
# db eval {PRAGMA journal_mode = PERSIST}
if { $TG_op eq "INSERT" } {
set save_date [string range $NEW(save_date) 0 18]
db eval {insert into document_file (id,save_date,document_id,user_id,name,size,checksum)
values ($NEW(id),julianday($save_date,'-3 hour'),$NEW(document_id),$NEW(user_id),$NEW(name),$NEW(size),$NEW(checksum))}
} elseif { $TG_op eq "UPDATE"} {
} elseif { $TG_op eq "DELETE"} {
db eval {update document_file set delete_date=julianday('now') where id=$OLD(id)}
}
db close
set t2 [clock clicks]
set t [expr ($t2-$t1)/1000]
elog NOTICE "SQLITE trigger document_file: $t ms"
return OK
$BODY$
LANGUAGE 'pltclu' VOLATILE SECURITY DEFINER;
ALTER FUNCTION offline.files_sqlite3() OWNER TO offline;
CREATE TRIGGER trigger_files_sqlite3
AFTER INSERT OR UPDATE OR DELETE
ON offline.files
FOR EACH ROW
EXECUTE PROCEDURE offline.files_sqlite3();
==========================
Более того, можно на шелле триггеры писать:
$ aptitude show postgresql-8.3-plsh
Package: postgresql-8.3-plsh
Depends: libc6 (>= 2.7-1), postgresql-8.3
Description: PL/sh procedural language for PostgreSQL 8.3
PL/sh enables an SQL developer to write procedural language functions for PostgreSQL 8.3 in a shell of his choice. You need this package if you have any PostgreSQL 8.3 functions that use
the language plsh.
Best regards, Alexey Pechnikov.
http://pechnikov.tel/
Reply to: