1

我在 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 时,这种行为可能已经开始,但我看不出这是如何相关的。

更新

另外我想补充一点,我有一个同步功能,它稍后会运行,但只执行元标记的解析,并且查询有效。所以某处阻止了查询的执行。

4

1 回答 1

1

现在您说数据块正在运行,因为您可以将查询回显到屏幕并运行。这大大缩小了可能性。

在我看来,最有可能的情况就是您忘记提交交易。尝试:

pg_query('commit'); 

循环之后。这可能会解决您的问题。

另一种可能性是连接已关闭,但通常 IME 在这种情况下至少会引发警告。您可能想在同一连接上尝试一些选择查询,以确保它是打开的。

最后,您可能想尝试使用网络分析器来观察进出数据库的流量(假设您没有使用本地套接字)。这应该让您更深入地了解到底发生了什么。

于 2013-03-07T14:26:13.250 回答