2017-01-25 5 views
0

У меня есть следующий запрос:Postgres передать более 100 аргументы функции CONCAT

SELECT 
"external_id" AS EVENT_ID, 
"uuid"  AS EVENT_VERSION_ID, 
"timestamp" AS EVENT_VERSION_TIMESTAMP, 
CONCAT('{', 
'"timestamp": ', COALESCE(timestamp, NULL), ',', 
'"uuid": ', COALESCE("uuid", '"' || "uuid" || '"', 'null'), ',', 
'"fraud": ', COALESCE("fraud",'true','false', NULL), ',', 
'"score": ', COALESCE("score", NULL), ',', 
'"scoreTracking": ', COALESCE("scoreTracking", NULL), ',', 
'"domain": ', COALESCE("domain", '"' || "domain" || '"', NULL), ',', 
'"event_occurred_at": ', COALESCE("event_occurred_at", NULL), ',', 
'"event_received_at": ', COALESCE("event_received_at", NULL), ',', 
'"event_type": ', COALESCE("event_type", '"' || "event_type" || '"',  NULL), ',', 
'"event_is_update": ', COALESCE("event_is_update",'true', 'false', NULL), ',', 
'"transaction_id": ', COALESCE("transaction_id", '"' || "transaction_id" || '"', NULL), ',', 
'"transaction_created_at": ', COALESCE("transaction_created_at", NULL), ',', 
'"transaction_updated_at": ', COALESCE("transaction_updated_at", NULL), ',', 
'"transaction_type": ', COALESCE("transaction_type", '"' || "transaction_type" || '"', NULL), ',', 
. 
. 
. 
. 
. 
186 fields to concat......) AS EVENT_FIELDS; 

Однако, Postgres не позволяет мне пройти более 100 аргументов. Я проверил онлайн и нашел, что прочитал параметр «variadic». Однако я не уверен, как использовать его в этом контексте.

Большое спасибо заранее.

+0

Можете ли вы 'CONCAT' 100 и' CONCAT' 86 затем CONCAT двух результатов? –

+0

Кстати. Почему 'NULL' один из ваших аргументов« объединяется »? –

+0

@Martin Я так не думаю, потому что я должен конкатрировать все поля в те же поля, что и EVENT_FIELDS. – Anusha

ответ

5

row_to_json() это лучший способ, чтобы получить выход как {"timestamp:2017-01-01","uuid: 1255784",...}

SELECT "external_id" AS EVENT_ID 
     ,"uuid" AS EVENT_VERSION_ID 
     ,"timestamp" AS EVENT_VERSION_TIMESTAMP 
     ,row_to_json((--{"timestamp:2017-01-01","uuid: 1255784",...} 
      SELECT t 
      FROM (
       SELECT timestamp 
         ,uuid 
         ,fraud 
         ,score 
         ,event_occurred_at 
       ) t 
      )) AS EVENT_DATA 
FROM your_table 

 Смежные вопросы

  • Нет связанных вопросов^_^