从脚本中内联调用INSERT函数

时间:2016-09-22 21:06:54

标签: postgresql

我目前正在使用Postgres,我想创建一个connivence函数来减少我的脚本中的一些重复。

我有一个定义如下的函数:

CREATE FUNCTION add_entry(i smallint, m varchar, t varchar) RETURNS VOID AS $$
  BEGIN
    INSERT INTO metrics(id, medium, metric) VALUES (i, m, t);
  END
$$ LANGUAGE 'plpgsql';

然后我想在我的脚本中调用该函数,如下所示:

SELECT add_entry(3, "hello", "world");

当我在脚本开头使用函数定义调用脚本,然后调用该函数时,会产生以下错误:

psql:static-data.sql:7: ERROR:  function "add_entry" already exists with same argument types
SELECT "add_entry"(3, "hello", "world");
psql:static-data.sql:9: ERROR:  column "hello" does not exist
LINE 1: SELECT "add_entry"(3, "hello", "world");

问题出现在我调用函数时,它的行为类似于函数的重新定义。

如何解决此问题并直接调用该函数?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您只需创建一次该功能。您可以这样想:函数是模式的一部分,就像表一样。每次运行脚本时都不会创建表,那么为什么每次都要创建函数呢?

现在,如果您真的必须重新定义该功能,您可以这样做:

CREATE OR REPLACE FUNCTION add_entry...

这将删除旧定义并在其位置创建一个新定义。