Re: Segment fault when excuting SPI function On PG with commit 41c6a5be
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: "liuhuailing@fujitsu.com" <liuhuailing@fujitsu.com>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2021-07-30T12:38:01Z
Lists: pgsql-hackers
On Fri, Jul 30, 2021 at 08:57:35AM +0000, liuhuailing@fujitsu.com wrote: > When I used SPI_execute_plan function on PG12 which commit 41c6a5be is used, > Segment fault occurred. > > PS: If commit 41c6a5be is not used, this phenomenon will not happen. I see nothing wrong in this commit, FWIW. > Reproduce: > In a background process, the following steps are executed. > -------------------------- > StartTransactionCommand(); > SPI_connect(); > plan = SPI_prepare(query,0,NULL); ★the query is a SELECT SQL. > SPI_keepplan(plan); > SPI_finish(); > CommitTransactionCommand(); > StartTransactionCommand(); > SPI_connect(); > SPI_execute_plan(plan, NULL, NULL, true, 0); ★Segment fault > -------------------------- But I see an issue with your code. It seems to me that you should push a snapshot before doing SPI_prepare() and SPI_execute_plan(), as of: PushActiveSnapshot(GetTransactionSnapshot()); -- Michael
Commits
-
Use elog, not Assert, to report failure to provide an outer snapshot.
- f260436459a6 12.8 landed
- ef12f32c0870 15.0 landed
- ec410c985e6d 14.0 landed
- cefb1230e7aa 11.13 landed
- 93f99693f9c2 13.4 landed
-
Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.
- 41c6a5bec25e 12.8 cited