Bash:从postgresql触发器函数调用bash脚本

时间:2014-06-11 16:53:41

标签: bash postgresql postgresql-9.1

我从postgresql中的触发器函数调用bash脚本。在SQL中更新表(log_interval)后调用该脚本。

从调用的脚本中的表中读取更改的值(log_interval)并将其存储在文件(interval.txt)中。如果我打开文件,我会看到log_interval的旧值,而不是interval.txt文件中的新值。

以下是我正在使用的代码段:

触发功能:

CREATE OR REPLACE FUNCTION update_upload_interval()
RETURNS trigger AS
$BODY$
#!/bin/sh
exec /home/User/ReadInterval.sh &
$BODY$
LANGUAGE plsh VOLATILE

触发:

CREATE TRIGGER assign_new_interval
AFTER UPDATE OF log_interval
ON table_interval
FOR EACH ROW
WHEN ((old.log_interval IS DISTINCT FROM new.log_interval))
EXECUTE PROCEDURE update_upload_interval();

脚本代码:

function readinterval() {
logperiod=$(psql -c "select log_interval from table_interval where id=1;" -t  $database_name)
echo "$logperiod" > /home/User/interval.txt
}

是脚本和使用SQL的新手。让我知道解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:1)

除非此处没有显示更多代码,否则只需调用ReadInterval.sh就不会做任何事情,因为它只是一个函数声明。此外,还有一个未设置的变量$database_name

CREATE OR REPLACE FUNCTION update_upload_interval()
RETURNS trigger AS
$BODY$
#!/bin/sh
database_name=???
psql -c "select log_interval from table_interval where id=1;" -t  $database_name > /home/User/interval.txt
$BODY$
LANGUAGE plsh VOLATILE