Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql PSQL:使函数调用的输出静音,或在没有选择的情况下调用它_Postgresql - Fatal编程技术网

Postgresql PSQL:使函数调用的输出静音,或在没有选择的情况下调用它

Postgresql PSQL:使函数调用的输出静音,或在没有选择的情况下调用它,postgresql,Postgresql,在Postgresql中,我对一个表有一个更新规则,它只需要调用一个dctUpdate函数,而不需要执行整个SQL语句,因为SQL语句实际上是在函数中完成的。我知道调用该函数的唯一方法是通过选择dctUpdatewindowId: 但是,在命令行上,当由于我更新了某个_表中的一行而触发该规则时,我会从调用函数的SELECT子句中获得无用的输出: db=# update some_table set name = 'foobar' where window_id = 1; infoupdate

在Postgresql中,我对一个表有一个更新规则,它只需要调用一个dctUpdate函数,而不需要执行整个SQL语句,因为SQL语句实际上是在函数中完成的。我知道调用该函数的唯一方法是通过选择dctUpdatewindowId:

但是,在命令行上,当由于我更新了某个_表中的一行而触发该规则时,我会从调用函数的SELECT子句中获得无用的输出:

db=# update some_table set name = 'foobar' where window_id = 1;
 infoupdate 
-----------

(1 row)

UPDATE 1

有没有一种方法可以让info\u update\u rule在不显示虚拟输出的情况下调用infoUpdate函数?

我没有找到使用规则实现此功能的选项,但有另一种方法可以实现此usign触发器

因此,您将触发器函数定义如下:

CREATE OR REPLACE FUNCTION ur_wrapper_trg()
  RETURNS trigger AS
$BODY$
begin
    perform infoUpdate(NEW.window_id);
    RETURN NEW;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION ur_wrapper_trg() OWNER TO postgres;
注意:使用了语法。此语法与SELECT语法相同,只是它禁止所有输出

然后定义一个触发器

CREATE TRIGGER some_table_utrg
  BEFORE UPDATE
  ON some_table
  FOR EACH ROW
  EXECUTE PROCEDURE ur_wrapper_trg();
最后,你会记住你的规则

没有使用null进行测试,但是使用实际的windos_ID可以正常工作,没有任何不需要的输出


有关详细说明,请咨询和。

我的解决方案是在select函数之前和之后调用\t\a。唯一剩下的是每次调用都有一个新行。

如果新窗口id为空,您真的要将整个表中的所有时间戳都设置为现在吗?您需要支持哪些版本的PostgreSQL?@mu:是的,我的意思是将所有时间戳设置为NULL,并且我支持PostgreSQL 9.0,出于性能原因,upI不能使用触发器。此规则将应用于更新任务关键型系统上数千行的查询,并且为每一行调用触发器的成本太高,这就是我必须使用规则的原因。我仍然更喜欢获得垃圾输出,而不是受到性能的影响。
CREATE TRIGGER some_table_utrg
  BEFORE UPDATE
  ON some_table
  FOR EACH ROW
  EXECUTE PROCEDURE ur_wrapper_trg();