УДАЛИТЬ запрос, возвращающий количество удаленных записей - PullRequest
1 голос
/ 12 марта 2020

Использование postgres 9.6.

Я пытаюсь написать функцию, которая будет удалять записи и возвращать разработчику приложения количество удаленных строк. У меня есть несколько следующих демо, но я продолжаю сталкиваться с проблемой синтаксиса.

BEGIN;
DELETE FROM it.animals WHERE id <5
RETURNING COUNT(id);
ROLLBACK;

[2020-03-12 09:14:11] [42803] ОШИБКА: агрегатные функции не допускаются в RETURNING

1 Ответ

2 голосов
/ 12 марта 2020

Вам необходимо использовать общее табличное выражение :

with deleted as (
   DELETE FROM it.animals WHERE id <5
   returning id
)
select count(*)
from deleted;

Однако, если это является частью функции PL / pg SQL, вы можете использовать GET DIAGNOSTICS:

$$
declare 
  l_num_rows integer;
begin
  DELETE FROM it.animals WHERE id <5
  GET DIAGNOSTICS l_num_rows = ROW_COUNT;  
  return l_num_rows;
end;
$$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...