【发布时间】:2014-06-11 16:53:41
【问题描述】:
我正在从 postgresql 中的触发函数调用 bash 脚本。在 SQL 中更新表中的值(log_interval)后调用该脚本。
从调用的脚本中的表中读取更改的值(log_interval)并存储在文件(interval.txt)中。如果我打开文件,我会看到 log_interval 的旧值,而不是 interval.txt 文件中的新值。
下面是我正在使用的代码 sn-p:
触发功能:
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 不熟悉。让我知道解决方案。提前致谢。
【问题讨论】:
-
使用 PL/SH 并从服务器调用 shell 脚本通常是一个非常糟糕的主意。尽可能使用
LISTEN和NOTIFY来获得一个辅助守护进程来代替。
标签: bash postgresql postgresql-9.1