2011-07-07 42 views
9

Kết nối liên quan:postgres dblink thoát khỏi dấu nháy đơn

Đây là lỗi của tôi:

ERROR: type "e" does not exist 

Đây là câu hỏi của tôi:

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

Nếu tôi bạn se dấu ngoặc kép, loại bỏ các lối thoát xuyệc ngược cho dấu nháy đơn và loại bỏ các E trước khi câu lệnh 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)) 

tôi có được điều này:

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

Và tôi cũng nhận được LỖI như truy vấn của tôi đã được cắt ngắn.

Tôi đã thoát bằng dblink như thế này trước đây, vậy có cài đặt máy chủ hay thứ gì đó tôi cần định cấu hình không?

Tôi biết truy vấn hoạt động tốt nếu tôi chạy nó trên máy chủ sql chính nó, nhưng không phải với dblink. Có suy nghĩ gì không?

Postgres phiên bản 8.4

+0

@n iktrs bài đăng của bạn đã hoạt động, tại sao lại xóa nó? –

+0

Tôi đã cập nhật nó lên một cái gì đó đơn giản hơn. Nếu nó không hoạt động, tôi có thể báo cáo câu trả lời trước đó. – niktrs

Trả lời

16

Hãy thử thay thế \ 'không hoạt động \' với '' không hoạt động '' - cảnh báo: hai dấu nháy đơ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)) 

Alternative (trước) giải pháp

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

Hãy cho tôi biết nếu thay thế cũng hoạt động. Có muốn biết kể từ khi tôi không có postgre cài đặt trong máy của tôi. – niktrs

+0

E \ 'không hoạt động \' điều này làm việc cho tôi cũng như giải pháp khác của bạn bằng cách sử dụng hai dấu nháy đơn '' –

+0

Bạn cũng có thể sử dụng dấu ngoặc kép kiểu $$. –

3

Thử truy vấn này:

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

Cung cấp thêm một ngữ cảnh và sử dụng khối mã sẽ cải thiện câu trả lời này. –

Các vấn đề liên quan