在pg的日志中经常会看到unname statement。它通常指的是unnamed prepared statement,由支持wire protocol的客户端(使用libpq的库)发起。通常是调用PQprepare方法,如下:
PGresult *PQprepare(PGconn *conn,
const char *stmtName,
const char *query,
int nParams,
const Oid *paramTypes);
stmtName
can be ""
to create an unnamed statement, in which case any pre-existing unnamed statement is automatically replaced。所以每次新的事务开始时,都会判断有没有unamed stmt,有的话清理掉,它不保存在公共的事务表,所以任何时候只存在一个。如下:
static void
exec_simple_query(const char *query_string)
{
...
/*
* Zap any pre-existing unnamed statement. (While not strictly necessary,
* it seems best to define simple-Query mode as if it used the unnamed
* statement and portal; this ensures we recover any storage used by prior
* unnamed operations.)
*/
drop_unnamed_stmt();
...
}
https://www.postgresql.org/docs/current/libpq-exec.html
https://www.pgcon.org/2014/schedule/attachments/330_postgres-for-the-wire.pdf
LightDB Enterprise Postgres--金融级关系型数据库,更快、更稳、更懂金融!