PostgreSQL から直接データベースにアクセスして、Odoo内の情報を取得したいのですが、テーブルやカラムはどこで確認すれば良いですか?
2 Answers
設定->技術->データベース構造
に行きますと大体のことがわかります。
「モデル」がテーブルで、「項目」がカラムに対応しており、
SELECT (項目名) FROM (モデル名);
でほとんどの情報を検索することができます。
ただ、顧客のカテゴリーに対応するパートナータグなどは、ひとつのレコードに複数の情報を持ちますので、先程の構文では検索できません。
このような項目(フィールド)は Many2Many field といいます。
Many2Many field
設定->技術->データベjース構造->多対多の関係
に進むと、Many2Many field の関係に対応するテーブルが見られます。
パートナーとパートナータグの関係に対応するテーブルは res_partner_res_partner_category_rel
です。
データベースから覗くと、そのテーブルはパートナーIDとカテゴリーIDのカラムを持っていることがわかりますね。
プロパティフィールド
Many2Many field 以外にもうひとつ注意すべきフィールドがあります。
たとえば顧客の会計に関する情報に、「会計ポジション」や「売掛金勘定」がありますが、これらはパートナーテーブルではなく、別のテーブルに格納されています。
それらはプロパティフィールドといって、設定->技術->パラメータ->Company Properties
から確認できます。
たとえばプロパティフィールド「顧客支払条件」は、プロパティテーブル内に property_payment_term
というレコードを持っていて、パートナーのIDと、支払条件のIDの情報を持っているというわけです。
まとめ
- データベースからは SELECT (項目名) FROM (モデル名); で検索!
- Many2Many fieldは「多対多の関係」から関連するテーブルを探せ!
- Property field は「Company Properties」から関連するレコードを探せ!
田代さんの回答で、十分問題解決できていると思いますが、
複雑なモデルの場合、SQL のリレーションを自分で JOIN するのはなかなか大変かもしれません。
また、読取専用で SELECT 等する分には問題ないですが UPDATE 等直接 Postgres で実行するのは怖いので、
Odoo の WEB XML RPC の API を利用することをオススメします。
こちらを使えば、複雑なモデルでも比較的簡単に扱えます。
英語ですが、以下に参考リンクを貼っておきます。
Ref) https://www.odoo.com/documentation/11.0/webservices/odoo.html
また、大規模なデータの取り込みの高速化等は
以下のスライドがとても参考になるかと思います。
Ref) https://www.odoo.com/slides/slide/how-to-import-large-complex-data-into-odoo-455/pdf_content