Ошибка SQL [42601]: ошибка: синтаксическая ошибка в или около "0" - PullRequest
0 голосов
/ 18 сентября 2018

Я не могу понять, как сделать массив из выбора, и у меня есть ошибка

Ошибка SQL [42601]: Ошибка: синтаксическая ошибка в или около "0", Ошибка произошла наСоединение dblink с именем «без имени»: не удалось выполнить запрос.

create temporary table house_address as
   (SELECT full_address
    FROM dblink('db_d',
         'drop table if exists _x17092018;
             create temporary table _x17092018 (
             guid character varying,
             full_address character varying,
             address_guid character varying
          ); 
          do $$
             declare
                guids_list character varying[]
                   := ''{(''' ||
                      (SELECT STRING_AGG(DISTINCT guid, ''', ''')
                       FROM lc) ||
                      ''')}'';
                r character varying;
             begin
                foreach r in array guids_list 
                loop
                   insert into _x17092018
                      select r, t.*
                      FROM sm.func_by_houseid(r, TRUE, ''db'') as t;
                end loop;
             END$$;'
         ) AS addr(full_address TEXT)
   );

1 Ответ

0 голосов
/ 18 сентября 2018

Ошибка должна исходить из инициализации guids_list.

Как это написано, это будет выглядеть как

{[guid1', 'guid ' containing spaces and quote', 'guid3]}

что явно не то, что вы намереваетесь. Кроме того, как я пытался продемонстрировать, он открыт для SQL-инъекций.

Вы можете использовать что-то вроде

'guids_list character varying[] := ' ||
   (SELECT quote_literal(array_agg(DISTINCT guid)) FROM lc) || ';'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...