You are on page 1of 7

POSTGRESQL TRUNCATE TABLA

Este tutorial muestra cmo utilizar TRUNCATE TABLE PostgreSQL para eliminar todos los
datos de las tablas grandes rpidamente.
Para eliminar todos los datos de una tabla, utilice la instruccin DELETE. Sin embargo, para una
tabla grande, es ms eficaz utilizar la instruccin TRUNCATE TABLE.
La instruccin TRUNCATE TABLE elimina todas las filas de una tabla sin el escaneo de la tabla.
Esta es la razn por la que es ms rpido que la sentencia DELETE. Adems, recupera de
inmediato el espacio en disco para que no tenga que realizar una operacin VACUMM subsecuente,
que es til en caso de tablas grandes.
Eliminar todos los datos de una tabla
La forma ms simple de declarar TRUNCATE TABLE es el siguiente:
TRUNCATE TABLE nombre_tabla;
Por ejemplo, para eliminar todas las filas de la tabla factura, se utiliza la siguiente instruccin:
TRUNCATE TABLE factura;
La instruccin TRUNCATE TABLE de PostgreSQL le permite eliminar no slo los datos de una
tabla, sino tambin restablecer el generador de secuencia asociado, especificando la opcin RESET
IDENTITY de la siguiente manera:
TRUNCATE TABLE nombre_tabla RESET IDENTITY;
Por ejemplo, para eliminar todas las filas de la tabla factura y restablecer la secuencia asociada con
la columna id_factura, se utiliza la siguiente instruccin:
TRUNCATE TABLE factura RESET IDENTITY;
Por defecto, la instruccin TRUNCATE TABLE no restablece la secuencia asociada. Puede utilizar
explcitamente la opcin CONTINUE IDENTITY para mantener la secuencia. Sin embargo, esto
no es necesario.
Eliminar todos los datos de varias tablas
Para eliminar todos los datos de varias tablas a la vez, se separa cada tabla por una coma de la
siguiente manera:
TRUNCATE TABLE nombre_tabla1, nombre_tabla2,
Por ejemplo, para eliminar todos los datos de las tablas factura y cliente, se utiliza la siguiente
instruccin:
TRUNCATE TABLE factura, cliente;

Eliminar todos los datos de tabla que tiene referencias de clave externa
En la prctica, la tabla que desea truncar a menudo tiene referencias de clave externa de otras tablas
que no figuran en la instruccin TRUNCATE TABLE. Por defecto, la instruccin TRUNCATE
TABLE no elimina todos los datos de la tabla que tiene referencias de clave externa.
Para eliminar datos de la tabla principal y de todas las tablas que tienen referencias de clave externa
a la tabla principal, debe utilizar la opcin CASCADE de la siguiente manera:
TRUNCATE TABLE nombre_tabla CASCADE;
Por ejemplo, para eliminar todos los datos de la tabla factura y hacer cascada a cualquier tabla que
haga referencia a la tabla factura a travs de restricciones de clave fornea, se utiliza la siguiente
instruccin:
TRUNCATE TABLE factura CASCADE;
Usted debe tener cuidado cuando si utiliza la opcin CASCADE, o de lo contrario podra
potencialmente eliminar datos de tablas que no pretenda.
PostgreSQL TRUNCATE TABLE y ON DELETE Trigger
Aunque la instruccin TRUNCATE TABLE elimina todos los datos de una tabla, no se dispara
ningn Trigger ON DELETE asociados a esa tabla.
Para disparar el Trigger cuando el comando TRUNCATE TABLE aplica a una tabla, debe
definir BEFORE TRUNCATE y / o AFTER TRUNCATE Triggers en esa tabla.
PostgreSQL TRUNCATE TABLE y transaction
El TRUNCATE TABLE es transaccin segura, lo que significa que si lo pones en los estados de
transaccin como BEGIN ROLLBACK la operacin de truncamiento se retrotraer segura.
En este tutorial, le hemos mostrado cmo eliminar todos los datos de tablas de gran tamao con
rapidez y eficacia mediante la instruccin TRUNCATE TABLE. Y algunas opciones que ofrece
dicha instruccin.
http://www.postgresqltutorial.com/postgresql-truncate-table/

