我很难找到一个可以接受两个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函数,但不能接受两个。
答案 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
的代码我们必须将表x的所有值存储到变量x中。请参阅以下代码
x <- dbGetQuery(con, "SELECT * from sandbox.x")
--con是连接到数据库的连接,sandbox是模式名称,x是表名
将表y的值存储到变量y
中 y<-dbGetQuery(con, "SELECT * from sandbox.y")
合并2个表
total <- merge(x,y,by="a")
您还可以编写另一个函数来包装合并函数,请参阅下面的代码
myTotal <- function(x,y) {
result <- merge(x,y,by="a")
return(result)
}
我附上了步骤的屏幕截图供您参考