我从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的新手。让我知道解决方案。提前谢谢。
答案 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