Truncate table en PostgreSQL

El comando truncate table en PostgreSQL se utiliza para eliminar todos los registros de una tabla de una manera mucho más rápida que con el comando delete. El motivo por el que el comando truncate es más eficiente que el comando delete, es que este ultimo, hace un escaneo de la tabla antes de borrar y el truncate no realiza ese escaneo. Además el comando truncate recupera el almacenamiento de inmediato evitando así tener que ejecutar el comando vacumm para recuperarlo. Casi todo ventajas…

Sintaxis

Ejecuta la siguiente sentencia para eliminar todos los registros de una tabla:

TRUNCATE TABLE nombre_tabla;

En la anterior sintaxis:

  • Escribimos después de la palabra TRUNCATE TABLE el nombre de la tabla de la que queremos borrar sus datos.

Ejemplo

Truncar una tabla

En el siguiente ejemplo borramos todos los registros de la tabla empleados:

TRUNCATE TABLE empleados;

Truncar una tabla reiniciando secuencias

Es importante que sepas que si truncas una tabla y tiene asociado alguna secuencia, esta no volverá a empezar de cero al no ser que se lo indiques. Para resolverlo trunca la tabla de este modo:

TRUNCATE TABLE nombre_tabla 
RESTART IDENTITY;

En el siguiente ejemplo borramos los registros de la tabla recursos y ademas reincidamos las secuencias asociadas a la tabla.

TRUNCATE TABLE recursos 
RESTART IDENTITY;

En el siguiente ejemplo borramos los registros de la tabla recursos y le indicamos que no reinicie las secuencias asociadas a la tabla (esto es lo mismo que escribir truncate table directamente.)

TRUNCATE TABLE recursos 
CONTINUE IDENTITY;

Truncar varias tablas

De forma similar a cuando borramos los registros de una tabla, podemos hacer lo mismo con varias tablas al mismo tiempo. Su sintaxis es:

TRUNCATE TABLE nombre_tabla1, nombre_tabla2;

En el siguiente ejemplo podemos ver como se borran los registros de las tablas recursos y empleados:

TRUNCATE TABLE recursos, empleados;

Truncar tabla y todo objeto que depende de ella

Si la tabla tiene una clave externa (foreign key) con otra tabla por defecto PostgreSQL no eliminara los datos de la otra tabla. Si quieres que se borren en ambas tablas debes lanzar el siguiente comando:

TRUNCATE TABLE nombre_tabla 
CASCADE;

En el siguiente ejemplo estamos eliminado datos de la tabla recursos pero además estamos borramos datos de aquellas tablas que tengan referencias a la tabla recursos.

TRUNCATE TABLE recursos 
CASCADE;
Truncate table en PostgreSQL

Usa la opción CASCADE con precaución, puedes borrar datos en tablas que no has tenido en cuenta. Si tienes una tabla con claves externas y no usas la opción CASCADE no te permitirá realizar el truncado, esto se debe a que por defecto el comando truncate table usa la opción restrict para prevenir este tipo de problemas.

Funcionamiento con disparadores (triggers)

Ten encuenta que si utilizas el comando truncate si tienes un disparador ON DELETE no te funcionara. Debes usar el disparador correspondiente al comando truncate que son: BEFORE TRUNCATE y AFTER TRUNCATE.

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.