我已经通过(PostgreSQL 的)libpq 创建和使用准备好的语句。我想知道是否有一种方法可以在不断开数据库连接的情况下删除准备好的语句?或者实现这一目标的最佳方法是重新连接并重新准备?
我使用的是 PostgreSQL 8.4 版本的 libpq。我搜索了 9.2 文档但找不到与此相关的任何内容...
根据文档,
DEALLOCATE
是删除准备好的语句的唯一方法,强调:
与 PQexecPrepared 一起使用的准备语句也可以通过以下方式创建 执行 SQL PREPARE 语句。另外,虽然 没有 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;
。
您可以在当前会话中删除一条准备好的语句:
DEALLOCATE PREPARE <name>;
并且,您可以删除当前会话中所有准备好的语句:
DEALLOCATE PREPARE ALL;
*备注:
您可以省略
PREPARE
,这是可选的。
注销后准备好的语句将被删除。
文档详细解释了
DEALLOCATE
声明。