首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgres查询中将regclass名称与字符串连接起来

如何在postgres查询中将regclass名称与字符串连接起来
EN

Stack Overflow用户
提问于 2020-12-16 01:33:18
回答 1查看 48关注 0票数 0

我想使用这个函数在分区表上创建索引。Select query给出了test.t的所有分区表,然后迭代它的名称并创建索引。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION test.create_index_test() RETURNS void AS
$BODY$
DECLARE
    f record;
BEGIN
    FOR f IN
        SELECT inhrelid::regclass-- optionally cast to text
        FROM   pg_catalog.pg_inherits
        WHERE  inhparent = 'test.t'::regclass
    loop
    CREATE INDEX concat(f::text,'_geom_index') ON f USING gist (geom);

        -- can do some processing here
    END LOOP;
END;
$BODY$
LANGUAGE plpgsql;

但是这给了我concat函数中的错误

代码语言:javascript
复制
ERROR:  syntax error at or near "("
LINE 11:  CREATE INDEX concat(f,'_geom_index') ON f USING gist (geom)...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 01:43:29

DDL语句不支持参数化-因此您不能在其中使用变量。

您需要使用动态SQL - EXECUTE语句

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION test.create_index_test() RETURNS void AS
$BODY$
DECLARE
  r record;
BEGIN
  FOR r IN
     SELECT inhrelid::regclass AS fullpath, c.relname
       FROM pg_catalog.pg_inherits
            JOIN pg_class c ON c.oid = inhrelid
      WHERE  inhparent = 'test.t'::regclass
  LOOP
    EXECUTE FORMAT('CREATE INDEX %I ON %s USING gist(geom)', 
                   r.relname || '_geom_index',
                   r.fullpath);

    -- the index name is optional in postgres, so it can be simplified
    -- EXECUTE FORMAT('CREATE INDEX ON %s USING gist(geom)',
    --               r.fullpath);
    -- can do some processing here
  END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65310835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档