анализ ошибок, возникающих при загрузке файлов в API в postgreSQL - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь проанализировать ошибки, возникающие в то время, когда наши клиенты пытаются загрузить свои файлы в нашу табличную форму, не уверен, возможно ли это даже с помощью PostgreSQL.

В моей таблице три столбца company_id, import_id и operation_errors.

Я пробовал этот запрос, который отлично работал на строках, в которых есть одна ошибка, но в большинстве случаев у меня более 3 ошибок на импорт, мой запрос выбирал первый только первый, когда их больше.

SELECT importable_id ,
       importable_type ,
       substring(lower(replace_operation)
                 FROM 'title:(.+?)detail:') test
FROM
  ( SELECT import_id ,
           importable_id ,
           i.importable_type ,
           operation_errors  as replace_operation
   FROM import_results ir
   JOIN imports i ON ir.import_id = i.id
   WHERE operation_errors IS NOT NULL
     AND i.created_at >= date_trunc('month', CURRENT_DATE :: date)) a
WHERE importable_type = 'Company';

как я уже говорил, в строке может быть одна или несколько ошибок, вот один из примеров ошибок Msg

      ---
      - !ruby/hash:ActiveSupport::xxxxxxxxxxxxxxxx
        code: 314
      title: xxxxxxxxxxxxxxxxxxxxxxxx.
        detail: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        xxxx. i.e 21 February, 2018.
     source: !ruby/hash:ActiveSupport::xxxxxxxxxxxxxxxxxxxxxxxxx
      pointer: "/data/attributes/xxxxxxx"
      - !ruby/hash:ActiveSupport::xxxxxxxxxxxxxxxxxxxxxxxxxxx
       code: 343
        title: xxxxxx xxxxx xxxxxxx xxxxxxxx xxxx
     detail: xxxxxx xxxxxxx xxxxxx xxxxxxxx xxxxxxxxxxxxx
        xxxxxx xxxxxxxx xxxxx xxxxxxx xxxx xxxxxxxx xxxxxxxxxxx.
     source: !ruby/hash:ActiveSupport::xxxxxxxxxxxxxxxxx
     pointer: "/data/attributes/xxxxxxxxxxx"
    - !ruby/hash:ActiveSupport::             
     code: 342
      title: xxxxx xxxxx xxxxx xxxxxxx xxxxx xxxxxxxxxx xxxxxxxxx xxx
    detail: xxxxxx xx xxx xxx xxx xxx xxxx xxxxxxx xxxxx
    xxxxxxxxx     x xxxxxxx xxxxxxx xx xxxxxx xx xx.
      source: !ruby/hash:ActiveSupport::xxxxxxxxxxx
     pointer: "/data/attributes/xxxxxxxxxx"

Я надеюсь, что что-то подобное

      importable_id errore1         errore 2        errore 3
       1           title: xxxxx.    title: xxxxx.   title: xxxxx.
       2           title: xxxxx.        
       3           itle: xxxxx.      title: xxxxx.  

Я также попытался

       split_part(replace_operation, ' ', 1) AS col1

, но я получаю 40 столбцов и все еще не получил все ошибки в некоторых строках

1 Ответ

0 голосов
/ 27 апреля 2018

Мне удалось найти ответ на мой вопрос, спасибо @Andyk

WITH errors AS
  (SELECT importable_id ,
          importable_type,
          created_at ,
          substring(lower(replace_operation)
                    FROM 'code:(.+?)title') code_1 ,
          split_part(replace_operation, 'code', 2) AS code_2 ,
          split_part(replace_operation, 'title', 2) AS sec_part ,
          split_part(split_part(replace_operation, 'title', 2), ':', 2) error_1 ,
          split_part(replace_operation, 'title', 3) AS third_part ,
          split_part(split_part(replace_operation, 'title', 3), ':', 2) error_2 ,
          split_part(replace_operation, 'title', 4) AS f_part ,
          split_part(split_part(replace_operation, 'title', 4), ':', 2) error_3 ,
          split_part(replace_operation, 'title', 5) AS f_part ,
          split_part(split_part(replace_operation, 'title', 5), ':', 2) error_4
   FROM
     ( SELECT import_id ,
              importable_id ,
              i.importable_type ,
              operation_errors AS replace_operation,
              i.created_at
      FROM import_results ir
      JOIN imports i ON ir.import_id = i.id
      WHERE operation_errors IS NOT NULL
        AND i.created_at >= date_trunc('month', CURRENT_DATE :: date)) a
   WHERE importable_type = 'Company')
SELECT importable_id,
       created_at::date ,
       code_1 ,
       error_1 ,
       error_2 ,
       error_3 ,
       error_4
FROM errors
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...