Hello! On Wednesday 20 January 2010 08:45:09 Denis Feklushkin wrote: > On Tue, 19 Jan 2010 03:20:31 +0300 > Stanislav Maslovski <stanislav.maslov...@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/