| From: | Michał "phoe" Herda <phoe(at)disroot(dot)org> |
|---|---|
| To: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Subject: | Allow any[] as input arguments for sql/plpgsql functions to mimic format() |
| Date: | 2019-04-21 22:03:06 |
| Message-ID: | 2da25b68-b7d9-bca0-9c95-59cdf0cf415a@disroot.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hey everyone,
I am writing a plpgsql function that (to greatly simplify) raises an
exception with a formatted* message. Ideally, I should be able to call
it with raise_exception('The person %I has only %I bananas.', 'Fred',
8), which mimics the format(text, any[]) calling convention.
Here is where I have encountered a limitation of PostgreSQL's design:
https://www.postgresql.org/docs/11/datatype-pseudo.html mentions
explicitly that, "At present most procedural languages forbid use of a
pseudo-type as an argument type".
My reasoning is that I should be able to accept a value of some type if
all I do is passing it to a function that accepts exactly that type,
such as format(text, any[]). Given the technical reality, I assume that
I wouldn't be able to do anything else with that value, but that is
fine, since I don't have to do anything with it regardless.
BR
Michał "phoe" Herda
*I do not want to use the obvious solution of
raise_exception(format(...)) because the argument to that function is
the error ID that is then looked up in a table from which the error
message and sqlstate are retrieved. My full code is in the attached SQL
file. Once it is executed:
SELECT gateway_error('user_does_not_exist', '2'); -- works but is unnatural,
SELECT gateway_error('user_does_not_exist', 2); -- is natural but
doesn't work.
| Attachment | Content-Type | Size |
|---|---|---|
| install-errors.sql | application/sql | 3.8 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Robert Haas | 2019-04-21 22:24:50 | Re: finding changed blocks using WAL scanning |
| Previous Message | David Fetter | 2019-04-21 21:38:20 | Re: [PATCH v1] Add \echo_stderr to psql |