On Wed, Apr 18, 2018 at 9:02 PM, <r...@raf.org> wrote:

> Hi,
>
> postgresql-9.5.12 on debian-9
>
> I have a stored function with code that looks like:
>
>     create or replace function tla_audit_delete_thing()
>     returns boolean stable language plpgsql as $$
>     declare
>         r record;
>         status boolean := 1;
>     begin
>         for r in select _.* from blah_history _ where _.original_id not in
> (select id from blah)
>         loop
>             raise notice '% %', 'blah_history.original_id', r;
>             status := 0;
>     end loop;
>     [...]
>     end
>     $$
>     security definer
>     set search_path = public, pg_temp;
>     revoke all on function tla_audit_delete_thing() from public;
>     grant execute on function tla_audit_delete_thing() to staff;
>
> And I have a program that loads stored functions from disk
> when they are different to what's in the database and I have
> just loaded a very old database backup, brought the schema up
> to date, and tried to bring the stored functions up to date.
>
> But I'm getting this compilation error when it tries to load this
> function:
>
>     ERROR:  too many parameters specified for RAISE
>     CONTEXT:  compilation of PL/pgSQL function "tla_audit_delete_thing"
> near line 9
>
>     Traceback (most recent call last):
>       File "lib/loadfunc.py", line 228, in main
>         db.cursor().execute(src)
>       File "/usr/lib/python2.7/dist-packages/pgdb.py", line 1026, in
> execute
>         return self.executemany(operation, [parameters])
>       File "/usr/lib/python2.7/dist-packages/pgdb.py", line 1050, in
> executemany
>         rows = self._src.execute(sql)
>     ProgrammingError: ERROR:  too many parameters specified for RAISE
>     CONTEXT:  compilation of PL/pgSQL function "tla_audit_delete_thing"
> near line 9
>
> The line in question is:
>
>     raise notice '% %', 'blah_history.original_id', r;
>
> Which looks fine. The really wierd thing is that this happens when done on
> a
> debian9 host but when I load the function from another host (my macos
> laptop)
> with the same function into the same database, it works fine.
>
> I've never encountered an inconsistency like this before.
>
> Any suggestions as to what might be causing it?
>
> The python versions are slightly different and the pgdb module versions
> are different but I wouldn't have thought that that would affect the
> compilation performed by the database server itself:
>
>   debian9:       python-2.7.13 pgdb-5.0.3
>   macos-10.11.6: python-2.7.14 pgdb-4.2.2
>
> And the sql sent to the database server is identical from both hosts.
>
> And I don't think anything much has changed on the debian host recently.
>
> And it's not just the old backup. The same is happening with other copies
> of
> essentially the same database.
>
> And all the other stored functions were loaded fine. It's just this one
> that
> went wrong.
>
> Thanks in advance for any insights you can share.
>
> cheers,
> raf
>
>
>









*>The line in question is:>>    raise notice '% %',
'blah_history.original_id', r;>>Which looks fine. It is not fine. You have
specifed TWO percent signs (%) which requires TWO argumenrts,but you have
only provided ONE -> r.*

*Hence->  ERROR:  too many parameters specified for RAISE *





*https://www.postgresql.org/docs/9.6/static/plpgsql-errors-and-messages.html#PLPGSQL-STATEMENTS-RAISE
<https://www.postgresql.org/docs/9.6/static/plpgsql-errors-and-messages.html#PLPGSQL-STATEMENTS-RAISE>"
Inside the format string, % is replaced by the string representation of the
next optional argument's value"*--
*Melvin Davidson*
*Maj. Database & Exploration Specialist*
*Universe Exploration Command – UXC*
Employment by invitation only!

Reply via email to