teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

情報追記

2018/07/03 05:58

投稿

aokyun
aokyun

スコア17

title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,9 @@
11
11
  // エラーメッセージ
12
12
  ignoring input and redirecting stderr to stdout
13
13
  ```
14
+ 試みたこと
15
+ ・vacuumdb table_name -z db_nameに修正して実行
16
+  →exec()のreturn_val引数が1で異常終了
14
17
 
15
18
  ■パターン2・・・pg_execでSQLとして実行
16
19
  ```
@@ -21,7 +24,16 @@
21
24
  // エラーメッセージ
22
25
  VACUUM cannot run inside a transaction block
23
26
  ```
27
+ 試みたこと
28
+ ・begin; vacuum; commit;
29
+  →VACUUM cannot run inside a transaction blockでエラー
30
+ ・end transaction; vacuum;
31
+  →VACUUM cannot be executed from a function or multi-command stringでエラー
24
32
 
33
+ (備考)
34
+ 社内の開発環境ではパターン1で正常に動作していますが、パターン2はどれもエラー
35
+ 本番環境ではパターン1、2ともにどの手法でもエラーとなっています。
36
+
25
37
  上記のロジックは関数化してあり、table_nameは引数で受け取っています。
26
38
  どのテーブルにバキュームをかけるかはユーザが指定します。
27
39
 

2

ソースコードの追加

2018/07/03 05:58

投稿

aokyun
aokyun

スコア17

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,8 @@
5
5
 
6
6
  ```
7
7
  // 実行コマンド
8
- nohup vacuumdb テーブル名 -z DB名 &
8
+ $cmd = "nohup vacuumdb table_name -z db_name &";
9
+ exec($cmd, $output, $res);
9
10
 
10
11
  // エラーメッセージ
11
12
  ignoring input and redirecting stderr to stdout
@@ -14,12 +15,16 @@
14
15
  ■パターン2・・・pg_execでSQLとして実行
15
16
  ```
16
17
  // 実行SQL
17
- VACUUM FREEZE ANALYZE テーブル名
18
+ $sql = "VACUUM FREEZE ANALYZE table_name";
19
+ pg_exec($sql);
18
20
 
19
21
  // エラーメッセージ
20
22
  VACUUM cannot run inside a transaction block
21
23
  ```
22
24
 
25
+ 上記のロジックは関数化してあり、table_nameは引数で受け取っています。
26
+ どのテーブルにバキュームをかけるかはユーザが指定します。
27
+
23
28
  google先生に聞いてみたものの、試せるものは試してみましたがうまくいきません。
24
29
  コマンドラインやpgadminのような管理ツールからの実行はうまくいきます。
25
30
 

1

脱字修正

2018/07/03 05:21

投稿

aokyun
aokyun

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 管理画面からvacuumが実行できる作成したのですが
1
+ 管理画面からvacuumが実行できる機能を作成したのですが
2
2
  エラーが発生し、どうにもうまくいきません。
3
3
 
4
4
  ■パターン1・・・execにてコマンドを実行