Informix: Ошибка -528 Превышен максимальный размер строки вывода (32767) - PullRequest
0 голосов
/ 07 февраля 2019

Я занимаюсь разработкой базы данных Informix (v. 12FC9DE) и получаю ошибку -528 (Maximum output rowsize exceeded) при выполнении следующего SELECT:

SELECT 
    genbson(row("typ", "name", "sortName", "longName", "shortName", "status", "dates", "comment", "customer"), 1, 1)::JSON
FROM (
        (SELECT
            genbson(row("name", "shortName"), 1, 1) as "typ",
            '{"de":"Max"}'::JSON::BSON              as "name",
            '{"de":"Mustermann Max"}'::JSON::BSON   as "sortName", 
            '{"de":"Max Mustermann"}'::JSON::BSON   as "longName", 
            '{"de":"M. Mustermann"}'::JSON::BSON    as "shortName",
            'A'                                     as "status",
            genbson(row("street", "number", "zipCode", "city"), 1, 1)       as "address",
            genbson(row("phone","fax", "mailaddress", "website"), 1, 1)     as "contact",
            genbson(row("birthDate", "retireDate"), 1, 1)                   as "dates",
            'red'                                   as "comment",
            genbson(row("id"), 1, 1)                as "customer"
        FROM (
            (SELECT             
                '{"de":"Person"}'::JSON::BSON   as "name",
                '{"de":"Person"}'::JSON::BSON   as "shortName",
                'Hauptstraße'                   as "street",
                '1'                             as "number",
                '12345'                         as "zipCode",
                'Musterhausen'                  as "city",
                '012-3456789'                   as "phone",
                '012-34567810'                  as "fax",               
                'info@mustermann.de'            as "mailaddress",
                'www.mustermann.de'             as "website",
                '1980-02-27'::date              as "birthDate",             
                null::date                      as "retireDate",
                'abdgt-756474-eerrr'            as "id"
            FROM  systables where tabid = 1) as a) 
    ) as b);

С помощью этого оператора я пытаюсь объединить несколько столбцов в один JSON /BSON-объект.Строки в этом примере, которые преобразуются с помощью :: JSON :: BSON, представляют собой уже объединенные значения в хранимой процедуре.

При изменении двух из этих значений на обычные строки ошибка не отображается, и SELECT успешен:

SELECT 
    genbson(row("typ", "name", "sortName", "longName", "shortName", "status", "dates", "comment", "customer"), 1, 1)::JSON
FROM (
        (SELECT
            genbson(row("name", "shortName"), 1, 1) as "typ",
            '{"de":"Max"}'::JSON::BSON              as "name",
            '{"de":"Mustermann Max"}'::JSON::BSON   as "sortName", 
            '{"de":"Max Mustermann"}'               as "longName", 
            '{"de":"M. Mustermann"}'                as "shortName",
            'A'                                     as "status",
            genbson(row("street", "number", "zipCode", "city"), 1, 1)       as "address",
            genbson(row("phone","fax", "mailaddress", "website"), 1, 1)     as "contact",
            genbson(row("birthDate", "retireDate"), 1, 1)                   as "dates",
            'red'                                   as "comment",
            genbson(row("id"), 1, 1)                as "customer"
        FROM (
            (SELECT             
                '{"de":"Person"}'::JSON::BSON   as "name",
                '{"de":"Person"}'::JSON::BSON   as "shortName",
                'Hauptstraße'                   as "street",
                '1'                             as "number",
                '12345'                         as "zipCode",
                'Musterhausen'                  as "city",
                '012-3456789'                   as "phone",
                '012-34567810'                  as "fax",               
                'info@mustermann.de'            as "mailaddress",
                'www.mustermann.de'             as "website",
                '1980-02-27'::date              as "birthDate",             
                null::date                      as "retireDate",
                'abdgt-756474-eerrr'            as "id"
            FROM  systables where tabid = 1) as a) 
    ) as b);

Я использую DBeaver или DataStudio для выполнения SELECT.В обоих появляется ошибка.

Мой вопрос: почему?;)

Есть предложения по этому поводу?Возможно, это известная ошибка или я что-то не так делаю?

С уважением, С. Кип

1 Ответ

0 голосов
/ 22 марта 2019

Чтобы обойти 4kB-per-genbson (), который на самом деле равен 4kB-per-BSON, в вашем запросе вы можете привести каждый из этих вызовов genbson (...) к lvarchar (max_expected_length).

SELECT
    genbson(row("typ", "name", "sortName", "longName", "shortName", "status", "dates", "comment", "customer"), 1, 1)::JSON::LVARCHAR(400)
FROM (
        (SELECT
            genbson(row("name", "shortName"), 1, 1)::JSON::LVARCHAR(200) as "typ",
            '{"de":"Max"}'                          as "name",
            '{"de":"Mustermann Max"}'               as "sortName",
            '{"de":"Max Mustermann"}'               as "longName",
            '{"de":"M. Mustermann"}'                as "shortName",
            'A'                                     as "status",
            genbson(row("street", "number", "zipCode", "city"), 1, 1)::JSON::LVARCHAR(200) as "address",
            genbson(row("phone","fax", "mailaddress", "website"), 1, 1)::JSON::LVARCHAR(200) as "contact",
            genbson(row("birthDate", "retireDate"), 1, 1)::JSON::LVARCHAR(200) as "dates",
            'red'                                   as "comment",
            genbson(row("id"), 1, 1)::JSON::LVARCHAR(200) as "customer"
        FROM (
            (SELECT
                '{"de":"Person"}'               as "name",
                '{"de":"Person"}'               as "shortName",
                'Hauptstraße'                   as "street",
                '1'                             as "number",
                '12345'                         as "zipCode",
                'Musterhausen'                  as "city",
                '012-3456789'                   as "phone",
                '012-34567810'                  as "fax",
                'info@mustermann.de'            as "mailaddress",
                'www.mustermann.de'             as "website",
                '1980-02-27'::date              as "birthDate",
                null::date                      as "retireDate",
                'abdgt-756474-eerrr'            as "id"
            FROM  systables where tabid = 1) as a)
    ) as b);

(я также удалил приведение :: JSON :: BSON.)

...