我已经通过利用 libpq(PostgreSQL 的)创建和使用准备好的语句。我想知道是否有办法在不断开数据库的情况下删除准备好的语句?或者实现这一目标的最佳方法是重新连接和重新准备?
我正在使用 PostgreSQL 8.4 版的 libpq。我搜索了 9.2 文档,但找不到与此相关的任何内容...
我已经通过利用 libpq(PostgreSQL 的)创建和使用准备好的语句。我想知道是否有办法在不断开数据库的情况下删除准备好的语句?或者实现这一目标的最佳方法是重新连接和重新准备?
我正在使用 PostgreSQL 8.4 版的 libpq。我搜索了 9.2 文档,但找不到与此相关的任何内容...
根据文档,DEALLOCATE
是删除准备好的语句的唯一方法,重点补充说:
也可以通过执行 SQL PREPARE 语句来创建用于 PQexecPrepared 的预处理语句。此外,虽然没有用于删除准备好的语句的 libpq 函数,但 SQL DEALLOCATE 语句可用于该目的。
大概他们没有为此费心公开一个 C 函数,因为这很简单:
char query[NAMEDATALEN+12];
snprintf(query, sizeof(query), "DEALLOCATE %s", stmtName);
return PQexec(conn, query);
正如@Amit 提到的,有时 Postgress 会抛出“准备好的语句不存在”。
不幸的是,没有DEALLOCATE IF EXISTS
,但一个简单的解决方法是:
DEALLOCATE ALL;
.