循环选择归属返回一个额外的列?

我想列出所有符合条件的反义词,然后删除它们。

DO $$
DECLARE r RECORD;
BEGIN
  FOR r in  SELECT
                conrelid::regclass,
                conname
            FROM
                pg_constraint
            WHERE
                contype IN ('u')
                AND connamespace = 'public'::regnamespace
                AND conname ~* '_key'
  LOOP
     EXECUTE 'ALTER TABLE % DROP CONSTRAINT %',r.conrelid, r.conname;
  END LOOP;
END;
$$ 

当我执行这个时,我得到

ERROR:  query "SELECT 'ALTER TABLE % DROP CONSTRAINT %',r.conrelid, r.conname" returned 3 columns
CONTEXT:  PL/pgSQL function inline_code_block line 14 at EXECUTE
SQL state: 42601

为什么会返回3列?

解决方案:

你不能把这样的标识符传递给动态SQL。使用 format() 而不是。

EXECUTE format('ALTER TABLE %I DROP CONSTRAINT %I', r.conrelid::text, r.conname::text);

给TA打赏
共{{data.count}}人
人已打赏
解决方案

Visual Studio设置失败

2022-4-21 15:08:53

解决方案

赋予参考变量值oracle

2022-4-21 16:09:12

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索