PL / R函数接受两个表作为参数

时间:2016-03-19 15:56:05

标签: r postgresql plpgsql plr

我很难找到一个可以接受两个postgres表的PL / R函数的例子。 PL/R docs没有提供任何此类示例 要有一个工作示例,我们可以考虑在R端使用两个postgres表的合并。

在postgres中有两个表

CREATE TABLE x (a numeric, b text);
CREATE TABLE y (a numeric, d text);
INSERT INTO x VALUES (1, 'a'),(2, 'b');
INSERT INTO y VALUES (2, 'b'),(3, 'c');

我希望替换以下查询

SELECT * FROM x INNER JOIN y ON x.a=y.a;

将R /中定义的PL / R函数设为:

my_function = function(x, y){
    merge(x, y, by = "a")
}

我能够调用接受单个表的PL / R函数,但不能接受两个。

1 个答案:

答案 0 :(得分:2)

我不认为postgeql可以接受真实表作为参数。

但还有另一种方法可以做到这一点。您可以将表名作为参数传递 这是函数

CREATE OR REPLACE FUNCTION merge(t1 text, t2 text)
returns setof x as 
   BEGIN
     execute 'select * from ' || t1 ||' join ' || t2 || ' on t1.a=t2.a';
   END

以上是postgresql的功能,它也可以写在R函数中 这是R

的代码
  1. 我们必须将表x的所有值存储到变量x中。请参阅以下代码

    x <- dbGetQuery(con, "SELECT * from sandbox.x") --con是连接到数据库的连接,sandbox是模式名称,x是表名

  2. 将表y的值存储到变量y

    y<-dbGetQuery(con, "SELECT * from sandbox.y")

  3. 合并2个表

    total <- merge(x,y,by="a")

  4. 您还可以编写另一个函数来包装合并函数,请参阅下面的代码

    myTotal <- function(x,y) {      result <- merge(x,y,by="a")       return(result)     }

  5. 我附上了步骤的屏幕截图供您参考

    enter image description here