4

我已经通过利用 libpq(PostgreSQL 的)创建和使用准备好的语句。我想知道是否有办法在不断开数据库的情况下删除准备好的语句?或者实现这一目标的最佳方法是重新连接和重新准备?

我正在使用 PostgreSQL 8.4 版的 libpq。我搜索了 9.2 文档,但找不到与此相关的任何内容...

4

2 回答 2

11

根据文档DEALLOCATE是删除准备好的语句的唯一方法,重点补充说:

也可以通过执行 SQL PREPARE 语句来创建用于 PQexecPrepared 的预处理语句。此外,虽然没有用于删除准备好的语句的 libpq 函数,但 SQL DEALLOCATE 语句可用于该目的。

大概他们没有为此费心公开一个 C 函数,因为这很简单:

  char query[NAMEDATALEN+12];
  snprintf(query, sizeof(query), "DEALLOCATE %s", stmtName);
  return PQexec(conn, query);
于 2013-06-06T16:15:47.850 回答
0

正如@Amit 提到的,有时 Postgress 会抛出“准备好的语句不存在”。

不幸的是,没有DEALLOCATE IF EXISTS,但一个简单的解决方法是: DEALLOCATE ALL;.

于 2022-01-22T16:35:18.430 回答