VENTAJAS Y DESVENTAJAS DE USAR TRUNCATE


Una ventaja es que no queda ninguna tupla muerta que limpiar despus mediante vacuum (lo
cual podra ser un problema serio).

Una desventaja es que truncate viola los principios de MVCC (una transaccin muy antigua que
haya comenzado antes de esta secuencia, pero que no haya intentado adquirir un lock (bloqueo)
en la tabla hasta despus que esta secuencia haya completado, vera una versin inconsistente
de esta tabla).

http://www.postgresql.org/message-id/1334011247-sup-6699@alvh.no-ip.org

POSTGRESQL: INSTRUCCIN TRUNCATE TABLE


Este tutorial PostgreSQL explica cmo utilizar la instruccin TRUNCATE TABLE PostgreSQL con
la sintaxis y ejemplos.
Descripcin
La instruccin TRUNCATE TABLE se utiliza para eliminar todos los registros de una tabla o un
conjunto de tablas de PostgreSQL. Realiza la misma funcin que una sentencia DELETE sin la
clusula WHERE.
Advertencia: Si usted truncar una tabla, la instruccin TRUNCATE TABLE no se puede revertir
a menos que sea ejecutado dentro de una transaccin an no se ha comiteado.
Sintaxis
La sintaxis de la instruccin TRUNCATE TABLE en PostgreSQL es:
TRUNCATE [TABLE] [ONLY] [schema_name.]table_name [*] [, ...]
[ RESTART IDENTITY | CONTINUE IDENTITY ]
[ CASCADE | RESTRICT] ;
Parmetros o Argumentos
TABLE.- Opcional. La instruccin TRUNCATE se comportar exactamente igual si se
especifica TABLE o no.
ONLY.- Opcional. Si se especifica, se truncar slo la tabla table_name. Si no se especifica, se
truncar la tabla table_name y todas sus tablas descendientes.
schema_name.- El nombre del esquema al que pertenece la tabla.
table_name.- La tabla que se desea truncar.
*.- Opcional. Si se especifica, se truncar la tabla table_name y todas sus tablas descendientes.
RESTART IDENTITY.- Opcional. Si se especifica, todas las secuencias en las tablas
truncados se restablecern.
CONTINUE IDENTITY.- Opcional. Si se especifica, todas las secuencias en las tabla
truncados continan y no se restablecer. Este es el comportamiento predeterminado.
CASCADE.- Opcional. Si se especifica, todas las tablas que tienen una referencia de clave
fornea a table_name tambin se truncan.
RESTRICT.- Opcional. Si se especifica, todas las tablas que tienen una referencia de clave
fornea a table_name no se truncan a menos que se listen en la instruccin TRUNCATE
TABLE. Este es el comportamiento predeterminado.
NOTA:
Para poder truncar una tabla, debe tener los privilegios necesarios como TRUNCATE.
Los Trigger ON DELETE para la tabla no se activan durante el truncamiento.
No se puede truncar una tabla que hace referencia a una clave fornea a menos que todas las
tablas de la relacin de clave fornea se listen en la instruccin TRUNCATE.
Todo el almacenamiento para las filas truncadas se recuperan sin necesidad de un VACUUM.

