管理画面からvacuumが実行できる機能を作成したのですが
エラーが発生し、どうにもうまくいきません。
■パターン1・・・execにてコマンドを実行
// 実行コマンド $cmd = "nohup vacuumdb table_name -z db_name &"; exec($cmd, $output, $res); // エラーメッセージ ignoring input and redirecting stderr to stdout
試みたこと
・vacuumdb table_name -z db_nameに修正して実行
→exec()のreturn_val引数が1で異常終了
■パターン2・・・pg_execでSQLとして実行
// 実行SQL $sql = "VACUUM FREEZE ANALYZE table_name"; pg_exec($sql); // エラーメッセージ VACUUM cannot run inside a transaction block
試みたこと
・begin; vacuum; commit;
→VACUUM cannot run inside a transaction blockでエラー
・end transaction; vacuum;
→VACUUM cannot be executed from a function or multi-command stringでエラー
(備考)
社内の開発環境ではパターン1で正常に動作していますが、パターン2はどれもエラー
本番環境ではパターン1、2ともにどの手法でもエラーとなっています。
上記のロジックは関数化してあり、table_nameは引数で受け取っています。
どのテーブルにバキュームをかけるかはユーザが指定します。
google先生に聞いてみたものの、試せるものは試してみましたがうまくいきません。
コマンドラインやpgadminのような管理ツールからの実行はうまくいきます。
打開策が浮かばなかったため、知恵をお借りできればと思います。
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー