postgres dblink escape одинарная кавычка - PullRequest
11 голосов
/ 07 июля 2011

Ссылка по теме:

Вот моя ошибка:

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

Ответы [ 2 ]

22 голосов
/ 07 июля 2011

Попробуйте заменить \'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))
4 голосов
/ 17 апреля 2013

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

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...