2012-09-16 10 views
10

Recientemente encontré una rareza. El siguiente es SQL válida:¿Qué hace la expression_expression para "DELETE FROM table"?

DELETE FROM customer *; 

la documentación de PostgreSQL DELETE dice que la estrella es un valor posible para la output_expression:

Una expresión para ser computada y retornada por el comando DELETE después cada fila esta borrado. La expresión puede usar cualquier nombre de columna de la tabla 0 tabla (s) listadas en USING. Escriba * para devolver todas las columnas.

Lo probé con y sin la estrella y no puedo ver la diferencia. De hecho, puedo poner casi cualquier palabra sola después del nombre de la tabla y es aceptada. Ni siquiera tiene que ser un nombre de columna real. No se devuelve nada extra.

db=> DELETE FROM customer wheeeeeee; 
DELETE 19 

Entonces, ¿qué hace y para qué podría usarlo?

Pregunta also posted on the PostgreSQL mailing list.

+0

¿Por qué no lo intentas y lo averiguas? –

+0

Lo hice. Simplemente borra las filas y no devuelve nada especial. –

+4

Parece que te perdiste 'RETURNING' que es una parte no opcional de la gramática que precede' output_expression' Supongo que '*' simplemente se trata como un alias (como para 'wheeeeeee') sin eso. –

Respuesta

5

El asterisco es no output_expression, para ello se tendría que utilizar la palabra clave RETURNING. En cambio, es una sintaxis vieja y obsoleta para incluir tablas secundarias en las consultas. (La última versión para la que está documentado parece ser PostgreSQL 8.1. Como la sintaxis sigue siendo válida, se trata de un error de documentación, como señala Tom Lane en la publicación vinculada a continuación.)

Dado que PostgreSQL 7.1 es el valor predeterminado (a menos que sql_inheritance esté desactivado) y la palabra clave ONLY se usa para lo contrario, por lo que * no es muy útil.

Ver this explanatory post from Tom Lane on the PostgreSQL mailing list.

Cuestiones relacionadas