Как получить количество удаленных строк в PostgreSQL? - PullRequest
28 голосов
/ 12 февраля 2010

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

При успешном завершении УДАЛИТЬ команда возвращает командный тег форма

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

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

Если команда DELETE содержит Возврат, результат будет похож на тот из оператора SELECT содержащие столбцы и значения определенный в списке ВОЗВРАЩЕНИЯ, вычисляется по строке (ям), удаленным команда.

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


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

Ответы [ 5 ]

53 голосов
/ 21 марта 2014

Вы можете использовать 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;

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

8 голосов
/ 13 февраля 2010

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

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

См. java.sql.Statement .

6 голосов
/ 08 февраля 2017

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
3 голосов
/ 21 марта 2014

в 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")
0 голосов
/ 12 февраля 2010

Вам нужна функция PQcmdTuples от libpq. Который в PHP, например, обернут как pg_affected_rows.

...