Обсуждение: How to \ef a function ?
atletx7-reg017:/home/dgauthie[ 120 ] --> dvdbdev
Pager usage is off.
psql (11.5, server 11.3)
Type "help" for help.
dvdb=# \df opid.bef_ins_axi_reqs_set_trig;
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+---------------------------+------------------+---------------------+------
opid | bef_ins_axi_reqs_set_trig | trigger | | func
(1 row)
dvdb=# \ef opid.bef_ins_axi_reqs_set_trig;
ERROR: function "opid.bef_ins_axi_reqs_set_trig;" does not exist
dvdb=# \ef opid.bef_ins_axi_reqs_set_trig();
ERROR: expected a right parenthesis
dvdb=#
Pager usage is off.
psql (11.5, server 11.3)
Type "help" for help.
dvdb=# \df opid.bef_ins_axi_reqs_set_trig;
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+---------------------------+------------------+---------------------+------
opid | bef_ins_axi_reqs_set_trig | trigger | | func
(1 row)
dvdb=# \ef opid.bef_ins_axi_reqs_set_trig;
ERROR: function "opid.bef_ins_axi_reqs_set_trig;" does not exist
dvdb=# \ef opid.bef_ins_axi_reqs_set_trig();
ERROR: expected a right parenthesis
dvdb=#
So the function exists with \df but not \ef ?
I get the need to identify the argument list (in case there's >1 with same name, diff arg list), but '()' doesn't work. Does this have to do with the returned trigger type ?
I get the need to identify the argument list (in case there's >1 with same name, diff arg list), but '()' doesn't work. Does this have to do with the returned trigger type ?
On 1/8/24 08:26, David Gauthier wrote: > atletx7-reg017:/home/dgauthie[ 120 ] --> dvdbdev > Pager usage is off. > psql (11.5, server 11.3) > Type "help" for help. > > dvdb=# \df opid.bef_ins_axi_reqs_set_trig; > List of functions > Schema | Name | Result data type | Argument data > types | Type > --------+---------------------------+------------------+---------------------+------ > opid | bef_ins_axi_reqs_set_trig | trigger | > | func > (1 row) > > dvdb=# \ef opid.bef_ins_axi_reqs_set_trig; > ERROR: function "opid.bef_ins_axi_reqs_set_trig;" does not exist Lose the ';'. It should be: \ef opid.bef_ins_axi_reqs_set_trig > dvdb=# \ef opid.bef_ins_axi_reqs_set_trig(); > ERROR: expected a right parenthesis > dvdb=# > > So the function exists with \df but not \ef ? > I get the need to identify the argument list (in case there's >1 with > same name, diff arg list), but '()' doesn't work. Does this have to do > with the returned trigger type ? > -- Adrian Klaver adrian.klaver@aklaver.com
Adrian Klaver <adrian.klaver@aklaver.com> writes: > On 1/8/24 08:26, David Gauthier wrote: >> dvdb=# \ef opid.bef_ins_axi_reqs_set_trig; >> ERROR: function "opid.bef_ins_axi_reqs_set_trig;" does not exist > Lose the ';'. > It should be: > \ef opid.bef_ins_axi_reqs_set_trig Yeah, that's what psql is expecting, but it does seem a bit unforgiving considering that you can write a noise semicolon in many other backslash commands. And this: >> dvdb=# \ef opid.bef_ins_axi_reqs_set_trig(); >> ERROR: expected a right parenthesis seems outright buggy. I've not looked at the code though. regards, tom lane
I wrote: > Yeah, that's what psql is expecting, but it does seem a bit > unforgiving considering that you can write a noise semicolon > in many other backslash commands. And this: > dvdb=# \ef opid.bef_ins_axi_reqs_set_trig(); > ERROR: expected a right parenthesis > seems outright buggy. I've not looked at the code though. Ah, I see it. The difference in the error messages is because \ef feeds the whole argument to regprocin to find out the function OID if there are no parens, but regprocedurein if there are parens. Neither of those functions like the trailing semicolon, but their complaints are different. More interestingly, \ef is actually trying to ignore trailing semicolons: exec_command_ef_ev tells psql_scan_slash_option to do so. But it's using OT_WHOLE_LINE mode and that function ignores the request in that mode. So that seems like an oversight. regards, tom lane