From cd30728fb2ed7c367d545fc14ab850b5fa2a4850 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 13 Feb 2012 22:20:27 -0500 Subject: Allow LEAKPROOF functions for better performance of security views. We don't normally allow quals to be pushed down into a view created with the security_barrier option, but functions without side effects are an exception: they're OK. This allows much better performance in common cases, such as when using an equality operator (that might even be indexable). There is an outstanding issue here with the CREATE FUNCTION / ALTER FUNCTION syntax: there's no way to use ALTER FUNCTION to unset the leakproof flag. But I'm committing this as-is so that it doesn't have to be rebased again; we can fix up the grammar in a future commit. KaiGai Kohei, with some wordsmithing by me. --- doc/src/sgml/ref/create_function.sgml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'doc/src/sgml/ref/create_function.sgml') diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml index 2a87130356e..7df66ab0e08 100644 --- a/doc/src/sgml/ref/create_function.sgml +++ b/doc/src/sgml/ref/create_function.sgml @@ -26,7 +26,7 @@ CREATE [ OR REPLACE ] FUNCTION | RETURNS TABLE ( column_name column_type [, ...] ) ] { LANGUAGE lang_name | WINDOW - | IMMUTABLE | STABLE | VOLATILE + | IMMUTABLE | STABLE | VOLATILE | LEAKPROOF | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | COST execution_cost @@ -324,6 +324,23 @@ CREATE [ OR REPLACE ] FUNCTION + + LEAKPROOF + + + LEAKPROOF indicates that the function has no side + effects. It reveals no information about its arguments other than by + its return value. For example, a function which throws an error message + for some argument values but not others, or which includes the argument + values in any error message, is not leakproof. The query planner may + push leakproof functions (but not others) into views created with the + security_barrier option. See + and . + This option can only be set by the superuser. + + + + CALLED ON NULL INPUT RETURNS NULL ON NULL INPUT -- cgit v1.2.3