Проблема при преобразовании jsonb в bigint в deeplink - PullRequest
0 голосов
/ 17 июня 2020

При кастинге в той же БД работает нормально, но не работает с deeplink

Работает нормально в той же БД (Получение результата с помощью этого запроса):

SELECT id, 
       total_inventory, 
       hotel_id, 
       ( room_type -> 'id' ) :: bigint AS room_type_id, 
       created_by, 
       created_date, 
       modified_by, 
       modified_date 
FROM   hotel_inventory; 

Не работает при соединении с другая БД (с использованием deeplink) (Ошибка с этим запросом):

INSERT INTO hotel_inventory 
            ( 
                        id, 
                        total_inventory, 
                        hotel_id, 
                        room_type_id, 
                        created_by, 
                        created_date, 
                        modified_by, 
                        modified_date 
            ) 
SELECT * 
FROM   dblink('demopostgres', 'SELECT id, total_inventory, hotel_id, (room_type -> 'id')::bigint as room_type_id,  created_by, created_date, modified_by, modified_date FROM hotel_inventory') 
AS data(id bigint, total_inventory integer, hotel_id bigint, room_type_id bigint, created_by jsonb, created_date timestamp without time zone, modified_by jsonb, modified_date timestamp without time zone);

Ошибка:

ERROR:  syntax error at or near "id"
LINE 3: ...ECT id, total_inventory, hotel_id, (room_type -> 'id')::bigi...
                                                             ^
SQL state: 42601
Character: 221

1 Ответ

1 голос
/ 17 июня 2020

Вам необходимо удвоить одинарные кавычки, чтобы избежать такой ошибки:

dblink('demopostgres',
       'SELECT . . . (room_type -> ''id'')::bigint as room_type_id . . . '
      )

Проблема заключается в простой ошибке синтаксического анализа. Одиночная кавычка завершает строку - отсюда и ошибка. Двойные одинарные кавычки - это стандартный способ помещения одинарных кавычек в строку, хотя разные базы данных часто поддерживают другие методы (например, backsla sh).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...