如何获取PostgreSQL中删除的行数?

时间:2010-02-12 11:58:05

标签: postgresql sql-delete delete-row rowcount

我正在寻找一种方法来返回PostgreSQL中受DELETE子句影响的行数。 documentation表示;

  

成功完成后,删除   命令返回的命令标记   形式

     

删除计数

     

计数是行数   删除。如果count为0,则没有行   符合条件(这不是   被视为错误。)

     

如果DELETE命令包含   RETURNING子句,结果将是   类似于SELECT语句   包含列和值   在RETURNING列表中定义,   计算删除的行   命令。

但我很难找到一个很好的例子。任何人都可以帮助我,如何找出删除了多少行?


修改 我接受了Milen的解决方案,但我想提出一个我后来发现的替代方案。它可以在here中找到,在 38.5.5下解释。获取结果状态标题。

6 个答案:

答案 0 :(得分:52)

您可以使用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;

这应该只返回已删除的行数。

答案 1 :(得分:7)

这在Java中应该很简单。

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

请参阅java.sql.Statement

答案 2 :(得分:6)

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 :(得分:3)

在使用psycopg2的Python中,可以使用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")

答案 4 :(得分:0)

这适用于函数。它也适用于 INSERT 等其他操作。

DECLARE _result INTEGER;
...
DELETE FROM mytable WHERE amount = 0;  -- or whatever other operation you desire
GET DIAGNOSTICS _result = ROW_COUNT;
IF _result > 0 THEN
    RAISE NOTICE 'Removed % rows with amount = 0', _result;
END IF;

答案 5 :(得分:-3)

您需要PQcmdTuples中的libpq功能。以PHP为例,其中包含pg_affected_rows