L oop хотя Выбрать приписать вернуть лишний столбец? - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь перечислить все противоречия, которые соответствуют критериям, а затем отбросить их,

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 столбца?

1 Ответ

2 голосов
/ 22 апреля 2020

Вы не можете передавать идентификаторы подобным образом в c SQL. Используйте format() вместо:

EXECUTE format('ALTER TABLE %I DROP CONSTRAINT %I', r.conrelid::text, r.conname::text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...