remove registros query postgres one eliminar duplicate drop delete java postgresql delete-row sql-delete rowcount

java - registros - ¿Cómo obtener el número de filas eliminadas en PostgreSQL?



postgresql delete command (5)

Esto debería ser simple en Java.

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

Ver java.sql.Statement .

Estoy buscando una manera de devolver el número de filas afectadas por una cláusula DELETE en PostgreSQL. La documentation establece que;

Al completarse con éxito, un comando DELETE devuelve una etiqueta de comando del formulario

BORRAR CUENTA

El recuento es el número de filas eliminadas. Si el recuento es 0, ninguna fila coincide con la condición (esto no se considera un error).

Si el comando DELETE contiene una cláusula RETURNING, el resultado será similar al de una instrucción SELECT que contiene las columnas y los valores definidos en la lista RETURNING, calculados sobre las filas eliminadas por el comando.

Pero estoy teniendo problemas para encontrar un buen ejemplo de ello. ¿Puede alguien ayudarme con esto? ¿Cómo puedo saber cuántas filas se eliminaron?

EDITAR: Acepté la solución de Milen, pero quería presentar una alternativa que encontré más tarde. Se puede encontrar here , explicado en 38.5.5. Obtención del título de Estado del Resultado .


GET DIAGNOSTICS se usa para mostrar el número de registros modificados / eliminados.

Código de muestra

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


Puedes usar la cláusula de RETURNING :

DELETE FROM table WHERE condition IS TRUE RETURNING *;

Después de eso solo tienes que verificar el número de filas devueltas. Puedes agilizarlo con CTE :

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

Esto debería devolver sólo el número de filas eliminadas.


en Python usando psycopg2, el atributo rowcount puede ser usado. Aquí hay un ejemplo para averiguar cuántas filas se eliminaron ...

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