2011-07-07 32 views
9

Enlace relacionado:postgres dblink escapan comilla simple

Aquí está mi error:

ERROR: type "e" does not exist 

Aquí es mi consulta:

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

Si yo tu SE comillas dobles, eliminar el escape de barra invertida para las comillas simples y eliminar el correo antes de la instrucción 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)) 

me sale esto:

NOTICE: identifier "SELECT ..." will be truncated 

Y el también consigo el error como mi consulta ha sido truncado.

He escapado con dblink así antes, ¿hay alguna configuración de servidor o algo que deba configurar?

Sé que la consulta funciona bien si la ejecuto en el servidor sql, pero no con dblink. ¿Alguna idea?

Postgres versión 8.4

+0

@n iktrs tu publicación ha funcionado, ¿por qué eliminarla? –

+0

Lo he actualizado a algo más simple. Si no funciona, puedo informar la respuesta anterior. – niktrs

Respuesta

16

intente reemplazar \ 'inactiva \' con '' inactivos '' - precaución: dos comillas simples

solución
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)) 

Alternativa (anterior)

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

Dime si la alternativa también funciona. Me gustaría saberlo ya que no tengo postgre instalado en mi pc. – niktrs

+0

E \ 'inactivo \' esto funcionó para mí y su otra solución usando las dos comillas simples '' –

+0

También puede usar las comillas de estilo $$. –

3

Pruebe esta consulta:

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

Dar un poco más de contexto y usar un bloque de código mejoraría esta respuesta. –

Cuestiones relacionadas