How do a user-defined function that returns a table executes a query?

Started by Katsuya Okizakiabout 3 years ago5 messagesgeneral
Jump to latest
#1Katsuya Okizaki
miotsukushi0800@gmail.com

Hi everyone,

I hope this message finds you in good health and spirits. I am reaching out
to this incredible community for some guidance and advice. I am currently
trying to understand how a user-defined function that returns a table
executes a query.

In a normal SQL, we can use the EXPLAIN command to view the execution plan.
However, in this case, I am not sure how a user-defined function work.

If anyone has faced a similar situation and found a way to view the
execution plan, I would greatly appreciate your insights and suggestions.

Thank you for taking the time to read my message. I look forward to hearing
from you.

Best regards,

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Katsuya Okizaki (#1)
Re: How do a user-defined function that returns a table executes a query?

On Tue, Feb 7, 2023 at 4:49 PM Katsuya Okizaki <miotsukushi0800@gmail.com>
wrote:

In a normal SQL, we can use the EXPLAIN command to view the execution
plan. However, in this case, I am not sure how a user-defined function work.

If anyone has faced a similar situation and found a way to view the
execution plan, I would greatly appreciate your insights and suggestions.

https://www.postgresql.org/docs/current/auto-explain.html

David J.

#3Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Katsuya Okizaki (#1)
Re: How do a user-defined function that returns a table executes a query?

On Wed, 2023-02-08 at 08:49 +0900, Katsuya Okizaki wrote:

In a normal SQL, we can use the EXPLAIN command to view the execution plan.
However, in this case, I am not sure how a user-defined function work.

If anyone has faced a similar situation and found a way to view the execution plan,
I would greatly appreciate your insights and suggestions.

I am not sure which of the following you want:

1. Get the execution plan of SQL statements run inside a function:

For that, you would use "auto_explain" with "auto_explain.log_nested_statements = on".

2. Get a trace of the execution of the function code itself:

For PL/pgSQL, there is "pldebugger" (https://github.com/EnterpriseDB/pldebugger),
which can be used together with pgAdmin.

I usually sprinkle the code with RAISE NOTICE statements.

Yours,
Laurenz Albe
--
Cybertec | https://www.cybertec-postgresql.com

#4Katsuya Okizaki
miotsukushi0800@gmail.com
In reply to: David G. Johnston (#2)
Re: How do a user-defined function that returns a table executes a query?

Dear David,

Thank you for your prompt reply.

This is exactly what I was looking for. Thank you for your help.

Best regards,
Katsuya Okizaki

2023年2月8日(水) 8:51 David G. Johnston <david.g.johnston@gmail.com>:

Show quoted text

On Tue, Feb 7, 2023 at 4:49 PM Katsuya Okizaki <miotsukushi0800@gmail.com>
wrote:

In a normal SQL, we can use the EXPLAIN command to view the execution
plan. However, in this case, I am not sure how a user-defined function work.

If anyone has faced a similar situation and found a way to view the
execution plan, I would greatly appreciate your insights and suggestions.

https://www.postgresql.org/docs/current/auto-explain.html

David J.

#5Katsuya Okizaki
miotsukushi0800@gmail.com
In reply to: Laurenz Albe (#3)
Re: How do a user-defined function that returns a table executes a query?

Dear Laurenz,

Thank you for your help. As you suspected, I was seeking a way to view the
execution plan of a function defined in SQL. Your suggestion was exactly
what I needed and has been very helpful.

Additionally, I also appreciated learning about the debugging techniques
for PL/pgSQL. Thank you for your valuable advice.

Best regards,

Katsuya Okizaki

2023年2月8日(水) 19:18 Laurenz Albe <laurenz.albe@cybertec.at>:

Show quoted text

On Wed, 2023-02-08 at 08:49 +0900, Katsuya Okizaki wrote:

In a normal SQL, we can use the EXPLAIN command to view the execution

plan.

However, in this case, I am not sure how a user-defined function work.

If anyone has faced a similar situation and found a way to view the

execution plan,

I would greatly appreciate your insights and suggestions.

I am not sure which of the following you want:

1. Get the execution plan of SQL statements run inside a function:

For that, you would use "auto_explain" with
"auto_explain.log_nested_statements = on".

2. Get a trace of the execution of the function code itself:

For PL/pgSQL, there is "pldebugger" (
https://github.com/EnterpriseDB/pldebugger),
which can be used together with pgAdmin.

I usually sprinkle the code with RAISE NOTICE statements.

Yours,
Laurenz Albe
--
Cybertec | https://www.cybertec-postgresql.com