OTRS から postgresql データベースにクエリを作成する際に問題があります。CMDB に保存されているデータを含むアセット リストを取得する必要がありますが、データの保存方法に問題があります。
このクエリは問題なく動作しますが、別の左結合を追加してさらにデータを取得するとすぐに、結果を返すことなく実行されます。
私が見る限り、問題はすべての情報が関係なしに xml_storage テーブルに含まれているため、データを取得するためにそのテーブルを繰り返しクエリする必要があることです。また、場合によっては整数が可変文字として格納されるデータ型が混在しているため、その値を使用して一般カタログから追加情報を取得することができません。
私はこれで何日もレンガの壁に頭をぶつけていたので、本当に助けていただければ幸いです
SELECT
asset_value,
manufacturer_value,
model_value,
serial_value,
fqdn_value,
array_agg(service),
purchasedate_value,
status_value,
configitem.configitem_number,
configitem_version.name,
general_catalog.name
FROM
public.configitem_version,
public.general_catalog,
public.configitem
left join
(SELECT
xml_storage.xml_content_value AS asset_value,
xml_storage.xml_key
FROM
public.xml_storage
WHERE
xml_content_key = '[1]{''Version''}[1]{''Asset Number''}[1]{''Content''}') as select_asset on last_version_id::int = select_asset.xml_key::int
left join
(SELECT
xml_storage.xml_content_value AS manufacturer_value,
xml_storage.xml_key
FROM
public.xml_storage
WHERE
xml_content_key = '[1]{''Version''}[1]{''Manufacturer''}[1]{''Content''}' ) as select_manufacturer on last_version_id::int = select_manufacturer.xml_key::int
left join
(SELECT
xml_storage.xml_content_value AS model_value,
xml_storage.xml_key
FROM
public.xml_storage
WHERE
xml_content_key = '[1]{''Version''}[1]{''Model''}[1]{''Content''}' ) as select_model on last_version_id::int = select_model.xml_key::int
left join
(SELECT
xml_storage.xml_content_value AS serial_value,
xml_storage.xml_key
FROM
public.xml_storage
WHERE
xml_content_key = '[1]{''Version''}[1]{''SerialNumber''}[1]{''Content''}' ) as select_serial on last_version_id::int = select_serial.xml_key::int
left join
(SELECT
xml_storage.xml_content_value AS fqdn_value,
xml_storage.xml_key
FROM
public.xml_storage
WHERE
xml_content_key = '[1]{''Version''}[1]{''FQDN''}[1]{''Content''}' ) as select_fqdn on last_version_id::int = select_fqdn.xml_key::int
left join
(SELECT
link_relation.source_key AS "configitem_id",
service.name AS "service"
FROM
public.link_relation,
public.service
WHERE
link_relation.target_key::int = service.id AND
link_relation.target_object_id::int = 2 AND link_relation.source_object_id::int = 3
UNION
SELECT
link_relation.target_key AS "configitem_id",
service.name AS "service"
FROM
public.link_relation,
public.service
WHERE
link_relation.source_key::int = service.id AND
link_relation.target_object_id::int = 3 AND link_relation.source_object_id::int = 2) as select_service on configitem.id = configitem_id::int
left join
(SELECT
xml_storage.xml_content_value AS purchasedate_value,
xml_storage.xml_key
FROM
public.xml_storage
WHERE
xml_content_key = '[1]{''Version''}[1]{''PurchaseDate''}[1]{''Content''}' ) as select_purchasedate on last_version_id::int = select_purchasedate.xml_key::int
left join
(SELECT
general_catalog.name AS status_value,
general_catalog.id
FROM
public.general_catalog) as select_status on configitem.cur_depl_state_id::int = select_status.id::int
WHERE
configitem.last_version_id = configitem_version.id AND
configitem.class_id = general_catalog.id AND
(configitem.class_id = 32 OR configitem.class_id = 33)
GROUP BY
asset_value,
manufacturer_value,
model_value,
serial_value,
fqdn_value,
purchasedate_value,
status_value,
configitem.configitem_number,
configitem_version.name,
general_catalog.name
;