我正在使用JAVA调用一个具有200多个DROP表语句的函数,我得到的是org.postgresql.util.PSQLException:错误:超出共享内存。 我应该遵循什么方法以避免共享memomry?
PS:限制是我无法更改与PostgresSQL相关的任何参数。
答案 0 :(得分:1)
如果错误的原因在服务器端:在PostgreSQL中,函数总是在事务内执行。 DO
块是匿名函数,并以相同的方式处理。因为即使像CREATE
或DROP
这样的DML命令在PostgreSQL中也是事务性的,这些命令也会强调用于ROLLBACK
和COMMIT
的常用资源。
我的猜测是,丢弃大量的大桌子会占用大量内存。 因此,如果您不需要函数中的事务行为,最简单的方法是将大函数拆分为几个较小的函数。在单独的事务中调用每个函数。