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

Если я использую двойные кавычки, удалите обратную косую черту для одинарных кавычек и удалите E перед оператором SELECT.

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


person Phill Pafford    schedule 07.07.2011    source источник
comment
@niktrs твой пост сработал, зачем его удалять?   -  person Phill Pafford    schedule 07.07.2011
comment
Я обновил его до более простого. Если не сработает, могу сообщить предыдущий ответ.   -  person niktrs    schedule 07.07.2011


Ответы (2)


Попробуйте заменить \'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))

Альтернативное (предыдущее) решение

   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))
person niktrs    schedule 07.07.2011
comment
Подскажите, работает ли альтернатива. Хотел бы знать, поскольку на моем компьютере не установлен postgre. - person niktrs; 07.07.2011
comment
E \ 'inactive \', это сработало для меня, а также ваше другое решение с использованием двух одинарных кавычек '' - person Phill Pafford; 07.07.2011
comment
Вы также можете использовать кавычки в стиле $$. - person Scott Marlowe; 09.07.2011

Попробуйте этот запрос:

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))
person kaushik    schedule 17.04.2013
comment
Добавление немного большего контекста и использование блока кода улучшили бы этот ответ. - person Jordan Dea-Mattson; 17.04.2013