postgres dblink转单引号

Phi*_*ord 11 sql postgresql dblink escaping

相关链接:

这是我的错误:

ERROR:  type "e" does not exist
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

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))
Run Code Online (Sandbox Code Playgroud)

如果我使用双引号,则删除单引号的反斜杠转义符,并在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))
Run Code Online (Sandbox Code Playgroud)

我明白了:

NOTICE:  identifier "SELECT ..." will be truncated
Run Code Online (Sandbox Code Playgroud)

我也得到了错误,因为我的查询被截断了.

我以前用这样的dblink转义过,所以有服务器设置还是我需要配置的东西?

我知道如果我在sql server本身上运行它,那么查询工作正常,但不是dblink.有什么想法吗?

Postgres版本8.4

nik*_*trs 24

尝试更换\'inactive\'''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))
Run Code Online (Sandbox Code Playgroud)

替代(先前)解决方案

   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))
Run Code Online (Sandbox Code Playgroud)


小智 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))
Run Code Online (Sandbox Code Playgroud)