Ошибка SQL [42601]: Ошибка: синтаксическая ошибка в или около "0"
Я не могу понять, как сделать массив из выбора, и у меня есть ошибка
Ошибка 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 ответ
Решение
Ошибка должна исходить из инициализации guids_list
,
Как это написано, это будет выглядеть как-то
{[guid1', 'guid ' containing spaces and quote', 'guid3]}
что явно не то, что вы намерены. Кроме того, как я пытался продемонстрировать, он открыт для SQL-инъекций.
Вы могли бы использовать что-то вроде
'guids_list character varying[] := ' ||
(SELECT quote_literal(array_agg(DISTINCT guid)) FROM lc) || ';'