EJEMPLO
En PostgreSQL, truncar una tabla es una manera rpida de limpiar los registros de una tabla, ya que
no tiene que escanear la tabla. Truncar una tabla es tambin mucho ms fcil que borrar la tabla y
volver a crerla.
Veamos un ejemplo de cmo utilizar la instruccin TRUNCATE TABLE en PostgreSQL.
Por ejemplo:
TRUNCATE ONLY products;
Este ejemplo podra truncar la tabla denominada productos y eliminar todos los registros de esa
tabla.
Sera equivalente a la siguiente instruccin DELETE en PostgreSQL:
DELETE FROM products;
Ambas declaraciones se traducira en: Eliminando todos los datos de la tabla de productos y ya que
se utiliz la palabra clave ONLY en el comando TRUNCATE, no hay tablas descendientes
truncadas. Siempre es ms seguro para especificar la palabra clave slo para que usted no truncar
accidentalmente tablas descendientes.
varias tablas
A continuacin, vamos a ver cmo truncar varias mesas a la vez.
Por ejemplo:
TRUNCATE ONLY products, inventory;
Este ejemplo podra truncar las tablas productos e inventario. Una vez ms, hemos incluido la
palabra clave ONLY de modo que no hay tablas descendientes truncadas.
Restablecer columnas de identidad
Por defecto, al truncar una tabla, las columnas de identidad continan su numeracin desde donde
se quedaron. Se puede decir a PostgreSQL que reinicie automticamente todas las columnas de
identidad al truncar una tabla mediante la inclusin de la clusula de RESTART IDENTITY.
Por ejemplo:
TRUNCATE ONLY inventory RESTART IDENTITY;
En este ejemplo, las columnas de identidad en la tabla de inventario se restablecern a sus valores
iniciales. Esto es til si tiene un campo de clave principal que desea reiniciar en 1 de nuevo.
LINK
http://www.techonthenet.com/postgresql/truncate.php

TRUNCATE
Nombre
TRUNCATE - vaciar una tabla o un conjunto de tablas
Sinopsis
TRUNCATE [TABLE] [ONLY] [schema_name.]table_name [*] [, ...]
[ RESTART IDENTITY | CONTINUE IDENTITY ]
[ CASCADE | RESTRICT] ;
Descripcin
TRUNCATE elimina rpidamente todas las filas de un conjunto de tablas. Tiene el mismo efecto
que un DELETE sin filtrar sobre cada tabla, pero es ms rpido dado que actualmente no recorre la
tabla. Adems, reclama el espacio de disco inmediatamente, en vez de requerir una operacin
VACUUM subsecuente. Es ms til en tablas grandes.
Parmetros
table_name.- El nombre (calificado opcionalmente por el esquema) de la tabla a ser truncada.
Si se especifica ONLY, solo dicha tabla es truncada. Si no se especifica ONLY, la tabla y
todas sus descendientes (si hay) sern truncadas.
RESTART IDENTITY.- Automticamente reinicia las secuencias propias de la columna de la

tabla truncada.
CONTINUE IDENTITY.- No cambia los valores de las secuencias. Esto es lo predeterminado.
CASCADE.- Automticamente trunca todas las tablas que tienen referencias por clave fornea

de cualquier tabla mencionada, o de cualquier tabla agregada al grupo debido al CASCADE.


RESTRICT.- Rechaza truncar si alguna de las tablas tiene referencias de clave fornea y no

estn listadas en el comando. Esto es lo predeterminado.


Notas
Se debe tener el privilegio TRUNCATE en una tabla para poder truncarla.
TRUNCATE adquiere un bloqueo exclusivo en cada tabla en que opera, que bloquea todas las
dems operaciones simultneas sobre la tabla. Si se requiere acceso simultneo a la tabla,
entonces se debe de usar el comando DELETE en lugar de TRUNCATE.
TRUNCATE no se puede utilizar en una tabla que tiene referencias de clave externa de otras
tablas, a menos que todas esas tablas tambin se truncan en el mismo comando. La opcin
CASCADE se puede utilizar para incluir automticamente todas las tablas dependientes, pero
hay que tener mucho cuidado al usar esta opcin, o de lo contrario se podra perder datos que no
pretenda perder.
Si se define TRUNCATE en un Trigger para cualquiera de las tablas, entonces todos los triggers
BEFORE TRUNCATE son despedidos antes de que ocurra cualquier truncamiento, y todos los
triggers AFTER TRUNCATE son despedidos despus de que se realiz el ltimo truncamiento.
Los triggers se dispararn en el orden que las tablas se van a procesar (primero los que figuran
en el sistema y cualquier que se agregaron debido a cascada).
LINKS

http://www.postgresql.org/docs/8.4/static/sql-truncate.html
http://www.postgresql.org.ar/trac/wiki/sql-truncate.html

