Подтвердить что ты не робот

Как получить количество удаленных строк в PostgreSQL?

Я ищу способ вернуть число строк, затронутых предложением DELETE в PostgreSQL. В документации указано, что:

При успешном завершении DELETE команда возвращает тэг команды форма

УДАЛИТЬ счетчик

Число - это количество строк удален. Если count равен 0, строк нет соответствует условию (это не считается ошибкой).

Если команда DELETE содержит RETURNING, результат будет аналогично выражению SELECT содержащие столбцы и значения определенный в списке ВОЗВРАЩАЕМОСТИ, вычисляется по строке (-ам), удаленной команда.

Но мне трудно найти хороший пример. Может ли кто-нибудь помочь мне с этим, как я могу узнать, сколько строк было удалено?


EDIT: Я принял решение Милена, но я хотел представить альтернативу, которую я нашел позже. Его можно найти в здесь, как описано в разделе 38.5.5. Получение названия статуса результата.

4b9b3361

Ответ 2

Вы можете использовать предложение RETURNING:

DELETE FROM table WHERE condition IS TRUE RETURNING *;

После этого вам просто нужно проверить количество возвращенных строк. Вы можете упорядочить его с помощью CTE:

WITH deleted AS (DELETE FROM table WHERE condition IS TRUE RETURNING *) SELECT count(*) FROM deleted;

Это должно возвращать только количество удаленных строк.

Ответ 3

Это должно быть простым в Java.

Statement stmt = connection.createStatement();
int rowsAffected = stmt.executeUpdate("delete from your_table");
System.out.println("deleted: " + rowsAffected);

См. Java.sql.Statement.

Ответ 4

в Python с использованием psycopg2 можно использовать атрибут rowcount. Вот пример, чтобы узнать, сколько строк было удалено...

cur = connection.cursor()
try:
    cur.execute("DELETE FROM table WHERE col1 = %s", (value,))
    connection.commit()
    count = cur.rowcount
    cur.close()
    print("A total of %s rows were deleted." % count)
except:
    connection.rollback()
    print("An error as occurred, No rows were deleted")

Ответ 5

GET DIAGNOSTICS используется для отображения числа измененных/удаленных записей.

Пример кода

CREATE OR REPLACE FUNCTION fnName()
  RETURNS void AS
$BODY$
        declare
         count numeric;
       begin
              count := 0;
            LOOP
             -- condition here update or delete;
             GET DIAGNOSTICS count = ROW_COUNT;
             raise notice 'Value: %', count;
             end loop;
        end;
$BODY$a