【问题标题】:SQL Error[42601]: Error: syntax error at or near "0"SQL 错误 [42601]:错误:“0”处或附近的语法错误
【发布时间】:2018-09-18 05:37:25
【问题描述】:

我不明白如何从 select 中创建一个数组,我有一个错误

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

【问题讨论】:

    标签: sql postgresql plpgsql dblink


    【解决方案1】:

    错误一定来自guids_list的初始化。

    它的写法,它会像这样出来

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

    这显然不是你想要的。此外,正如我试图证明的那样,它对 SQL 注入是开放的。

    你可以使用类似的东西

    'guids_list character varying[] := ' ||
       (SELECT quote_literal(array_agg(DISTINCT guid)) FROM lc) || ';'
    

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2017-02-20
      • 2018-05-07
      相关资源
      最近更新 更多