2012-11-05 5 views
1

OTRS에서 postgresql 데이터베이스에 대한 쿼리를 만드는 데 문제가 있습니다. CMDB에 저장된 일부 데이터로 자산 목록을 가져와야하지만 데이터 저장 방법에 문제가 있습니다.otrs 데이터베이스를 쿼리 중

이 쿼리는 가능한 멀리까지 작동하지만 더 많은 데이터를 얻기 위해 다른 왼쪽 조인을 추가하자마자 결과를 반환하지 않고 계속 실행됩니다.

필자가 볼 수있는 한 모든 정보가 모든 관계가없는 xml_storage 테이블에 포함되어 있으므로 데이터를 얻기 위해 해당 테이블을 반복적으로 쿼리해야하는 문제가 있습니다. 경우에 따라 정수가 가변 문자로 저장되는 데이터 유형이 혼합되어 있으므로이 값을 사용하여 일반 카탈로그에서 추가 정보를 얻을 수 없습니다. 쿼리보다는 OTRS API를 사용하는 나는이에 대한 일 동안 벽돌 벽에 내 머리를 두드리는 된

그래서 난 정말이 가능할 것이다 도움

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 

    ; 
+0

절대적으로 끔찍한 스키마처럼 보입니다. "영원히 실행되는"쿼리 - 그것에 대해 '설명하는'것이 무엇입니까? '설명을 선택하십시오 ... ' –

답변

1

감사하겠습니다? 데이터를 그렇게 쉽게 얻을 수 있습니다. 또한 ImportExport 모듈을 사용하여 .csv 파일로 데이터를 내보낼 수 있습니다. 귀하의 필요에 따라 이것이 옵션 일 수 있습니다.

관련 문제