DIFERENCIAS ENTRE TRUNCATE TABLE Y DELETE FROM EN SQL-SERVER


Una duda bastante habitual entre los desarrolladores, es cul es la diferencia entre un TRUNCATE
TABLE y un DELETE FROM TABLE. Este post (y el blog en general) est centrado en SQL
Server, sin embargo, la mayora de las diferencias entre ambas sentencias aplican a cualquier motor
de bases de datos (Oracle, MySQL, DB2, etc).
Primero voy a enumerar las diferencias y luego voy a explicar el porqu de dichas diferencias.

TRUNCATE TABLE

DELETE FROM

Es una operacin DDL.

Es una operacin DML.

No permite el borrado selectivo.

Permite el borrado selectivo, mediante la

TRUNCATE TABLE elimina todo el contenido

clausula WHERE.

de la tabla.
No se puede ejecutar, si la tabla tiene

Se puede ejecutar si hay FK asociadas a

asociadas, aun si no existiesen registros

la tabla, pero siempre y cuando no tenga

en la tabla que contiene la FK.

registros asociados o la FK este


deshabilitada.

Es la forma ms rpida de eliminar el contenido

Es ms lenta.

de una tabla.
No se activa ningn trigger al ejecutarse

Puede activarse el trigger de ON

(a partir de SQL Server 2005, es posible

DELETE y poder determinar que

capturar el evento mediante un DDL

registros estn siendo eliminados.

trigger, pero a modo de auditora, no es


posible tener acceso a los valores que
fueron eliminados).
En caso que la tabla tuviese un campo Identity,

No resetea el valor del campo Identity, en

se resetea el valor a 1 (o al valor base

caso que la tabla tuviese uno.

determinado en el campo).
TRUNCATE TABLE desasocia (deallocate) las

DELETE FROM marca cada registro afectado,

pginas de datos de la tabla.

como eliminado.

El logueo en el transaction log es mnimo. Solo

Loguea cada operacin sobre los

registra el dealloc de las pginas de datos.

registros afectados.

No puede ser ejecutado si la tabla tiene

Se puede ejecutar si la tabla tiene vistas

asociadas vistas indexadas.

indexadas.

Como podemos ver, TRUNCATE TABLE es bastante ms restrictivo que DELETE, al punto que en
muchas situaciones, aun si queremos eliminar todo el contenido de la tabla, no podemos hacerlo.
Ahora bien, que es lo que hace TRUNCATE y porque es mas rpido que su competidor?
Para eso primero voy a hacer una breve introduccin a como almacena internamente SQL Server los
datos.
En SQL Server, los registros de una tabla, son agrupados en una estructura fsica de datos, que se
llama pgina. Cada pgina tiene un tamao fijo de 8060 bytes, y puede almacenar uno o cientos de
registros, dependiendo del tamao del mismo. Cuando se intenta insertar ms registros en una tabla
y la pgina de datos est llena, se crea otra donde se inserta el nuevo registro y as sucesivamente.
El comando TRUNCATE, lo que hace es desasociar (deallocate) las pginas de datos de la tabla, sin
alterar los registros en s mismo, mientras que el DELETE FROM recorre cada uno de los registros
y los marca como borrados, por lo tanto, hace muchas ms operaciones de I/O, que aumenta
exponencialmente en relacin con TRUNCATE, a medida que aumenta el tamao de la tabla.
Otra razn que explica la diferencia de performance, es que TRUNCATE TABLE solo loguea en el
transaction log, el deallocate de las paginas con la tabla (por lo tanto, es posible hacer un rollback
de un TRUNCATE, cosa que muchos piensan que no), mientras que el DELETE FROM manda al
transaction log todos los registros afectados, lo que es obviamente mucho ms costoso a nivel
recursos de I/O.
Por ltimo, al hacer un TRUNCATE un lockeo sobre la tabla, a diferencia del DELETE FROM que
hace un lockeo por pagina o registro, el consumo de memoria para almacenar los objetos lockeados
es mucho menor.
LINK
https://grimpidev.wordpress.com/2009/03/21/diferencias-entre-truncatetable-y-delete-from/

You might also like