mirror of
https://github.com/postgres/postgres.git
synced 2025-05-21 15:54:08 +03:00
Code review for plpgsql fn_signature patch.
Don't quote the output of format_procedure(); it's already quoted quite enough. Remove the fn_name field, which was now just dead weight. Fix remaining expected-output files.
This commit is contained in:
parent
4b77bfc37a
commit
bef47331b6
@ -341,7 +341,6 @@ do_compile(FunctionCallInfo fcinfo,
|
|||||||
ALLOCSET_DEFAULT_MAXSIZE);
|
ALLOCSET_DEFAULT_MAXSIZE);
|
||||||
compile_tmp_cxt = MemoryContextSwitchTo(func_cxt);
|
compile_tmp_cxt = MemoryContextSwitchTo(func_cxt);
|
||||||
|
|
||||||
function->fn_name = pstrdup(NameStr(procStruct->proname));
|
|
||||||
function->fn_signature = format_procedure(fcinfo->flinfo->fn_oid);
|
function->fn_signature = format_procedure(fcinfo->flinfo->fn_oid);
|
||||||
function->fn_oid = fcinfo->flinfo->fn_oid;
|
function->fn_oid = fcinfo->flinfo->fn_oid;
|
||||||
function->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data);
|
function->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data);
|
||||||
@ -803,7 +802,6 @@ plpgsql_compile_inline(char *proc_source)
|
|||||||
ALLOCSET_DEFAULT_MAXSIZE);
|
ALLOCSET_DEFAULT_MAXSIZE);
|
||||||
compile_tmp_cxt = MemoryContextSwitchTo(func_cxt);
|
compile_tmp_cxt = MemoryContextSwitchTo(func_cxt);
|
||||||
|
|
||||||
function->fn_name = pstrdup(func_name);
|
|
||||||
function->fn_signature = pstrdup(func_name);
|
function->fn_signature = pstrdup(func_name);
|
||||||
function->fn_is_trigger = false;
|
function->fn_is_trigger = false;
|
||||||
function->fn_input_collation = InvalidOid;
|
function->fn_input_collation = InvalidOid;
|
||||||
|
@ -798,7 +798,7 @@ plpgsql_exec_error_callback(void *arg)
|
|||||||
* translator: last %s is a phrase such as "during statement block
|
* translator: last %s is a phrase such as "during statement block
|
||||||
* local variable initialization"
|
* local variable initialization"
|
||||||
*/
|
*/
|
||||||
errcontext("PL/pgSQL function \"%s\" line %d %s",
|
errcontext("PL/pgSQL function %s line %d %s",
|
||||||
estate->func->fn_signature,
|
estate->func->fn_signature,
|
||||||
estate->err_stmt->lineno,
|
estate->err_stmt->lineno,
|
||||||
_(estate->err_text));
|
_(estate->err_text));
|
||||||
@ -809,7 +809,7 @@ plpgsql_exec_error_callback(void *arg)
|
|||||||
* translator: last %s is a phrase such as "while storing call
|
* translator: last %s is a phrase such as "while storing call
|
||||||
* arguments into local variables"
|
* arguments into local variables"
|
||||||
*/
|
*/
|
||||||
errcontext("PL/pgSQL function \"%s\" %s",
|
errcontext("PL/pgSQL function %s %s",
|
||||||
estate->func->fn_signature,
|
estate->func->fn_signature,
|
||||||
_(estate->err_text));
|
_(estate->err_text));
|
||||||
}
|
}
|
||||||
@ -817,13 +817,13 @@ plpgsql_exec_error_callback(void *arg)
|
|||||||
else if (estate->err_stmt != NULL)
|
else if (estate->err_stmt != NULL)
|
||||||
{
|
{
|
||||||
/* translator: last %s is a plpgsql statement type name */
|
/* translator: last %s is a plpgsql statement type name */
|
||||||
errcontext("PL/pgSQL function \"%s\" line %d at %s",
|
errcontext("PL/pgSQL function %s line %d at %s",
|
||||||
estate->func->fn_signature,
|
estate->func->fn_signature,
|
||||||
estate->err_stmt->lineno,
|
estate->err_stmt->lineno,
|
||||||
plpgsql_stmt_typename(estate->err_stmt));
|
plpgsql_stmt_typename(estate->err_stmt));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
errcontext("PL/pgSQL function \"%s\"",
|
errcontext("PL/pgSQL function %s",
|
||||||
estate->func->fn_signature);
|
estate->func->fn_signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1461,7 +1461,7 @@ plpgsql_dumptree(PLpgSQL_function *func)
|
|||||||
PLpgSQL_datum *d;
|
PLpgSQL_datum *d;
|
||||||
|
|
||||||
printf("\nExecution tree of successfully compiled PL/pgSQL function %s:\n",
|
printf("\nExecution tree of successfully compiled PL/pgSQL function %s:\n",
|
||||||
func->fn_name);
|
func->fn_signature);
|
||||||
|
|
||||||
printf("\nFunction's data area:\n");
|
printf("\nFunction's data area:\n");
|
||||||
for (i = 0; i < func->ndatums; i++)
|
for (i = 0; i < func->ndatums; i++)
|
||||||
@ -1538,6 +1538,6 @@ plpgsql_dumptree(PLpgSQL_function *func)
|
|||||||
dump_indent = 0;
|
dump_indent = 0;
|
||||||
printf("%3d:", func->action->lineno);
|
printf("%3d:", func->action->lineno);
|
||||||
dump_block(func->action);
|
dump_block(func->action);
|
||||||
printf("\nEnd of execution tree of function %s\n\n", func->fn_name);
|
printf("\nEnd of execution tree of function %s\n\n", func->fn_signature);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
@ -678,7 +678,6 @@ typedef struct PLpgSQL_func_hashkey
|
|||||||
|
|
||||||
typedef struct PLpgSQL_function
|
typedef struct PLpgSQL_function
|
||||||
{ /* Complete compiled function */
|
{ /* Complete compiled function */
|
||||||
char *fn_name;
|
|
||||||
char *fn_signature;
|
char *fn_signature;
|
||||||
Oid fn_oid;
|
Oid fn_oid;
|
||||||
TransactionId fn_xmin;
|
TransactionId fn_xmin;
|
||||||
|
@ -292,7 +292,7 @@ PL/Python function "python_traceback"
|
|||||||
SELECT sql_error();
|
SELECT sql_error();
|
||||||
ERROR: division by zero
|
ERROR: division by zero
|
||||||
CONTEXT: SQL statement "select 1/0"
|
CONTEXT: SQL statement "select 1/0"
|
||||||
PL/pgSQL function "sql_error()" line 3 at SQL statement
|
PL/pgSQL function sql_error() line 3 at SQL statement
|
||||||
SELECT python_from_sql_error();
|
SELECT python_from_sql_error();
|
||||||
ERROR: spiexceptions.DivisionByZero: division by zero
|
ERROR: spiexceptions.DivisionByZero: division by zero
|
||||||
CONTEXT: Traceback (most recent call last):
|
CONTEXT: Traceback (most recent call last):
|
||||||
@ -306,7 +306,7 @@ CONTEXT: Traceback (most recent call last):
|
|||||||
plpy.execute("select sql_error()")
|
plpy.execute("select sql_error()")
|
||||||
PL/Python function "python_traceback"
|
PL/Python function "python_traceback"
|
||||||
SQL statement "select python_traceback()"
|
SQL statement "select python_traceback()"
|
||||||
PL/pgSQL function "python_from_sql_error()" line 3 at SQL statement
|
PL/pgSQL function python_from_sql_error() line 3 at SQL statement
|
||||||
SELECT sql_from_python_error();
|
SELECT sql_from_python_error();
|
||||||
ERROR: spiexceptions.DivisionByZero: division by zero
|
ERROR: spiexceptions.DivisionByZero: division by zero
|
||||||
CONTEXT: Traceback (most recent call last):
|
CONTEXT: Traceback (most recent call last):
|
||||||
|
@ -292,7 +292,7 @@ PL/Python function "python_traceback"
|
|||||||
SELECT sql_error();
|
SELECT sql_error();
|
||||||
ERROR: division by zero
|
ERROR: division by zero
|
||||||
CONTEXT: SQL statement "select 1/0"
|
CONTEXT: SQL statement "select 1/0"
|
||||||
PL/pgSQL function "sql_error" line 3 at SQL statement
|
PL/pgSQL function sql_error() line 3 at SQL statement
|
||||||
SELECT python_from_sql_error();
|
SELECT python_from_sql_error();
|
||||||
ERROR: spiexceptions.DivisionByZero: division by zero
|
ERROR: spiexceptions.DivisionByZero: division by zero
|
||||||
CONTEXT: Traceback (most recent call last):
|
CONTEXT: Traceback (most recent call last):
|
||||||
@ -306,7 +306,7 @@ CONTEXT: Traceback (most recent call last):
|
|||||||
plpy.execute("select sql_error()")
|
plpy.execute("select sql_error()")
|
||||||
PL/Python function "python_traceback"
|
PL/Python function "python_traceback"
|
||||||
SQL statement "select python_traceback()"
|
SQL statement "select python_traceback()"
|
||||||
PL/pgSQL function "python_from_sql_error" line 3 at SQL statement
|
PL/pgSQL function python_from_sql_error() line 3 at SQL statement
|
||||||
SELECT sql_from_python_error();
|
SELECT sql_from_python_error();
|
||||||
ERROR: spiexceptions.DivisionByZero: division by zero
|
ERROR: spiexceptions.DivisionByZero: division by zero
|
||||||
CONTEXT: Traceback (most recent call last):
|
CONTEXT: Traceback (most recent call last):
|
||||||
|
@ -493,7 +493,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select doubledecrement(3); -- fail because of implicit null assignment
|
select doubledecrement(3); -- fail because of implicit null assignment
|
||||||
ERROR: domain pos_int does not allow null values
|
ERROR: domain pos_int does not allow null values
|
||||||
CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" line 3 during statement block local variable initialization
|
CONTEXT: PL/pgSQL function doubledecrement(pos_int) line 3 during statement block local variable initialization
|
||||||
create or replace function doubledecrement(p1 pos_int) returns pos_int as $$
|
create or replace function doubledecrement(p1 pos_int) returns pos_int as $$
|
||||||
declare v pos_int := 0;
|
declare v pos_int := 0;
|
||||||
begin
|
begin
|
||||||
@ -501,7 +501,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select doubledecrement(3); -- fail at initialization assignment
|
select doubledecrement(3); -- fail at initialization assignment
|
||||||
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
||||||
CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" line 3 during statement block local variable initialization
|
CONTEXT: PL/pgSQL function doubledecrement(pos_int) line 3 during statement block local variable initialization
|
||||||
create or replace function doubledecrement(p1 pos_int) returns pos_int as $$
|
create or replace function doubledecrement(p1 pos_int) returns pos_int as $$
|
||||||
declare v pos_int := 1;
|
declare v pos_int := 1;
|
||||||
begin
|
begin
|
||||||
@ -514,10 +514,10 @@ select doubledecrement(0); -- fail before call
|
|||||||
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
||||||
select doubledecrement(1); -- fail at assignment to v
|
select doubledecrement(1); -- fail at assignment to v
|
||||||
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
||||||
CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" line 4 at assignment
|
CONTEXT: PL/pgSQL function doubledecrement(pos_int) line 4 at assignment
|
||||||
select doubledecrement(2); -- fail at return
|
select doubledecrement(2); -- fail at return
|
||||||
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
ERROR: value for domain pos_int violates check constraint "pos_int_check"
|
||||||
CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" while casting return value to function's return type
|
CONTEXT: PL/pgSQL function doubledecrement(pos_int) while casting return value to function's return type
|
||||||
select doubledecrement(3); -- good
|
select doubledecrement(3); -- good
|
||||||
doubledecrement
|
doubledecrement
|
||||||
-----------------
|
-----------------
|
||||||
@ -566,7 +566,7 @@ end$$ language plpgsql;
|
|||||||
select array_elem_check(121.00);
|
select array_elem_check(121.00);
|
||||||
ERROR: numeric field overflow
|
ERROR: numeric field overflow
|
||||||
DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2.
|
DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2.
|
||||||
CONTEXT: PL/pgSQL function "array_elem_check(numeric)" line 5 at assignment
|
CONTEXT: PL/pgSQL function array_elem_check(numeric) line 5 at assignment
|
||||||
select array_elem_check(1.23456);
|
select array_elem_check(1.23456);
|
||||||
array_elem_check
|
array_elem_check
|
||||||
------------------
|
------------------
|
||||||
@ -584,7 +584,7 @@ end$$ language plpgsql;
|
|||||||
select array_elem_check(121.00);
|
select array_elem_check(121.00);
|
||||||
ERROR: numeric field overflow
|
ERROR: numeric field overflow
|
||||||
DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2.
|
DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2.
|
||||||
CONTEXT: PL/pgSQL function "array_elem_check(numeric)" line 5 at assignment
|
CONTEXT: PL/pgSQL function array_elem_check(numeric) line 5 at assignment
|
||||||
select array_elem_check(1.23456);
|
select array_elem_check(1.23456);
|
||||||
array_elem_check
|
array_elem_check
|
||||||
------------------
|
------------------
|
||||||
@ -602,7 +602,7 @@ end$$ language plpgsql;
|
|||||||
select array_elem_check(121.00);
|
select array_elem_check(121.00);
|
||||||
ERROR: numeric field overflow
|
ERROR: numeric field overflow
|
||||||
DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2.
|
DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2.
|
||||||
CONTEXT: PL/pgSQL function "array_elem_check(numeric)" line 5 at assignment
|
CONTEXT: PL/pgSQL function array_elem_check(numeric) line 5 at assignment
|
||||||
select array_elem_check(1.23456);
|
select array_elem_check(1.23456);
|
||||||
array_elem_check
|
array_elem_check
|
||||||
------------------
|
------------------
|
||||||
@ -650,7 +650,7 @@ select array_elem_check(3);
|
|||||||
|
|
||||||
select array_elem_check(-1);
|
select array_elem_check(-1);
|
||||||
ERROR: value for domain orderedpair violates check constraint "orderedpair_check"
|
ERROR: value for domain orderedpair violates check constraint "orderedpair_check"
|
||||||
CONTEXT: PL/pgSQL function "array_elem_check(integer)" line 5 at assignment
|
CONTEXT: PL/pgSQL function array_elem_check(integer) line 5 at assignment
|
||||||
drop function array_elem_check(int);
|
drop function array_elem_check(int);
|
||||||
--
|
--
|
||||||
-- Renaming
|
-- Renaming
|
||||||
|
@ -687,7 +687,7 @@ set work_mem = '1MB';
|
|||||||
select myfunc(0);
|
select myfunc(0);
|
||||||
ERROR: division by zero
|
ERROR: division by zero
|
||||||
CONTEXT: SQL statement "SELECT 1/$1"
|
CONTEXT: SQL statement "SELECT 1/$1"
|
||||||
PL/pgSQL function "myfunc(integer)" line 4 at PERFORM
|
PL/pgSQL function myfunc(integer) line 4 at PERFORM
|
||||||
select current_setting('work_mem');
|
select current_setting('work_mem');
|
||||||
current_setting
|
current_setting
|
||||||
-----------------
|
-----------------
|
||||||
|
@ -235,7 +235,7 @@ end$$ language plpgsql;
|
|||||||
select cachebug();
|
select cachebug();
|
||||||
NOTICE: table "temptable" does not exist, skipping
|
NOTICE: table "temptable" does not exist, skipping
|
||||||
CONTEXT: SQL statement "drop table if exists temptable cascade"
|
CONTEXT: SQL statement "drop table if exists temptable cascade"
|
||||||
PL/pgSQL function "cachebug()" line 4 at SQL statement
|
PL/pgSQL function cachebug() line 4 at SQL statement
|
||||||
NOTICE: 1
|
NOTICE: 1
|
||||||
NOTICE: 2
|
NOTICE: 2
|
||||||
NOTICE: 3
|
NOTICE: 3
|
||||||
@ -247,7 +247,7 @@ NOTICE: 3
|
|||||||
select cachebug();
|
select cachebug();
|
||||||
NOTICE: drop cascades to view vv
|
NOTICE: drop cascades to view vv
|
||||||
CONTEXT: SQL statement "drop table if exists temptable cascade"
|
CONTEXT: SQL statement "drop table if exists temptable cascade"
|
||||||
PL/pgSQL function "cachebug()" line 4 at SQL statement
|
PL/pgSQL function cachebug() line 4 at SQL statement
|
||||||
NOTICE: 1
|
NOTICE: 1
|
||||||
NOTICE: 2
|
NOTICE: 2
|
||||||
NOTICE: 3
|
NOTICE: 3
|
||||||
|
@ -1518,16 +1518,16 @@ ERROR: duplicate key value violates unique constraint "pfield_name"
|
|||||||
DETAIL: Key (name)=(PF1_1) already exists.
|
DETAIL: Key (name)=(PF1_1) already exists.
|
||||||
update PSlot set backlink = 'WS.not.there' where slotname = 'PS.base.a1';
|
update PSlot set backlink = 'WS.not.there' where slotname = 'PS.base.a1';
|
||||||
ERROR: WS.not.there does not exist
|
ERROR: WS.not.there does not exist
|
||||||
CONTEXT: PL/pgSQL function "tg_backlink_a()" line 17 at assignment
|
CONTEXT: PL/pgSQL function tg_backlink_a() line 17 at assignment
|
||||||
update PSlot set backlink = 'XX.illegal' where slotname = 'PS.base.a1';
|
update PSlot set backlink = 'XX.illegal' where slotname = 'PS.base.a1';
|
||||||
ERROR: illegal backlink beginning with XX
|
ERROR: illegal backlink beginning with XX
|
||||||
CONTEXT: PL/pgSQL function "tg_backlink_a()" line 17 at assignment
|
CONTEXT: PL/pgSQL function tg_backlink_a() line 17 at assignment
|
||||||
update PSlot set slotlink = 'PS.not.there' where slotname = 'PS.base.a1';
|
update PSlot set slotlink = 'PS.not.there' where slotname = 'PS.base.a1';
|
||||||
ERROR: PS.not.there does not exist
|
ERROR: PS.not.there does not exist
|
||||||
CONTEXT: PL/pgSQL function "tg_slotlink_a()" line 17 at assignment
|
CONTEXT: PL/pgSQL function tg_slotlink_a() line 17 at assignment
|
||||||
update PSlot set slotlink = 'XX.illegal' where slotname = 'PS.base.a1';
|
update PSlot set slotlink = 'XX.illegal' where slotname = 'PS.base.a1';
|
||||||
ERROR: illegal slotlink beginning with XX
|
ERROR: illegal slotlink beginning with XX
|
||||||
CONTEXT: PL/pgSQL function "tg_slotlink_a()" line 17 at assignment
|
CONTEXT: PL/pgSQL function tg_slotlink_a() line 17 at assignment
|
||||||
insert into HSlot values ('HS', 'base.hub1', 1, '');
|
insert into HSlot values ('HS', 'base.hub1', 1, '');
|
||||||
ERROR: duplicate key value violates unique constraint "hslot_name"
|
ERROR: duplicate key value violates unique constraint "hslot_name"
|
||||||
DETAIL: Key (slotname)=(HS.base.hub1.1 ) already exists.
|
DETAIL: Key (slotname)=(HS.base.hub1.1 ) already exists.
|
||||||
@ -2067,13 +2067,13 @@ end$$ language plpgsql;
|
|||||||
select test_variable_storage();
|
select test_variable_storage();
|
||||||
NOTICE: should see this
|
NOTICE: should see this
|
||||||
CONTEXT: SQL statement "SELECT trap_zero_divide(-100)"
|
CONTEXT: SQL statement "SELECT trap_zero_divide(-100)"
|
||||||
PL/pgSQL function "test_variable_storage()" line 8 at PERFORM
|
PL/pgSQL function test_variable_storage() line 8 at PERFORM
|
||||||
NOTICE: should see this only if -100 <> 0
|
NOTICE: should see this only if -100 <> 0
|
||||||
CONTEXT: SQL statement "SELECT trap_zero_divide(-100)"
|
CONTEXT: SQL statement "SELECT trap_zero_divide(-100)"
|
||||||
PL/pgSQL function "test_variable_storage()" line 8 at PERFORM
|
PL/pgSQL function test_variable_storage() line 8 at PERFORM
|
||||||
NOTICE: should see this only if -100 fits in smallint
|
NOTICE: should see this only if -100 fits in smallint
|
||||||
CONTEXT: SQL statement "SELECT trap_zero_divide(-100)"
|
CONTEXT: SQL statement "SELECT trap_zero_divide(-100)"
|
||||||
PL/pgSQL function "test_variable_storage()" line 8 at PERFORM
|
PL/pgSQL function test_variable_storage() line 8 at PERFORM
|
||||||
test_variable_storage
|
test_variable_storage
|
||||||
-----------------------
|
-----------------------
|
||||||
123456789012
|
123456789012
|
||||||
@ -2397,7 +2397,7 @@ end $$ language plpgsql;
|
|||||||
select namedparmcursor_test7();
|
select namedparmcursor_test7();
|
||||||
ERROR: division by zero
|
ERROR: division by zero
|
||||||
CONTEXT: SQL statement "SELECT 42/0 AS p1, 77 AS p2;"
|
CONTEXT: SQL statement "SELECT 42/0 AS p1, 77 AS p2;"
|
||||||
PL/pgSQL function "namedparmcursor_test7()" line 6 at OPEN
|
PL/pgSQL function namedparmcursor_test7() line 6 at OPEN
|
||||||
-- check that line comments work correctly within the argument list (there
|
-- check that line comments work correctly within the argument list (there
|
||||||
-- is some special handling of this case in the code: the newline after the
|
-- is some special handling of this case in the code: the newline after the
|
||||||
-- comment must be preserved when the argument-evaluating query is
|
-- comment must be preserved when the argument-evaluating query is
|
||||||
@ -2431,7 +2431,7 @@ end;
|
|||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select raise_test1(5);
|
select raise_test1(5);
|
||||||
ERROR: too many parameters specified for RAISE
|
ERROR: too many parameters specified for RAISE
|
||||||
CONTEXT: PL/pgSQL function "raise_test1(integer)" line 3 at RAISE
|
CONTEXT: PL/pgSQL function raise_test1(integer) line 3 at RAISE
|
||||||
create function raise_test2(int) returns int as $$
|
create function raise_test2(int) returns int as $$
|
||||||
begin
|
begin
|
||||||
raise notice 'This message has too few parameters: %, %, %', $1, $1;
|
raise notice 'This message has too few parameters: %, %, %', $1, $1;
|
||||||
@ -2440,7 +2440,7 @@ end;
|
|||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select raise_test2(10);
|
select raise_test2(10);
|
||||||
ERROR: too few parameters specified for RAISE
|
ERROR: too few parameters specified for RAISE
|
||||||
CONTEXT: PL/pgSQL function "raise_test2(integer)" line 3 at RAISE
|
CONTEXT: PL/pgSQL function raise_test2(integer) line 3 at RAISE
|
||||||
-- Test re-RAISE inside a nested exception block. This case is allowed
|
-- Test re-RAISE inside a nested exception block. This case is allowed
|
||||||
-- by Oracle's PL/SQL but was handled differently by PG before 9.1.
|
-- by Oracle's PL/SQL but was handled differently by PG before 9.1.
|
||||||
CREATE FUNCTION reraise_test() RETURNS void AS $$
|
CREATE FUNCTION reraise_test() RETURNS void AS $$
|
||||||
@ -2530,7 +2530,7 @@ begin
|
|||||||
end;$$ language plpgsql;
|
end;$$ language plpgsql;
|
||||||
select missing_return_expr();
|
select missing_return_expr();
|
||||||
ERROR: control reached end of function without RETURN
|
ERROR: control reached end of function without RETURN
|
||||||
CONTEXT: PL/pgSQL function "missing_return_expr()"
|
CONTEXT: PL/pgSQL function missing_return_expr()
|
||||||
drop function void_return_expr();
|
drop function void_return_expr();
|
||||||
drop function missing_return_expr();
|
drop function missing_return_expr();
|
||||||
--
|
--
|
||||||
@ -2582,7 +2582,7 @@ ERROR: column "sqlstate" does not exist
|
|||||||
LINE 1: SELECT sqlstate
|
LINE 1: SELECT sqlstate
|
||||||
^
|
^
|
||||||
QUERY: SELECT sqlstate
|
QUERY: SELECT sqlstate
|
||||||
CONTEXT: PL/pgSQL function "excpt_test1()" line 3 at RAISE
|
CONTEXT: PL/pgSQL function excpt_test1() line 3 at RAISE
|
||||||
create function excpt_test2() returns void as $$
|
create function excpt_test2() returns void as $$
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
@ -2597,7 +2597,7 @@ ERROR: column "sqlstate" does not exist
|
|||||||
LINE 1: SELECT sqlstate
|
LINE 1: SELECT sqlstate
|
||||||
^
|
^
|
||||||
QUERY: SELECT sqlstate
|
QUERY: SELECT sqlstate
|
||||||
CONTEXT: PL/pgSQL function "excpt_test2()" line 5 at RAISE
|
CONTEXT: PL/pgSQL function excpt_test2() line 5 at RAISE
|
||||||
create function excpt_test3() returns void as $$
|
create function excpt_test3() returns void as $$
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
@ -2803,7 +2803,7 @@ $$ language plpgsql;
|
|||||||
-- should fail
|
-- should fail
|
||||||
select continue_test2();
|
select continue_test2();
|
||||||
ERROR: CONTINUE cannot be used outside a loop
|
ERROR: CONTINUE cannot be used outside a loop
|
||||||
CONTEXT: PL/pgSQL function "continue_test2()"
|
CONTEXT: PL/pgSQL function continue_test2()
|
||||||
-- CONTINUE can't reference the label of a named block
|
-- CONTINUE can't reference the label of a named block
|
||||||
create function continue_test3() returns void as $$
|
create function continue_test3() returns void as $$
|
||||||
begin
|
begin
|
||||||
@ -2818,7 +2818,7 @@ $$ language plpgsql;
|
|||||||
-- should fail
|
-- should fail
|
||||||
select continue_test3();
|
select continue_test3();
|
||||||
ERROR: CONTINUE cannot be used outside a loop
|
ERROR: CONTINUE cannot be used outside a loop
|
||||||
CONTEXT: PL/pgSQL function "continue_test3()"
|
CONTEXT: PL/pgSQL function continue_test3()
|
||||||
drop function continue_test1();
|
drop function continue_test1();
|
||||||
drop function continue_test2();
|
drop function continue_test2();
|
||||||
drop function continue_test3();
|
drop function continue_test3();
|
||||||
@ -2979,7 +2979,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select footest();
|
select footest();
|
||||||
ERROR: query returned more than one row
|
ERROR: query returned more than one row
|
||||||
CONTEXT: PL/pgSQL function "footest()" line 5 at SQL statement
|
CONTEXT: PL/pgSQL function footest() line 5 at SQL statement
|
||||||
create or replace function footest() returns void as $$
|
create or replace function footest() returns void as $$
|
||||||
declare x record;
|
declare x record;
|
||||||
begin
|
begin
|
||||||
@ -3042,7 +3042,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select footest();
|
select footest();
|
||||||
ERROR: query returned no rows
|
ERROR: query returned no rows
|
||||||
CONTEXT: PL/pgSQL function "footest()" line 5 at SQL statement
|
CONTEXT: PL/pgSQL function footest() line 5 at SQL statement
|
||||||
create or replace function footest() returns void as $$
|
create or replace function footest() returns void as $$
|
||||||
declare x record;
|
declare x record;
|
||||||
begin
|
begin
|
||||||
@ -3052,7 +3052,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select footest();
|
select footest();
|
||||||
ERROR: query returned more than one row
|
ERROR: query returned more than one row
|
||||||
CONTEXT: PL/pgSQL function "footest()" line 5 at SQL statement
|
CONTEXT: PL/pgSQL function footest() line 5 at SQL statement
|
||||||
create or replace function footest() returns void as $$
|
create or replace function footest() returns void as $$
|
||||||
declare x record;
|
declare x record;
|
||||||
begin
|
begin
|
||||||
@ -3076,7 +3076,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select footest();
|
select footest();
|
||||||
ERROR: query returned no rows
|
ERROR: query returned no rows
|
||||||
CONTEXT: PL/pgSQL function "footest()" line 5 at EXECUTE statement
|
CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement
|
||||||
create or replace function footest() returns void as $$
|
create or replace function footest() returns void as $$
|
||||||
declare x record;
|
declare x record;
|
||||||
begin
|
begin
|
||||||
@ -3086,7 +3086,7 @@ begin
|
|||||||
end$$ language plpgsql;
|
end$$ language plpgsql;
|
||||||
select footest();
|
select footest();
|
||||||
ERROR: query returned more than one row
|
ERROR: query returned more than one row
|
||||||
CONTEXT: PL/pgSQL function "footest()" line 5 at EXECUTE statement
|
CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement
|
||||||
drop function footest();
|
drop function footest();
|
||||||
-- test scrollable cursor support
|
-- test scrollable cursor support
|
||||||
create function sc_test() returns setof integer as $$
|
create function sc_test() returns setof integer as $$
|
||||||
@ -3130,7 +3130,7 @@ $$ language plpgsql;
|
|||||||
select * from sc_test(); -- fails because of NO SCROLL specification
|
select * from sc_test(); -- fails because of NO SCROLL specification
|
||||||
ERROR: cursor can only scan forward
|
ERROR: cursor can only scan forward
|
||||||
HINT: Declare it with SCROLL option to enable backward scan.
|
HINT: Declare it with SCROLL option to enable backward scan.
|
||||||
CONTEXT: PL/pgSQL function "sc_test()" line 7 at FETCH
|
CONTEXT: PL/pgSQL function sc_test() line 7 at FETCH
|
||||||
create or replace function sc_test() returns setof integer as $$
|
create or replace function sc_test() returns setof integer as $$
|
||||||
declare
|
declare
|
||||||
c refcursor;
|
c refcursor;
|
||||||
@ -3717,7 +3717,7 @@ end;
|
|||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select raise_test();
|
select raise_test();
|
||||||
ERROR: RAISE option already specified: MESSAGE
|
ERROR: RAISE option already specified: MESSAGE
|
||||||
CONTEXT: PL/pgSQL function "raise_test()" line 3 at RAISE
|
CONTEXT: PL/pgSQL function raise_test() line 3 at RAISE
|
||||||
-- conflict on errcode
|
-- conflict on errcode
|
||||||
create or replace function raise_test() returns void as $$
|
create or replace function raise_test() returns void as $$
|
||||||
begin
|
begin
|
||||||
@ -3726,7 +3726,7 @@ end;
|
|||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select raise_test();
|
select raise_test();
|
||||||
ERROR: RAISE option already specified: ERRCODE
|
ERROR: RAISE option already specified: ERRCODE
|
||||||
CONTEXT: PL/pgSQL function "raise_test()" line 3 at RAISE
|
CONTEXT: PL/pgSQL function raise_test() line 3 at RAISE
|
||||||
-- nothing to re-RAISE
|
-- nothing to re-RAISE
|
||||||
create or replace function raise_test() returns void as $$
|
create or replace function raise_test() returns void as $$
|
||||||
begin
|
begin
|
||||||
@ -3735,7 +3735,7 @@ end;
|
|||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select raise_test();
|
select raise_test();
|
||||||
ERROR: RAISE without parameters cannot be used outside an exception handler
|
ERROR: RAISE without parameters cannot be used outside an exception handler
|
||||||
CONTEXT: PL/pgSQL function "raise_test()" line 3 at RAISE
|
CONTEXT: PL/pgSQL function raise_test() line 3 at RAISE
|
||||||
-- test access to exception data
|
-- test access to exception data
|
||||||
create function zero_divide() returns int as $$
|
create function zero_divide() returns int as $$
|
||||||
declare v int := 0;
|
declare v int := 0;
|
||||||
@ -3766,7 +3766,7 @@ exception when others then
|
|||||||
end;
|
end;
|
||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select stacked_diagnostics_test();
|
select stacked_diagnostics_test();
|
||||||
NOTICE: sqlstate: 22012, message: division by zero, context: [PL/pgSQL function "zero_divide()" line 4 at RETURN <- SQL statement "SELECT zero_divide()" <- PL/pgSQL function "stacked_diagnostics_test()" line 6 at PERFORM]
|
NOTICE: sqlstate: 22012, message: division by zero, context: [PL/pgSQL function zero_divide() line 4 at RETURN <- SQL statement "SELECT zero_divide()" <- PL/pgSQL function stacked_diagnostics_test() line 6 at PERFORM]
|
||||||
stacked_diagnostics_test
|
stacked_diagnostics_test
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
@ -3808,7 +3808,7 @@ end;
|
|||||||
$$ language plpgsql;
|
$$ language plpgsql;
|
||||||
select stacked_diagnostics_test();
|
select stacked_diagnostics_test();
|
||||||
ERROR: GET STACKED DIAGNOSTICS cannot be used outside an exception handler
|
ERROR: GET STACKED DIAGNOSTICS cannot be used outside an exception handler
|
||||||
CONTEXT: PL/pgSQL function "stacked_diagnostics_test()" line 6 at GET DIAGNOSTICS
|
CONTEXT: PL/pgSQL function stacked_diagnostics_test() line 6 at GET DIAGNOSTICS
|
||||||
drop function zero_divide();
|
drop function zero_divide();
|
||||||
drop function stacked_diagnostics_test();
|
drop function stacked_diagnostics_test();
|
||||||
-- check cases where implicit SQLSTATE variable could be confused with
|
-- check cases where implicit SQLSTATE variable could be confused with
|
||||||
@ -3872,7 +3872,7 @@ select case_test(4);
|
|||||||
select case_test(5); -- fails
|
select case_test(5); -- fails
|
||||||
ERROR: case not found
|
ERROR: case not found
|
||||||
HINT: CASE statement is missing ELSE part.
|
HINT: CASE statement is missing ELSE part.
|
||||||
CONTEXT: PL/pgSQL function "case_test(bigint)" line 5 at CASE
|
CONTEXT: PL/pgSQL function case_test(bigint) line 5 at CASE
|
||||||
select case_test(8);
|
select case_test(8);
|
||||||
case_test
|
case_test
|
||||||
----------------------
|
----------------------
|
||||||
@ -3900,7 +3900,7 @@ select case_test(12);
|
|||||||
select case_test(13); -- fails
|
select case_test(13); -- fails
|
||||||
ERROR: case not found
|
ERROR: case not found
|
||||||
HINT: CASE statement is missing ELSE part.
|
HINT: CASE statement is missing ELSE part.
|
||||||
CONTEXT: PL/pgSQL function "case_test(bigint)" line 5 at CASE
|
CONTEXT: PL/pgSQL function case_test(bigint) line 5 at CASE
|
||||||
create or replace function catch() returns void as $$
|
create or replace function catch() returns void as $$
|
||||||
begin
|
begin
|
||||||
raise notice '%', case_test(6);
|
raise notice '%', case_test(6);
|
||||||
@ -4228,7 +4228,7 @@ SAVEPOINT a;
|
|||||||
select error2('nonexistent.stuffs');
|
select error2('nonexistent.stuffs');
|
||||||
ERROR: schema "nonexistent" does not exist
|
ERROR: schema "nonexistent" does not exist
|
||||||
CONTEXT: SQL function "error1" statement 1
|
CONTEXT: SQL function "error1" statement 1
|
||||||
PL/pgSQL function "error2(text)" line 3 at RETURN
|
PL/pgSQL function error2(text) line 3 at RETURN
|
||||||
ROLLBACK TO a;
|
ROLLBACK TO a;
|
||||||
select error2('public.stuffs');
|
select error2('public.stuffs');
|
||||||
error2
|
error2
|
||||||
@ -4266,7 +4266,7 @@ LINE 1: SELECT 'foo\\bar\041baz'
|
|||||||
^
|
^
|
||||||
HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
|
HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
|
||||||
QUERY: SELECT 'foo\\bar\041baz'
|
QUERY: SELECT 'foo\\bar\041baz'
|
||||||
CONTEXT: PL/pgSQL function "strtest()" line 4 at RETURN
|
CONTEXT: PL/pgSQL function strtest() line 4 at RETURN
|
||||||
strtest
|
strtest
|
||||||
-------------
|
-------------
|
||||||
foo\bar!baz
|
foo\bar!baz
|
||||||
@ -4349,7 +4349,7 @@ ERROR: column "foo" does not exist
|
|||||||
LINE 1: SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomn...
|
LINE 1: SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomn...
|
||||||
^
|
^
|
||||||
QUERY: SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomno
|
QUERY: SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomno
|
||||||
CONTEXT: PL/pgSQL function "inline_code_block" line 4 at FOR over SELECT rows
|
CONTEXT: PL/pgSQL function inline_code_block line 4 at FOR over SELECT rows
|
||||||
-- Check variable scoping -- a var is not available in its own or prior
|
-- Check variable scoping -- a var is not available in its own or prior
|
||||||
-- default expressions.
|
-- default expressions.
|
||||||
create function scope_test() returns int as $$
|
create function scope_test() returns int as $$
|
||||||
@ -4386,7 +4386,7 @@ LINE 1: select q1,q2 from int8_tbl
|
|||||||
^
|
^
|
||||||
DETAIL: It could refer to either a PL/pgSQL variable or a table column.
|
DETAIL: It could refer to either a PL/pgSQL variable or a table column.
|
||||||
QUERY: select q1,q2 from int8_tbl
|
QUERY: select q1,q2 from int8_tbl
|
||||||
CONTEXT: PL/pgSQL function "conflict_test()" line 5 at FOR over SELECT rows
|
CONTEXT: PL/pgSQL function conflict_test() line 5 at FOR over SELECT rows
|
||||||
create or replace function conflict_test() returns setof int8_tbl as $$
|
create or replace function conflict_test() returns setof int8_tbl as $$
|
||||||
#variable_conflict use_variable
|
#variable_conflict use_variable
|
||||||
declare r record;
|
declare r record;
|
||||||
@ -4490,10 +4490,10 @@ $$ language plpgsql;
|
|||||||
-- should fail
|
-- should fail
|
||||||
select foreach_test(ARRAY[1,2,3,4]);
|
select foreach_test(ARRAY[1,2,3,4]);
|
||||||
ERROR: FOREACH ... SLICE loop variable must be of an array type
|
ERROR: FOREACH ... SLICE loop variable must be of an array type
|
||||||
CONTEXT: PL/pgSQL function "foreach_test(anyarray)" line 4 at FOREACH over array
|
CONTEXT: PL/pgSQL function foreach_test(anyarray) line 4 at FOREACH over array
|
||||||
select foreach_test(ARRAY[[1,2],[3,4]]);
|
select foreach_test(ARRAY[[1,2],[3,4]]);
|
||||||
ERROR: FOREACH ... SLICE loop variable must be of an array type
|
ERROR: FOREACH ... SLICE loop variable must be of an array type
|
||||||
CONTEXT: PL/pgSQL function "foreach_test(anyarray)" line 4 at FOREACH over array
|
CONTEXT: PL/pgSQL function foreach_test(anyarray) line 4 at FOREACH over array
|
||||||
create or replace function foreach_test(anyarray)
|
create or replace function foreach_test(anyarray)
|
||||||
returns void as $$
|
returns void as $$
|
||||||
declare x int[];
|
declare x int[];
|
||||||
@ -4533,7 +4533,7 @@ $$ language plpgsql;
|
|||||||
-- should fail
|
-- should fail
|
||||||
select foreach_test(ARRAY[1,2,3,4]);
|
select foreach_test(ARRAY[1,2,3,4]);
|
||||||
ERROR: slice dimension (2) is out of the valid range 0..1
|
ERROR: slice dimension (2) is out of the valid range 0..1
|
||||||
CONTEXT: PL/pgSQL function "foreach_test(anyarray)" line 4 at FOREACH over array
|
CONTEXT: PL/pgSQL function foreach_test(anyarray) line 4 at FOREACH over array
|
||||||
-- ok
|
-- ok
|
||||||
select foreach_test(ARRAY[[1,2],[3,4]]);
|
select foreach_test(ARRAY[[1,2],[3,4]]);
|
||||||
NOTICE: {{1,2},{3,4}}
|
NOTICE: {{1,2},{3,4}}
|
||||||
@ -4694,9 +4694,9 @@ select testoa(1,2,3); -- try again to exercise internal caching
|
|||||||
|
|
||||||
select testoa(2,1,3); -- fail at initial assign
|
select testoa(2,1,3); -- fail at initial assign
|
||||||
ERROR: value for domain orderedarray violates check constraint "sorted"
|
ERROR: value for domain orderedarray violates check constraint "sorted"
|
||||||
CONTEXT: PL/pgSQL function "testoa(integer,integer,integer)" line 4 at assignment
|
CONTEXT: PL/pgSQL function testoa(integer,integer,integer) line 4 at assignment
|
||||||
select testoa(1,2,1); -- fail at update
|
select testoa(1,2,1); -- fail at update
|
||||||
ERROR: value for domain orderedarray violates check constraint "sorted"
|
ERROR: value for domain orderedarray violates check constraint "sorted"
|
||||||
CONTEXT: PL/pgSQL function "testoa(integer,integer,integer)" line 5 at assignment
|
CONTEXT: PL/pgSQL function testoa(integer,integer,integer) line 5 at assignment
|
||||||
drop function arrayassign1();
|
drop function arrayassign1();
|
||||||
drop function testoa(x1 int, x2 int, x3 int);
|
drop function testoa(x1 int, x2 int, x3 int);
|
||||||
|
@ -965,10 +965,10 @@ NOTICE: main_view INSTEAD OF INSERT ROW (instead_of_ins)
|
|||||||
NOTICE: NEW: (20,30)
|
NOTICE: NEW: (20,30)
|
||||||
NOTICE: trigger_func(before_ins_stmt) called: action = INSERT, when = BEFORE, level = STATEMENT
|
NOTICE: trigger_func(before_ins_stmt) called: action = INSERT, when = BEFORE, level = STATEMENT
|
||||||
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
||||||
PL/pgSQL function "view_trigger()" line 17 at SQL statement
|
PL/pgSQL function view_trigger() line 17 at SQL statement
|
||||||
NOTICE: trigger_func(after_ins_stmt) called: action = INSERT, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_ins_stmt) called: action = INSERT, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
||||||
PL/pgSQL function "view_trigger()" line 17 at SQL statement
|
PL/pgSQL function view_trigger() line 17 at SQL statement
|
||||||
NOTICE: main_view AFTER INSERT STATEMENT (after_view_ins_stmt)
|
NOTICE: main_view AFTER INSERT STATEMENT (after_view_ins_stmt)
|
||||||
INSERT 0 1
|
INSERT 0 1
|
||||||
INSERT INTO main_view VALUES (21, 31) RETURNING a, b;
|
INSERT INTO main_view VALUES (21, 31) RETURNING a, b;
|
||||||
@ -977,10 +977,10 @@ NOTICE: main_view INSTEAD OF INSERT ROW (instead_of_ins)
|
|||||||
NOTICE: NEW: (21,31)
|
NOTICE: NEW: (21,31)
|
||||||
NOTICE: trigger_func(before_ins_stmt) called: action = INSERT, when = BEFORE, level = STATEMENT
|
NOTICE: trigger_func(before_ins_stmt) called: action = INSERT, when = BEFORE, level = STATEMENT
|
||||||
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
||||||
PL/pgSQL function "view_trigger()" line 17 at SQL statement
|
PL/pgSQL function view_trigger() line 17 at SQL statement
|
||||||
NOTICE: trigger_func(after_ins_stmt) called: action = INSERT, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_ins_stmt) called: action = INSERT, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)"
|
||||||
PL/pgSQL function "view_trigger()" line 17 at SQL statement
|
PL/pgSQL function view_trigger() line 17 at SQL statement
|
||||||
NOTICE: main_view AFTER INSERT STATEMENT (after_view_ins_stmt)
|
NOTICE: main_view AFTER INSERT STATEMENT (after_view_ins_stmt)
|
||||||
a | b
|
a | b
|
||||||
----+----
|
----+----
|
||||||
@ -995,16 +995,16 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd)
|
|||||||
NOTICE: OLD: (20,30), NEW: (20,31)
|
NOTICE: OLD: (20,30), NEW: (20,31)
|
||||||
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW
|
NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
||||||
UPDATE 0
|
UPDATE 0
|
||||||
UPDATE main_view SET b = 32 WHERE a = 21 AND b = 31 RETURNING a, b;
|
UPDATE main_view SET b = 32 WHERE a = 21 AND b = 31 RETURNING a, b;
|
||||||
@ -1013,16 +1013,16 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd)
|
|||||||
NOTICE: OLD: (21,31), NEW: (21,32)
|
NOTICE: OLD: (21,31), NEW: (21,32)
|
||||||
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW
|
NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
||||||
a | b
|
a | b
|
||||||
---+---
|
---+---
|
||||||
@ -1038,19 +1038,19 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd)
|
|||||||
NOTICE: OLD: (20,30), NEW: (20,31)
|
NOTICE: OLD: (20,30), NEW: (20,31)
|
||||||
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_a_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
NOTICE: trigger_func(after_upd_a_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
NOTICE: trigger_func(after_upd_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
||||||
UPDATE 1
|
UPDATE 1
|
||||||
UPDATE main_view SET b = 32 WHERE a = 21 AND b = 31 RETURNING a, b;
|
UPDATE main_view SET b = 32 WHERE a = 21 AND b = 31 RETURNING a, b;
|
||||||
@ -1059,19 +1059,19 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd)
|
|||||||
NOTICE: OLD: (21,31), NEW: (21,32)
|
NOTICE: OLD: (21,31), NEW: (21,32)
|
||||||
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_a_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
NOTICE: trigger_func(after_upd_a_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
NOTICE: trigger_func(after_upd_b_row) called: action = UPDATE, when = AFTER, level = ROW
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT
|
||||||
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b"
|
||||||
PL/pgSQL function "view_trigger()" line 23 at SQL statement
|
PL/pgSQL function view_trigger() line 23 at SQL statement
|
||||||
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt)
|
||||||
a | b
|
a | b
|
||||||
----+----
|
----+----
|
||||||
@ -1503,28 +1503,28 @@ insert into depth_a values (1);
|
|||||||
NOTICE: depth_a_tr: depth = 1
|
NOTICE: depth_a_tr: depth = 1
|
||||||
NOTICE: depth_b_tr: depth = 2
|
NOTICE: depth_b_tr: depth = 2
|
||||||
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_c_tr: depth = 3
|
NOTICE: depth_c_tr: depth = 3
|
||||||
CONTEXT: SQL statement "insert into depth_c values (1)"
|
CONTEXT: SQL statement "insert into depth_c values (1)"
|
||||||
PL/pgSQL function "depth_b_tf()" line 5 at EXECUTE statement
|
PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement
|
||||||
SQL statement "insert into depth_b values (new.id)"
|
SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: SQLSTATE = U9999: depth = 2
|
NOTICE: SQLSTATE = U9999: depth = 2
|
||||||
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_b_tr: depth = 2
|
NOTICE: depth_b_tr: depth = 2
|
||||||
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_c_tr: depth = 3
|
NOTICE: depth_c_tr: depth = 3
|
||||||
CONTEXT: SQL statement "insert into depth_c values (1)"
|
CONTEXT: SQL statement "insert into depth_c values (1)"
|
||||||
PL/pgSQL function "depth_b_tf()" line 12 at EXECUTE statement
|
PL/pgSQL function depth_b_tf() line 12 at EXECUTE statement
|
||||||
SQL statement "insert into depth_b values (new.id)"
|
SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
ERROR: U9999
|
ERROR: U9999
|
||||||
CONTEXT: SQL statement "insert into depth_c values (1)"
|
CONTEXT: SQL statement "insert into depth_c values (1)"
|
||||||
PL/pgSQL function "depth_b_tf()" line 12 at EXECUTE statement
|
PL/pgSQL function depth_b_tf() line 12 at EXECUTE statement
|
||||||
SQL statement "insert into depth_b values (new.id)"
|
SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
select pg_trigger_depth();
|
select pg_trigger_depth();
|
||||||
pg_trigger_depth
|
pg_trigger_depth
|
||||||
------------------
|
------------------
|
||||||
@ -1535,20 +1535,20 @@ insert into depth_a values (2);
|
|||||||
NOTICE: depth_a_tr: depth = 1
|
NOTICE: depth_a_tr: depth = 1
|
||||||
NOTICE: depth_b_tr: depth = 2
|
NOTICE: depth_b_tr: depth = 2
|
||||||
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_c_tr: depth = 3
|
NOTICE: depth_c_tr: depth = 3
|
||||||
CONTEXT: SQL statement "insert into depth_c values (2)"
|
CONTEXT: SQL statement "insert into depth_c values (2)"
|
||||||
PL/pgSQL function "depth_b_tf()" line 5 at EXECUTE statement
|
PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement
|
||||||
SQL statement "insert into depth_b values (new.id)"
|
SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_c_tr: depth = 3
|
NOTICE: depth_c_tr: depth = 3
|
||||||
CONTEXT: SQL statement "insert into depth_c values (2)"
|
CONTEXT: SQL statement "insert into depth_c values (2)"
|
||||||
PL/pgSQL function "depth_b_tf()" line 5 at EXECUTE statement
|
PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement
|
||||||
SQL statement "insert into depth_b values (new.id)"
|
SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_b_tr: depth = 2
|
NOTICE: depth_b_tr: depth = 2
|
||||||
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
CONTEXT: SQL statement "insert into depth_b values (new.id)"
|
||||||
PL/pgSQL function "depth_a_tf()" line 4 at SQL statement
|
PL/pgSQL function depth_a_tf() line 4 at SQL statement
|
||||||
NOTICE: depth_a_tr: depth = 1
|
NOTICE: depth_a_tr: depth = 1
|
||||||
select pg_trigger_depth();
|
select pg_trigger_depth();
|
||||||
pg_trigger_depth
|
pg_trigger_depth
|
||||||
|
Loading…
x
Reference in New Issue
Block a user