Как добавить статическую строку в форматированный массив с использованием PL / pgSQL - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь создать геопространственный индекс для большого количества таблиц, используя 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'

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 июня 2018

Вы должны добавить постфикс в аргумент:

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$
...