1

PostgreSQLでこの問題が発生し、Webページのメタタグを解析してから、要求を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を更新するトリガーを追加したときに開始された可能性があることを言及する必要がありますが、これがどのように関連しているかわかりません。

アップデート

また、後でruであるが、メタタグの解析のみを実行し、クエリが機能する同期関数があることを追加したいと思います。したがって、どこかでクエリの実行がブロックされています。

4

1 に答える 1

1

これで、クエリを画面にエコーして実行できるため、データのブロックが実行されていると言えます。これにより、可能性が大幅に狭められます。

私が考えている最も可能性の高いケースは、トランザクションをコミットするのを忘れているということです。試す:

pg_query('commit'); 

ループの後。これで問題が解決する場合があります。

もう 1 つの可能性は、接続が閉じられていることですが、通常は IME で少なくとも警告がスローされます。念のため、同じ接続でいくつかの選択クエリを試して、開いていることを確認することをお勧めします。

最後に、ネットワーク アナライザーを使用してデータベースとの間のトラフィックを監視することをお勧めします (ローカル ソケットを使用していないと仮定します)。これにより、正確に何が起こっているのかをより詳しく知ることができます。

于 2013-03-07T14:26:13.250 に答える