web-dev-qa-db-ja.com

PostgreSQLで削除された行の数を取得するにはどうすればよいですか?

PostgreSQLのDELETE句の影響を受ける行数を返す方法を探しています。 documentation は次のように述べています。

正常に完了すると、DELETEコマンドは次の形式のコマンドタグを返します。

削除カウント

カウントは、削除された行の数です。 countが0の場合、条件に一致する行はありません(これはエラーとは見なされません)。

DELETEコマンドにRETURNING句が含まれている場合、結果は、コマンドによって削除された行に対して計算された、RETURNINGリストで定義された列と値を含むSELECTステートメントの結果と同様になります。

しかし、私はそれの良い例を見つけるのに苦労しています。誰かがこれを手伝ってくれますか削除された行の数を知るにはどうすればよいですか?


編集:私はMilenの解決策を受け入れましたが、後で見つけた代替案を提示したいと思いました。それは ここ にあり、38.5.5で説明されています。結果ステータスタイトルの取得。

33
Erkan Haspulat

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;

これにより、削除された行の数だけが返されます。

57
Jakub Fedyczak

これはJavaでは単純なはずです。

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

Java.sql.Statement を参照してください。

10
cope360

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
7

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")
3
Dave