2011-07-07 16 views
9

関連リンク脱出DBLINK:ここPostgresは、単一引用符

を私のエラーです:

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

'非アクティブ\' \を交換する '非アクティブ ''' で試してみてください - 注意:2つの単一引用符

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が私のPCにインストールされていないので、知りたいですか。 – niktrs

+0

E \ '非アクティブ\'これは2つの一重引用符を使用する他のソリューションと同じように私のために働いたものです ' –

+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

もう少しコンテキストを与えてコードブロックを使用すると、この回答が改善されます。 –

関連する問題