Re: After 10 -> 15 upgrade getting "cannot commit while a portal is pinned" on one python function
Jeff Ross <jross@openvistas.net>
From: Jeff Ross <jross@openvistas.net>
To: pgsql-general@lists.postgresql.org
Date: 2024-03-21T15:17:06Z
Lists: pgsql-general
On 3/20/24 17:13, Adrian Klaver wrote: > On 3/20/24 15:52, Jeff Ross wrote: >> On 3/20/24 16:25, Adrian Klaver wrote: >> >>> On 3/20/24 15:18, Jeff Ross wrote: >>>> Greetings! >>>> >>>> I built a trigger fired process that copies an "order" from our >>>> production database to our dev database. An order, in this case, >>>> is an initial row from a table and all of the rows in all of the >>>> tables in that database/schema that are needed to satisfy all of >>>> the foreign key constraints for the original insert. Through a web >>>> page, one of our folks can select a schema and an order id to >>>> copy. That information is then inserted into a table. A trigger >>>> attached to that table takes care of copying the necessary rows >>>> using a function that uses both plython3u and psycopg2. I can >>>> supply the source code if that will help. >>> >>> I think that will help, especially the interaction between psycopg2 >>> and plpython3u. >>> >> As requested: >> >> https://openvistas.net/copy_orders_to_dev.html > > 1) I have not gone through this thoroughly enough to figure out what > is going on. > > 2) Things I have noticed, may not be relevant. > > a) from psycopg2 import sql > Never used. > I have a base template that I use for complex functions--this is a part of that. Never caused a problem before. > b) #prod_database_connection.set_session(autocommit=True) > #dev_database_connection.set_session(autocommit=True) > > Why are they commented out? If autocommit is on, the following fails: NOTICE: 217, create temp table if not exists load_temp (like wholesale.load including all) on commit drop; truncate load_temp; ERROR: psycopg2.errors.UndefinedTable: relation "load_temp" does not exist > > c) prod_database_connection_string = "host='pgbouncer' dbname='%s' > application_name = '%s'" > > dev_database_connection_string = "host='pgbouncer' dbname='%s' > application_name = '%s'" > > What version of PgBouncer? > [rossj@cron ~]$ pgbouncer -V PgBouncer 1.21.0 libevent 2.0.21-stable adns: evdns2 tls: OpenSSL 1.0.2k-fips 26 Jan 2017 > How is it setup? session mode? > > d) Why predefine all those cursors()? Why not? Sort of part of the template and the psycopg2 docs say that cursors are cheap. > > e) Why is database global? I think that's also a holdover from a previous function that I imported into this. Thanks for the reply--gave me a good chance to do a little cleanup. The error is happening when psycopg2 is trying to commit so I'll also ask there. Jeff