gpt4 book ai didi

postgresql - 错误 : a column definition list is required for functions in dblink using PostgreSQL 9. 3

转载 作者:行者123 更新时间:2023-11-29 11:32:49 25 4
gpt4 key购买 nike

我有以下功能:

我在其中通过使用 dblink() 加入另一个数据库表来更新一个数据库表。

我已经安装了:

create extension dblink;

更多细节如下图:

CREATE OR REPLACE FUNCTION Fun_test
(
Table_Name varchar
)
RETURNS void AS

$BODY$

DECLARE
dynamic_statement varchar;

BEGIN
perform dblink_connect('port=5234 dbname=testdb user=postgres password=****');


dynamic_statement := 'With CTE AS
(
Select HNumber,JoiningDate,Name,Address
From '|| Table_Name ||'c
)
, Test_A
AS
(
Select Row_Number() over ( Partition by PNumber order by Date1 Desc,Date2 Desc) AS roNum,
Name,PNumber,Date1,Address
From dblink(
''Select distinct PNumber,
(
case when fname is null then '' else fname end || '' ||
case when lname is null then '' else lname end
) as FullName,
Address,
Date1,Date2
From testdb_Table
inner join CTE on CTE.HNumber = PNumber''
) Num
)
Update CTE
Set
Name = Test_A.FullName
,SubAddress_A = Test_A.Address
,Date1 = Test_A.Date1
from CTE
left outer join Test_A on
CTE.HNumber= Test_A.PNumber
where roNum =1';

RAISE INFO '%',dynamic_statement;

EXECUTE dynamic_statement;

perform dblink_disconnect();
END;

$BODY$

LANGUAGE PLPGSQL;

调用函数:

select fun_test('test1');

出现错误:

ERROR:  a column definition list is required for functions returning "record"
LINE 11: From dblink
^

最佳答案

您必须告诉 PostgreSQL dblink 查询将返回哪些列。

有关详细信息,请参阅 dblink 的手册。

这与返回运行时确定的 record 类型的任何函数相同。如果不告诉 PostgreSQL 结果的列布局是什么,您就无法查询它。

您使用列说明符列表,例如

SELECT * FROM my_function_returning_record() f(col1 text, col2 integer);

如果您使用的是当前的 PostgreSQL 版本,您可能希望查看 postgres_fdw 作为 dblink 的替代方案。

关于postgresql - 错误 : a column definition list is required for functions in dblink using PostgreSQL 9. 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com