BUG #19034: Recursive function with sql_body can replace an existing function but can not be created on it's own
От | PG Bug reporting form |
---|---|
Тема | BUG #19034: Recursive function with sql_body can replace an existing function but can not be created on it's own |
Дата | |
Msg-id | 19034-de0857b4f94ec10c@postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #19034: Recursive function with sql_body can replace an existing function but can not be created on it's own
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 19034 Logged by: Katja Henke Email address: katja.henke@foo.ag PostgreSQL version: 15.3 Operating system: Linux Description: An existing function can be converted into a recursive function that uses sql_body. But it is not possible to create this same recursive function using CREATE FUNCTION. In other words: if you managed to have a recursive function with sql_body in your database, you can't simply restore a dump of this database. The following statement results in ERROR: 42883: function pg_temp.do_something(integer) does not exist CREATE FUNCTION pg_temp.do_something(int) RETURNS int LANGUAGE sql RETURN CASE WHEN $1 % 2 = 1 THEN pg_temp.do_something($1 + 1) ELSE $1 END; But the combination of the following statements works. It does not matter if the first function uses sql_body or a string constant. CREATE FUNCTION pg_temp.do_something(int) RETURNS int LANGUAGE sql RETURN 42; CREATE OR REPLACE FUNCTION pg_temp.do_something(int) RETURNS int LANGUAGE sql RETURN CASE WHEN $1 % 2 = 1 THEN pg_temp.do_something($1 + 1) ELSE $1 END;
В списке pgsql-bugs по дате отправления: