On Tue, May 3, 2016 at 6:50 AM, Adrian Klaver <adrian.kla...@aklaver.com>
wrote:

> On 05/03/2016 04:28 AM, Durumdara wrote:
>
>> Hello!
>>
>> As I experienced, PGSQL changes the result field sizes to unlimited
>> varchar, when I passed different field size in same column of the union.
>>
>> SP.Key - varchar(100)
>> SP.Value - varchar(200)
>>
>> Example:
>>
>>   select 'a', value from sp
>>   union all
>>   select key, value from sp
>>
>>
>> The first field is not limited to 100, it's unlimited varchar() (= Text,
>> Memo, CLOB).
>>
>> So PG don't use the maximal field size (100).
>>
>>
​The maximum size of the unknown 'a' ​as text is unlimited so it did choose
the maximum field size max(INF, 100) = 100

The system recognizes there is no guarantee that 'a' could be reliably
casted into a varchar(100)


>> If I did cast on the field to resize to 100, the result is limited
>> correctly.
>>
>>
>>   select cast('a' as varchar(100)), value from sp
>>   union all
>>   select key, value from sp
>>
>>
>> Can I force somehow to PG use the maximal size?
>>
>> Or must I know and equalize all field sizes in union?
>>
>> Or must I use temporary tables and inserts to not get this problem?
>>
>
>
> See below for complete explanation:
>
> http://www.postgresql.org/docs/9.5/static/typeconv-union-case.html
>
> 10.5. UNION, CASE, and Related Constructs
>
>>
>>
​This seems to fail to answer the OPs question.  Specifically, do these
rules automatically, or at least if #1 is not true, cause typemod
information to be lost?  IOW, is it because of the unknown that both end up
up-casted to typemod-less text?

David J.

Reply via email to