5

我正在努力寻找可以接受两个 postgres 表的 PL/R 函数的示例。PL/R 文档没有提供任何此类示例。
为了有一个工作示例,让我们考虑在 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 函数。

4

1 回答 1

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) }

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

在此处输入图像描述

于 2016-03-22T20:18:44.250 回答