Commit inside postgressql11 procedure throwing error when call from sqlalchemy engine
up vote
0
down vote
favorite
Postgres Version : 11
Procedure code:
CREATE OR REPLACE PROCEDURE public.prc_insert_proc(table_name character varying)
LANGUAGE plpgsql
AS $procedure$ declare StartTime timestamptz;
EndTime timestamptz;
Delta double precision;
err_context text;
tab_partition RECORD;
v_tab_partition varchar;
begin
for tab_partition in (SELECT
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname=table_name) loop
v_tab_partition = tab_partition.child;
begin
execute 'insert
into
test_tab (id,
report_date,
effective_asof_date,
effective_until_date,
active_flag) select id,
to_date(report_date,''YYMMDD'') report_date,
now(),
''31-Dec-2200'',
''Y''
from '||
tab_partition.child ||' on
conflict (id) do update set report_date=excluded.report_date;';
commit;
end;
end loop;
exception
when others then
GET STACKED DIAGNOSTICS err_context = PG_EXCEPTION_CONTEXT;
RAISE INFO 'Error Name:%',SQLERRM;
RAISE INFO 'Error State:%', SQLSTATE;
RAISE INFO 'Error Context:%', err_context;
end;
$procedure$;
I am calling above procedure by creating sqlalchemy engine and then calling this procedure.
def load_test(session, table, log): # pragma: no cover
try:
sql = "call prc_insert_proc('" +
table + "');"
session.execute(text(sql).execution_options(autocommit=False))
session.commit()
except ErrorBase as e:
log.error(f"{str(e)}")
raise
It is throwing up following error. Session was created using sessionmaker and create_engine.
engine = create_engine(config.connection_string, echo=False)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
invalid transaction termination
I am pretty new to both sqlalchemy and PostgreSQL.Each partition of the table has about a million record and I want to commit after every insert. Other option would be get the list of partition in the python script and add partition name parameter in procedure. Loop through the procedure in python and commit after every call. However, when I read that in PostgreSQL 11 we can commit inside the procedure than I thought of using that.
python postgresql sqlalchemy postgresql-11
add a comment |
up vote
0
down vote
favorite
Postgres Version : 11
Procedure code:
CREATE OR REPLACE PROCEDURE public.prc_insert_proc(table_name character varying)
LANGUAGE plpgsql
AS $procedure$ declare StartTime timestamptz;
EndTime timestamptz;
Delta double precision;
err_context text;
tab_partition RECORD;
v_tab_partition varchar;
begin
for tab_partition in (SELECT
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname=table_name) loop
v_tab_partition = tab_partition.child;
begin
execute 'insert
into
test_tab (id,
report_date,
effective_asof_date,
effective_until_date,
active_flag) select id,
to_date(report_date,''YYMMDD'') report_date,
now(),
''31-Dec-2200'',
''Y''
from '||
tab_partition.child ||' on
conflict (id) do update set report_date=excluded.report_date;';
commit;
end;
end loop;
exception
when others then
GET STACKED DIAGNOSTICS err_context = PG_EXCEPTION_CONTEXT;
RAISE INFO 'Error Name:%',SQLERRM;
RAISE INFO 'Error State:%', SQLSTATE;
RAISE INFO 'Error Context:%', err_context;
end;
$procedure$;
I am calling above procedure by creating sqlalchemy engine and then calling this procedure.
def load_test(session, table, log): # pragma: no cover
try:
sql = "call prc_insert_proc('" +
table + "');"
session.execute(text(sql).execution_options(autocommit=False))
session.commit()
except ErrorBase as e:
log.error(f"{str(e)}")
raise
It is throwing up following error. Session was created using sessionmaker and create_engine.
engine = create_engine(config.connection_string, echo=False)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
invalid transaction termination
I am pretty new to both sqlalchemy and PostgreSQL.Each partition of the table has about a million record and I want to commit after every insert. Other option would be get the list of partition in the python script and add partition name parameter in procedure. Loop through the procedure in python and commit after every call. However, when I read that in PostgreSQL 11 we can commit inside the procedure than I thought of using that.
python postgresql sqlalchemy postgresql-11
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Postgres Version : 11
Procedure code:
CREATE OR REPLACE PROCEDURE public.prc_insert_proc(table_name character varying)
LANGUAGE plpgsql
AS $procedure$ declare StartTime timestamptz;
EndTime timestamptz;
Delta double precision;
err_context text;
tab_partition RECORD;
v_tab_partition varchar;
begin
for tab_partition in (SELECT
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname=table_name) loop
v_tab_partition = tab_partition.child;
begin
execute 'insert
into
test_tab (id,
report_date,
effective_asof_date,
effective_until_date,
active_flag) select id,
to_date(report_date,''YYMMDD'') report_date,
now(),
''31-Dec-2200'',
''Y''
from '||
tab_partition.child ||' on
conflict (id) do update set report_date=excluded.report_date;';
commit;
end;
end loop;
exception
when others then
GET STACKED DIAGNOSTICS err_context = PG_EXCEPTION_CONTEXT;
RAISE INFO 'Error Name:%',SQLERRM;
RAISE INFO 'Error State:%', SQLSTATE;
RAISE INFO 'Error Context:%', err_context;
end;
$procedure$;
I am calling above procedure by creating sqlalchemy engine and then calling this procedure.
def load_test(session, table, log): # pragma: no cover
try:
sql = "call prc_insert_proc('" +
table + "');"
session.execute(text(sql).execution_options(autocommit=False))
session.commit()
except ErrorBase as e:
log.error(f"{str(e)}")
raise
It is throwing up following error. Session was created using sessionmaker and create_engine.
engine = create_engine(config.connection_string, echo=False)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
invalid transaction termination
I am pretty new to both sqlalchemy and PostgreSQL.Each partition of the table has about a million record and I want to commit after every insert. Other option would be get the list of partition in the python script and add partition name parameter in procedure. Loop through the procedure in python and commit after every call. However, when I read that in PostgreSQL 11 we can commit inside the procedure than I thought of using that.
python postgresql sqlalchemy postgresql-11
Postgres Version : 11
Procedure code:
CREATE OR REPLACE PROCEDURE public.prc_insert_proc(table_name character varying)
LANGUAGE plpgsql
AS $procedure$ declare StartTime timestamptz;
EndTime timestamptz;
Delta double precision;
err_context text;
tab_partition RECORD;
v_tab_partition varchar;
begin
for tab_partition in (SELECT
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname=table_name) loop
v_tab_partition = tab_partition.child;
begin
execute 'insert
into
test_tab (id,
report_date,
effective_asof_date,
effective_until_date,
active_flag) select id,
to_date(report_date,''YYMMDD'') report_date,
now(),
''31-Dec-2200'',
''Y''
from '||
tab_partition.child ||' on
conflict (id) do update set report_date=excluded.report_date;';
commit;
end;
end loop;
exception
when others then
GET STACKED DIAGNOSTICS err_context = PG_EXCEPTION_CONTEXT;
RAISE INFO 'Error Name:%',SQLERRM;
RAISE INFO 'Error State:%', SQLSTATE;
RAISE INFO 'Error Context:%', err_context;
end;
$procedure$;
I am calling above procedure by creating sqlalchemy engine and then calling this procedure.
def load_test(session, table, log): # pragma: no cover
try:
sql = "call prc_insert_proc('" +
table + "');"
session.execute(text(sql).execution_options(autocommit=False))
session.commit()
except ErrorBase as e:
log.error(f"{str(e)}")
raise
It is throwing up following error. Session was created using sessionmaker and create_engine.
engine = create_engine(config.connection_string, echo=False)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
invalid transaction termination
I am pretty new to both sqlalchemy and PostgreSQL.Each partition of the table has about a million record and I want to commit after every insert. Other option would be get the list of partition in the python script and add partition name parameter in procedure. Loop through the procedure in python and commit after every call. However, when I read that in PostgreSQL 11 we can commit inside the procedure than I thought of using that.
python postgresql sqlalchemy postgresql-11
python postgresql sqlalchemy postgresql-11
asked Nov 21 at 17:47
Raj
297
297
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53417864%2fcommit-inside-postgressql11-procedure-throwing-error-when-call-from-sqlalchemy-e%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown