在 postgres 9.4 中使用触发器执行外部程序

execute external program with trigger in postgres 9.4

我正在寻找一种在使用触发器更新或插入后执行系统命令的方法。我希望 postgres 可以做到这一点。 可能吗?

CREATE TRIGGER check_update
AFTER UPDATE ON allowed_member_type
FOR EACH ROW
EXECUTE PROCEDURE check_account_update();

提前致谢

免责声明:我和 Andreas Fritsch 在同一个项目上工作。

我们已经通过以下方式解决了这个问题。

有一个由 Peter Eisentraut 编码的 "Language"-扩展 PL/sh Procedural Language Handler for PostgreSQL,它正是我们需要的。

你这样定义一个 shell-script:

CREATE or REPLACE FUNCTION test(text) RETURNS text AS '
#!/bin/bash
echo Test:  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-'[=11=]'"
touch "arg-1-''"
touch "arg-2-''"
touch "arg-3-''"
touch "arg-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);

我希望这对正在为他的问题寻找类似解决方案的其他人有所帮助。