首页 > 解决方案 > 如何使用 PL/pgSQL 将静态字符串附加到格式化数组

问题描述

我正在尝试使用 PL/pgSQL 在大量表上创建地理空间索引。每个索引都必须是唯一的,因此我尝试将静态字符串附加到索引名称的每个表名的末尾。这是我尝试过的测试代码:

DO
$do$
DECLARE
    m   text;
    arr text[] := array['E09000001','E09000002'];
BEGIN
   FOREACH m IN ARRAY arr
   LOOP
        EXECUTE format($fmt$
            CREATE INDEX %1$L || '_gist_index'
            ON %1$I
            USING GIST (wkb_geometry);
        $fmt$, m);
   END LOOP;
END
$do$

我收到以下错误:

ERROR: syntax error at or near "'E09000001'" 
LINE 2: CREATE INDEX 'E09000001' || '_gist_index'

任何帮助将不胜感激。

标签: postgresqlindexingformatplpgsql

解决方案


您应该在参数中添加后缀:

DO
$do$
DECLARE
    m   text;
    arr text[] := array['E09000001','E09000002'];
BEGIN
   FOREACH m IN ARRAY arr
   LOOP
        EXECUTE format($fmt$
            CREATE INDEX %I
            ON %I
            USING GIST (wkb_geometry);
        $fmt$, m || '_gist_index', m);
   END LOOP;
END
$do$

推荐阅读