2011-07-07 68 views
9

相關鏈接:Postgres的DBLINK逃避單引號

這是我的錯誤:

ERROR: type "e" does not exist 

這裏是我的查詢:

SELECT * 
FROM dblink('host=theHostName port=1234 dbname=theDBName user=theUser password=thePassword', 
    E'SELECT field_1, 
    CASE WHEN field_2 IS NOT NULL 
    THEN \'inactive\' ELSE \'active\' 
    END AS field_status 
    FROM the_table 
    ') 
AS linkresults(field_1 varchar(20),field_2 varchar(8)) 

如果我ü SE雙引號,刪除反斜槓逃逸的單引號和SELECT語句之前刪除對E

SELECT * 
FROM dblink('host=theHostName port=1234 dbname=theDBName user=theUser password=thePassword', 
    "SELECT field_1, 
    CASE WHEN field_2 IS NOT NULL 
    THEN 'inactive' ELSE 'active' 
    END AS field_status 
    FROM the_table 
    ") 
AS linkresults(field_1 varchar(20),field_2 varchar(8)) 

我得到這個:

NOTICE: identifier "SELECT ..." will be truncated 

而且我也得到了錯誤我的查詢截斷。

我以前曾經用dblink轉義過,所以有服務器設置或我需要配置的東西嗎?

我知道查詢工作得很好,如果我在sql server本身上運行它,但沒有與dblink運行。有什麼想法嗎?

的Postgres 8.4版

+0

@n iktrs你的文章工作,爲什麼刪除它? –

+0

我已經將它更新爲更簡單的東西。如果它不起作用,我可以報告以前的答案。 – niktrs

回答

16

嘗試用 '' 無效 '' 替換\ '無效\' - 注意:兩個單引號

SELECT * 
    FROM dblink('host=theHostName port=1234 dbname=theDBName user=theUser password=thePassword', 
     'SELECT field_1, 
     CASE WHEN field_2 IS NOT NULL 
     THEN ''inactive'' ELSE ''active'' 
     END AS field_status 
     FROM the_table 
     ') 

AS linkresults(field_1 varchar(20),field_2 varchar(8)) 

替代(以前的)解決方案

SELECT * 
    FROM dblink('host=theHostName port=1234 dbname=theDBName user=theUser password=thePassword', 
     'SELECT field_1, 
     CASE WHEN field_2 IS NOT NULL 
     THEN E\'inactive\' ELSE E\'active\' 
     END AS field_status 
     FROM the_table 
     ') 

AS linkresults(field_1 varchar(20),field_2 varchar(8)) 
+0

告訴我,如果替代方案也可以。想知道,因爲我沒有在我的電腦安裝postgre。 – niktrs

+0

E \'inactive \'這個工作對我和你的其他解決方案使用兩個單引號'' –

+0

你也可以使用$$風格的引號。 –

3

試試這個查詢:

SELECT * 
FROM dblink('host=theHostName port=1234 dbname=theDBName user=theUser password=thePassword', 
'SELECT field_1, 
CASE WHEN field_2 IS NOT NULL 
THEN $$inactive$$ ELSE $$active$$ 
END AS field_status 
FROM the_table') 
AS linkresults(field_1 varchar(20),field_2 varchar(8)) 
+0

給予更多的上下文並使用代碼塊會改善這個答案。 –