Re: array must have even number of elements

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: susan(dot)hurst(at)brookhurstdata(dot)com
Cc: pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: array must have even number of elements
Date: 2018-09-21 12:06:43
Message-ID: CAFj8pRCXwxUM=VZtwWdt2TDSWAdwRX6o2XEXSQ7bQ3FxoUfgqw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

čt 20. 9. 2018 v 20:29 odesílatel Susan Hurst <
susan(dot)hurst(at)brookhurstdata(dot)com> napsal:

> Thanks, everyone!
>
> I get it now. It's not just an array but an hstore array. I changed my
> code to include the original values so now it works:
>
> -- new will be substituted for $1 during execution with using clause
>
> l_query_string := 'select ($1 #= hstore(array[' || l_orig_list || '],'
>
> || 'array[' || l_clean_list || '])).*';
>
>
>
> Pavel...I am creating a trigger function to look for columns with char,
> varchar or text data types to purge any incoming or updated data of
> extraneous spaces and tabs both within the string and on either end. We
> can use the same function from any table that calls it from a trigger. Now
> that it works, we can refactor it to make it better. I would welcome your
> suggestions for alternatives to hstore.
>
Similar task are not good for plpgsql. You can check PLPerl or PLPythonu,
that is better for these iterations over record.

It can be easy task for C extension.

> Thanks for your help!
>
with pleasure

Pavel

> Sue
>
>
>
> ---
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Susan E Hurst
> Principal Consultant
> Brookhurst Data LLC
> Email: susan(dot)hurst(at)brookhurstdata(dot)com
> Mobile: 314-486-3261
>
> On 2018-09-20 13:04, Pavel Stehule wrote:
>
> Hi
>
> čt 20. 9. 2018 v 19:55 odesílatel Susan Hurst <
> susan(dot)hurst(at)brookhurstdata(dot)com> napsal:
>
>>
>> Why must an array have an even number of elements? I need to use a
>> trigger function on any table, some of which may have an odd number of
>> columns that I want to cleanse before inserting/updating.
>
>
> The hstore function get parameters as sequence of pairs (key, value) - so
> the number should be even. Odd parameter signalize broken format.
>
> Your example is pretty crazy - I cannot to decode it. Maybe you should to
> use different function, I don't see a sense for using hstore type there.
> But I cannot to decode it.
>
> Regards
>
> Pavel
>
>
>
>
>>
>>
>> Is there a workaround for this?
>>
>>
>> ERROR: array must have even number of elements
>>
>> SQL state: 2202E
>>
>> Context: SQL statement "SELECT ($1 #=
>> hstore(array[trim(replace(regexp_replace($1.c,'( ){2,}',' ','g'),' ','
>> ')),trim(replace(regexp_replace($1.vc,'( ){2,}',' ','g'),' ','
>> ')),trim(replace(regexp_replace($1.t,'( ){2,}',' ','g'),' ',' '))])).*"
>> PL/pgSQL function store.trim_string_before_dml() line 44 at EXECUTE
>>
>>
>>
>> -- my test table
>> create table dm.trg_test (c character(8), vc varchar(16), t text);
>> insert into dm.trg_test (c,vc,t) values ('ctest',' vctest ','
>> ttest ');
>>
>>
>> -- code snippet that produced the error.
>> -- new will be substituted for $1 during execution with using clause
>> l_query_string := 'select ($1 #= hstore(array[' || l_column_list ||
>> '])).*';
>> execute format(l_query_string) using new into new;
>> return new;
>>
>>
>> Thanks for your help!
>>
>> --
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> Susan E Hurst
>> Principal Consultant
>> Brookhurst Data LLC
>> Email: susan(dot)hurst(at)brookhurstdata(dot)com
>> Mobile: 314-486-3261
>>
>>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message greigwise 2018-09-21 13:20:21 Re: Out of Memory
Previous Message Stephen Cook 2018-09-21 02:23:57 Re: Code of Conduct