我在PostgreSQL中遇到这个问题,我正在解析一个网页元标记,然后将请求输入到pg_query中。为了简洁起见,本例中的数据未经过清理。
这样的事情:
foreach ($metas as $meta) {
$property = $meta->getAttribute('property');
$content = $meta->getAttribute('content');
$query = "UPDATE " . $tablename . " SET article_meta = article_meta || '$property=>$content'::hstore where article_id = '{$this -> article_id}' ;";
pg_query($conn, $query);
}
问题是,查询不执行,也不会失败或抛出任何错误。但是,如果我复制已执行的查询并通过类似pgadmin的方式运行它,它就可以工作。因此查询无效。有关为什么会发生这种情况的任何想法?
我应该提一下,当我添加触发器来更新全文搜索tsvector时,这种行为可能已经开始了,但我不知道这是如何相关的。
更新
另外我想补充一点,我有一个稍后的同步函数,但只执行元标记的解析,并且查询有效。所以某些东西阻止了查询的执行。
答案 0 :(得分:1)
现在您说正在运行数据块,因为您可以将查询回显到屏幕并运行。这大大缩小了可能性。
我认为最可能的情况就是忘记提交交易。尝试:
pg_query('commit');
循环后。这可以解决你的问题。
另一种可能性是连接已关闭,但通常IME在这种情况下至少会发出警告。您可能希望在同一个连接上尝试一些选择查询,以确保它是打开的只是为了确定。
最后,您可能希望尝试使用网络分析器来监视进出db的流量(假设您没有使用本地套接字)。这应该让您更加了解究竟发生了什么。