2014年12月8日月曜日

ちょっと脱線して iDempiere のDB(PostgreSQL) を直接変更してみました

今日はちょっと脱線。

以前営業の西島さんが作成した Requisiton (購買依頼)から Purchase Order を作成したとき、ワークフロー的な機能はなんだろう?と思い、思いつきで "Request" を作成してみました。

いろいろ入力してみたものの、よく分からず今回は断念しました(というわけでワークフロー的には「声をかける」という原始的なプロセスを設定)。

まぁ、そまでは良いのですが、 Request を中途半端な状態のまま残してしまって消せなくなってしまいました。

 メッセージを見ると、消そうとしてテーブル  "r_request" のレコードは他のテーブル "r_requestaction" から参照されているので、消せないとか。。

r_requestaction のテーブルをどうやって消すのかわからないし、、、ぢゃテーブル直接いじっちゃいますか。。。。(やっていいかは解らないので人様には勧めませんが、今後DBを直接いじることも出てくると思いますので予行演習ということで、、)

まずssh でサーバーへ接続。
PC から Putty 使っても、VNCでデスクトップ開いてもいいのですが、私はMAC のターミナル使ってサーバーにアクセスしました。
(必要であればそれぞれ以前の記事のリンクを参照ください。)

MacのターミナルでAWSのサーバーにログインします。

# su - postgres
[root@ip ~]# su - postgres
-bash-4.1$ 
-bash-4.1$ psql -d idempiere -U adempiere
psql (9.3.5)
Type "help" for help.


---------------------------------------------
テーブル群を見てみます。
テーブル:r_request と r_requestaction がありました。
---------------------------------------------

idempiere=# \d
                       List of relations
  Schema   |             Name              | Type  |   Owner   
-----------+-------------------------------+-------+-----------
 adempiere | a_asset                       | table | adempiere
 adempiere | a_asset_acct                  | table | adempiere
-----省略------
adempiere | r_request                     | table | adempiere
adempiere | r_request_v                   | view  | adempiere

adempiere | r_requestaction               | table | adempiere
----省略------

idempiere=#           

---------------------------------------------
テーブル:r_request のrequest IDを見てみます。
エラーメッセージの中に示されていた 1000004があります。
これの参照元をさがします。
---------------------------------------------
                            
select r_request_id from r_request;
r_request_id 
--------------
             100
      1000001
      1000002
      1000003
      1000004
(5 rows)

---------------------------------------------
テーブル:r_requestaction の request_IDを見てみます。
エラーメッセージの中に示されていた 1000004があります。
---------------------------------------------

idempiere=#  
select r_request_id from r_requestaction;
 r_request_id 
--------------
            100
            100
     1000004
(3 rows)

---------------------------------------------
(良いか悪いか不明ですが、、)消しちゃいましょう。
---------------------------------------------

idempiere=# delete from r_requestaction where r_request_id = '1000004';

DELETE 1

iDempiere の画面に戻って、 Request を削除してみます。

今度はすんなりと消すことができました。

ちなみに Postgresql にてテーブルを探すときは
¥d ですが、
¥d の後ろにテーブル名を付けると、そのテーブルが持つ項目名が出力されます。
(あれば)マニュアルを読むのが理想ですが、解らなければ項目名を確認したりデータそのものを出力させるなどすればデータに対する理解が進みます。
(DBの世界では「今見えているもの」だけで項目の定義を判断するのはとっても危険なのですが、それを理解した上で手っ取り早く外観を知るには結構使う手です。)

今までの流れからは脱線しましたが、DBを直接見たりいじったりする必要は出てくると思いますので、予行演習がてら試してみました。
(外部からSQLなどでデータに手を付けると iDempiereが担保している整合性を壊す可能性があるため、本来は十分な理解の上行うべきです。)


脱線ついでに以前ログインパスワードの暗号化のところで気になったテーブルを見てみました。
現時点はパスワードが平文であることがわかります。
今度暗号化を指定してもう一度テーブルを確認してみたいと思います。

idempiere=# select ad_user_id, name, password from ad_user;
 ad_user_id |            name            |   password    
------------+----------------------------+---------------
        102 | GardenUser                 | GardenUser
        103 | Joe Sales                  | 
        104 | Carl Boss                  | 
        101 | GardenAdmin                | GardenAdmin
      50001 | WebService                 | WebService
        100 | SuperUser                  | System
    1000006 | clientUser                 | clientUser
    1000005 | clientAdmin                | clientAdmin
          0 | System                     | System
    1000020 | TaroSasaki                 | taro
    1000030 | hamadaj                    | hamadaj
    1000027 | NishijimaO                 | nishijimao
    1000028 | UedaE                      | uedae
    1000029 | takadas                    | takadas





0 件のコメント:

コメントを投稿