Postgresql 9.6,使用数据包装器调用远程函数会引发各种错误

时间:2018-04-26 21:16:24

标签: postgresql dblink foreign-data-wrapper

我在数据库中创建了一个将记录插入表中的函数。此函数返回VOID并将VARIADIC文本数组作为输入参数。当我在本地运行数据库中的函数时,它可以正常工作。

但是当我尝试从不同的数据库运行时,使用外部数据包装器它将无法工作,根据我使用的方法抛出不同的错误。

以下是我打电话的方式:

SELECT dblink('pg_log', 
'SELECT public.insert_log(''usage'', ''txn'', ''dimensions'', ''test'', null, 
''pgwrapper'', ''temp_var'', null,  null, null, ''Start'', null, 
                     null, null, null);');

那个引发了这个错误:

  

函数返回在上下文中调用的记录,该记录不能接受类型记录

当我用PERFORM dblink替换Select dblink时,我收到此错误:

  “PERFORM”或附近的

语法错误

当我尝试时,选择dblink_exec:

我收到此错误:

  

语句返回结果不允许

同样,该函数可以正常工作,因为我在本地调用它来测试它,并且它可以完成它应该做的事情。

我检查了与此连接,然后返回OK:

SELECT dblink_connect('pg_log');

任何人都有任何想法为什么会失败以及有关修复的建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

您似乎需要尝试using foo::bar::Lexeme而不是SELECT * FROM dblink(...) AS t1(column_name type)

来自PostgresSQL Documenation:

该函数返回查询生成的行。由于dblink可以与任何查询一起使用,因此它被声明为返回记录,而不是指定任何特定的列集。这意味着您必须在调用查询中指定预期的列集 - 否则PostgreSQL将不知道会发生什么。这是一个例子:

SELECT dblink(...)