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.