Postgres char type inconsistency

From: Brent Wood <Brent(dot)Wood(at)niwa(dot)co(dot)nz>
To: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Cc: Fred Wei <Fred(dot)Wei(at)niwa(dot)co(dot)nz>, David Fisher <David(dot)Fisher(at)niwa(dot)co(dot)nz>
Subject: Postgres char type inconsistency
Date: 2014-11-04 18:43:38
Message-ID: 5895e5a1c32344f08325516457f1a510@welwex02.niwa.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


Looking at the behaviour of char & varchar types, there seems to be an issue. Can anyone explain this behaviour? Is there a bug of some sort?

According to the docs http://www.postgresql.org/docs/9.3/static/datatype-character.html)(:
" If the string to be stored is shorter than the declared length, values of type character will be space-padded; values of type character varying will simply store the shorter string."

Yet chars are not being padded, in fact they lose trailing spaces which are retained by varchars. They also return length()'s less than the defined length... which should not be the case for a padded string as defined in the documentation.

fish=# create table test(var3 varchar(3),cha3 char(3));
CREATE TABLE
fish=# insert into test values('1','1');
INSERT 0 1
fish=# insert into test values('2 ','2 '); -- one space
INSERT 0 1
fish=# insert into test values('3 ','3 '); --two spaces
INSERT 0 1
fish=# select var3||':' as var3, cha3||':' as char3 from test;
var3 | char3
------+-------
1: | 1:
2 : | 2:
3 : | 3:
(3 rows)
test=# select length(var3) as v_lgth, length(cha3) as c_length from test;
v_lgth | c_length
--------+----------
1 | 1
2 | 1
3 | 1

So, in summary, varchar stores whatever feed to it and keeps trailing spaces to max length, char type will trim off trailing spaces, and stor a string shorter than the specified length..

Brent Wood

Programme leader: Environmental Information Delivery
NIWA
DDI: +64 (4) 3860529

Brent Wood
Principal Technician - GIS and Spatial Data Management
Programme Leader - Environmental Information Delivery
+64-4-386-0529 | 301 Evans Bay Parade, Greta Point, Wellington | www.niwa.co.nz<http://www.niwa.co.nz>
[NIWA]<http://www.niwa.co.nz>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2014-11-04 18:51:23 Re: [HACKERS] COPY TO returning empty result with parallel ALTER TABLE
Previous Message Bernd Helmle 2014-11-04 18:23:21 Re: COPY TO returning empty result with parallel ALTER TABLE