2011-07-07 16 views
9

İlgili Linki kaçış dbLink: Burada postgres tek tırnak

  • String literals and escape characters in postgresql
    • benim hatadır: Burada
      ERROR: type "e" does not exist 
      

      benim sorgu: Eğer

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

      Ben u se çift tırnak, tek tırnak için ters eğik çizgi kaçış kaldırmak ve SEÇ deyimi önce E kaldırmak

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

      Ben bu olsun:

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

      Ve sorgu olduğu gibi ben de HATA olsun kesik.

      Daha önce olduğu gibi dblink ile kaçtım, yani bir sunucu ayarı mı yoksa yapılandırmam gereken bir şey var mı?

      Sorgunun sql sunucusunun kendisinde, ancak dblink ile çalıştırılmıyorsa iyi çalıştığını biliyorum. Düşüncesi olan var mı?

      Postgres sürüm 8.4

    +0

    @n göreviniz iktrs, neden silinsin? –

    +0

    Bunu daha basit bir şeye güncelledim. Eğer işe yaramazsa, önceki cevabı bildirebilirim. – niktrs

    cevap

    16

    'pasif \' \ yerine 'pasif ''' ile deneyin - ihtiyatla: iki tek tırnak

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

    Alternatif (önceki) çözümü

    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

    Alternatif de çalışıyorsa söyle. Benim pc'de postgre yüklü olmadığı için bilmek istiyorum. – niktrs

    +0

    E \ 'inaktif \' Bu benim için yanı sıra iki tek tırnak '' –

    +0

    kullanarak diğer çözüm için çalıştı. Ayrıca $$ stil tırnak kullanabilirsiniz. –

    3

    Bu sorguyu deneyin:

    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

    Biraz daha içerik vermek ve bir kod bloğu kullanmak bu cevabı iyileştirir. –

    İlgili konular