13

関連リンク:

これが私のエラーです:

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))

二重引用符を使用する場合は、一重引用符の円記号エスケープを削除し、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サーバー自体で実行すると問題なく機能することはわかっていますが、dblinkでは機能しません。何かご意見は?

Postgresバージョン8.4

4

2 に答える 2

28

--注意 で置き換え\'inactive\'てみてください:2つの一重引用符''inactive''

   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))
于 2011-07-07T19:14:30.233 に答える
5

このクエリを試してください:

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))
于 2013-04-17T06:19:52.333 に答える