有人可以告訴我為什么會出現此錯誤以及如何解決嗎?
我有這樣的功能:
CREATE OR REPLACE FUNCTION custom.dblink_function_v21()
RETURNS TABLE(name character varying, service character varying, scopes character varying)
LANGUAGE plpgsql
AS $function$
DECLARE
var_req TEXT;
rec_key record;
cur_key CURSOR FOR Select * from dblink(
'host=server1
user=user1
password=pw1
dbname=db1
port=5433',
'
select s.id,s.name,s.host from servers s where s.id IN (465,325) order by s.name
') as (srv character varying,name character varying, host character varying);
BEGIN
open cur_key;
loop
fetch cur_key into rec_key;
EXIT WHEN NOT FOUND;
var_req := 'Select * from dblink(
''host=' || rec_key.host || '
user=user2
password=pw2
dbname=db2'',
''
select
' || rec_key.name || ' as name ,
es.name as service,
es.scopes::varchar as scopes
from services es
'') as (srv varchar,service varchar,scopes varchar);
';
return query execute var_req;
end loop;
close cur_key;
END
$function$
;
當我用它呼叫它時,select * from custom.dblink_function_v21()我得到了這個錯誤:
SQL Error [42703]: ERROR: column "dba01" does not exist
Where: Error occurred on dblink connection named "unnamed": could not execute query.
PL/pgSQL function custom.dblink_function_v21() line 43 at RETURN QUERY
dba01 不是列..這是我在列名中的第一個值。
如果我只是改變,' || rec_key.name || '我會' || rec_key.srv || '突然作業。但我不想要服務器的 ID 作為回報,我想要名稱。他們都有相同的資料型別和一切,所以我不知道有什么問題。
我一直在瘋狂嘗試不同的事情,但沒有任何效果..
使用 postgres v.10
uj5u.com熱心網友回復:
這是您創建的選擇陳述句:
select XXX as name , es.name as service, es.scopes::varchar as scopes from services es
其中 XXX 是 rec_k??ey.name 的值 - 在后一種情況下是 rec_k??ey.srv 的值。
在前一種情況下,陳述句計算為:
select dba01 as name , es.name as service, es.scopes::varchar as scopes from services es
但在后一種情況下:
select 100 as name , es.name as service, es.scopes::varchar as scopes from services es
在前一種情況下,由于列 dba01 不存在而發出錯誤。在后一種情況下,選擇數字 100 作為名稱。這是一個完全有效的陳述句,因為它不被解釋為列名。
如果要選擇文本值“dba01”作為列“名稱”,可以將該部分更改為:
''' || rec_key.name || '''::text as name ,
最好的問候, Bjarni
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439771.html
標籤:PostgreSQL 数据库链接
下一篇:如何解決模板:模式不匹配檔案
