अस्वीकरण: मैं उसी प्रोजेक्ट पर एंड्रियास फ्रित्श के साथ काम करता हूं।
हमने इस समस्या को निम्नलिखित तरीके से हल किया है।
एक "Language" -extension PostgreSQL के लिए PL/sh प्रक्रियात्मक भाषा हैंडलर है पीटर एसेंट्राउट द्वारा कोडित जो ठीक वही करता है जो हमें चाहिए।
आप एक शेल-स्क्रिप्ट को इस तरह परिभाषित करते हैं:
CREATE or REPLACE FUNCTION test(text) RETURNS text AS '
#!/bin/bash
echo Test: $1 is working
' LANGUAGE plsh;
यह ट्रिगर के लिए कुछ उपयोगी पर्यावरण-चर के साथ ट्रिगर-फ़ंक्शन का एक उदाहरण है:
CREATE or REPLACE FUNCTION TriggerTest() RETURNS trigger AS $$
#!/bin/bash
#mkdir /has/triggertest/$PLSH_TG_NAME
cd /has/triggertest
touch PLSH_TG_NAME-$PLSH_TG_NAME
touch PLSH_TG_WHEN-$PLSH_TG_WHEN
touch PLSH_TG_LEVEL-$PLSH_TG_LEVEL
touch PLSH_TG_OP-$PLSH_TG_OP
touch PLSH_TG_TABLE_NAME-$PLSH_TG_TABLE_NAME
touch PLSH_TG_TABLE_SCHEMA-$PLSH_TG_TABLE_SCHEMA
touch new-$new.x
#touch "arg-0-'$0'"
touch "arg-1-'$1'"
touch "arg-2-'$2'"
touch "arg-3-'$3'"
touch "arg-4-'$4'"
for arg do
touch "Arg is '$arg'"
done
exit 0
$$ LANGUAGE plsh;
आप निम्न SQL-विवरण के साथ एक पहले-सम्मिलित-ट्रिगर बनाते हैं
CREATE TRIGGER tbefore BEFORE INSERT OR UPDATE OR DELETE ON ttest2
FOR EACH ROW EXECUTE PROCEDURE TriggerTest(new);
मुझे उम्मीद है कि यह किसी और की मदद करेगा जो अपनी समस्या के लिए इसी तरह के समाधान की तलाश में है।