Re: PoC: Make it possible to disallow WHERE-less UPDATE and DELETE

Alvaro Herrera <alvherre@2ndquadrant.com>

From: Alvaro Herrera <alvherre@2ndquadrant.com>
To: David Fetter <david@fetter.org>
Cc: Jim Nasby <Jim.Nasby@BlueTreble.com>, Michael Paquier <michael.paquier@gmail.com>, Thomas Munro <thomas.munro@enterprisedb.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Robert Haas <robertmhaas@gmail.com>, PostgreSQL Development <pgsql-hackers@postgresql.org>
Date: 2017-01-09T22:52:11Z
Lists: pgsql-hackers
David Fetter wrote:

> +	if (query->commandType == CMD_UPDATE || query->commandType == CMD_DELETE)
> +	{
> +		/* Make sure there's something to look at. */
> +		Assert(query->jointree != NULL);
> +		if (query->jointree->quals == NULL)
> +			ereport(ERROR,
> +					(errcode(ERRCODE_SYNTAX_ERROR),
> +					 errmsg("%s requires a WHERE clause when the require_where hook is enabled.",
> +						 query->commandType == CMD_UPDATE ? "UPDATE" : "DELETE"),
> +					 errhint("To %s all rows, use \"WHERE true\" or similar.",
> +						 query->commandType == CMD_UPDATE ? "update" : "delete")));
> +	}

Per my earlier comment, I think this should use
ERRCODE_S_R_E_PROHIBITED_SQL_STATEMENT_ATTEMPTED instead.

I think this should say "the \"require_hook\" extension" rather than
use the term "hook".

(There are two or three translatability rules violations in this
snippet, but since this is an extension and those are not translatable,
I won't say elaborate further.)

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services