我在数据库中创建了一个将记录插入表中的函数。此函数返回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');
任何人都有任何想法为什么会失败以及有关修复的建议?
谢谢!
答案 0 :(得分:0)
您似乎需要尝试using foo::bar::Lexeme
而不是SELECT * FROM dblink(...) AS t1(column_name type)
。
该函数返回查询生成的行。由于dblink可以与任何查询一起使用,因此它被声明为返回记录,而不是指定任何特定的列集。这意味着您必须在调用查询中指定预期的列集 - 否则PostgreSQL将不知道会发生什么。这是一个例子:
SELECT dblink(...)